
文章插圖
1 概述本文介紹在 Java 環(huán)境中執(zhí)行 JavaScript 腳本的簡(jiǎn)單使用,具體包含以下內(nèi)容
Java 8 中的內(nèi)置 Nashorn Javascript 引擎介紹Rhino JavaScript 引擎介紹以及對(duì) XML 的處理介紹2 Java 8 中的內(nèi)置 Nashorn Javascript 引擎介紹Nashorn 是 Java 8 中內(nèi)置的 JavaScript 引擎,無(wú)需加入任何依賴 。
Nashorn 基本使用步驟如下
new 出 ScriptEngineManager 對(duì)象通過(guò) ScriptEngineManager 對(duì)象中的 getEngineByName 方法獲取指定的 JavaScript 引擎,返回 ScriptEngine 對(duì)象Java 8 中的默認(rèn)的 Javascript 引擎包括:[nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript]通過(guò) ScriptEngine 對(duì)象的 eval 方法來(lái)執(zhí)行 JavaScript 腳本 。2.1 通過(guò) PrintWriter 對(duì)象獲取腳本中的 print 輸出Javascript 腳本中沒有函數(shù),沒有返回值,通過(guò) print 輸出內(nèi)容,這時(shí)需要通過(guò) PrintWriter 獲取讀取腳本中的 print 輸出,具體如下
@Testpublic void test_nashorn() {try {ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn");ScriptContext scriptContext = engine.getContext();StringWriter stringWriter = new StringWriter();PrintWriter printWriter = new PrintWriter(stringWriter);scriptContext.setWriter(printWriter);String jsString = "var obj=JSON.parse('{\\\"data\\\":\\\"7155\\\",\\\"sign\\\":\\\"success\\\",\\\"message\\\":null}');print(obj.sign==\"success\");";stringWriter = new StringWriter();printWriter = new PrintWriter(stringWriter);scriptContext.setWriter(printWriter);engine.eval(jsString);System.out.println(String.format("1 result = %s",stringWriter.toString()));jsString = "var obj=JSON.parse('{\\\"data\\\":\\\"7157\\\",\\\"sign\\\":\\\"success\\\",\\\"message\\\":null}');print((function getData() {return obj.data;})())";stringWriter = new StringWriter();printWriter = new PrintWriter(stringWriter);scriptContext.setWriter(printWriter);engine.eval(jsString);System.out.println(String.format("2 result = %s",stringWriter.toString()));jsString = "var obj=JSON.parse('{\\\"data\\\":\\\"7157\\\",\\\"sign\\\":\\\"success\\\",\\\"message\\\":null}');print((function getData() {return obj.data;})())";stringWriter = new StringWriter();printWriter = new PrintWriter(stringWriter);scriptContext.setWriter(printWriter);engine.eval(jsString);System.out.println(String.format("3 result = %s",stringWriter.toString()));} catch (Exception e) {e.printStackTrace();}}2.2 獲取匿名函數(shù)的返回值Javascript 腳本是一個(gè)匿名函數(shù)并且有返回值,通過(guò) eval 函數(shù)可以直接
@Testpublic void test_js_function_return() {try {ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn");String jsFunction = "(function(){var obj=JSON.parse('{\\\"data\\\":\\\"7155\\\",\\\"sign\\\":\\\"success\\\",\\\"message\\\":null}');return obj.sign==\"success\"})();";Boolean result = (Boolean) engine.eval(jsFunction);System.out.println(result);} catch (Exception e) {e.printStackTrace();}}2.3 調(diào)用 Javascript 腳本中指定的函數(shù)Javascript 腳本中有變量,有多個(gè)函數(shù),具體如下
@Testpublic void test_invoke_js_function() {try {ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn");/*var obj = JSON.parse('{\"data\":\"7155\",\"sign\":\"success\",\"message\":null}');function checkSign() {return obj.sign == 'success'}function getData() {return obj.data}function calculate(a, b) {return a + b}*/String jsFunction = "var obj=JSON.parse('{\\\"data\\\":\\\"7155\\\",\\\"sign\\\":\\\"success\\\",\\\"message\\\":null}');function checkSign(){return obj.sign=='success'}function getData(){return obj.data}function calculate(a,b){return a+b}";engine.eval(jsFunction);Invocable invocable = (Invocable) engine;Object result = invocable.invokeFunction("checkSign", null);System.out.println(result);result = invocable.invokeFunction("getData", null);System.out.println(result);result = invocable.invokeFunction("calculate", 2, 5);System.out.println(result);} catch (Exception e) {e.printStackTrace();}}輸出如下true71557.02.4 讀取 Javascript 文件并執(zhí)行這種情況是讀取 Javascript 文件,并執(zhí)行,具體如下
以上關(guān)于本文的內(nèi)容,僅作參考!溫馨提示:如遇健康、疾病相關(guān)的問(wèn)題,請(qǐng)您及時(shí)就醫(yī)或請(qǐng)專業(yè)人士給予相關(guān)指導(dǎo)!
「愛刨根生活網(wǎng)」www.malaban59.cn小編還為您精選了以下內(nèi)容,希望對(duì)您有所幫助:- js腳本編寫教程 js網(wǎng)頁(yè)編程
- 免費(fèi)做視頻特效的軟件推薦 ppt特效制作教程
- dnf立繪補(bǔ)丁教程 dnf美化包怎么設(shè)置
- 安裝windows10步驟 windows重裝系統(tǒng)教程
- 筆記本win10優(yōu)化代碼 win優(yōu)化設(shè)置教程
- 阿里云網(wǎng)站搭建教程 阿里云搭建網(wǎng)站多少錢
- 附操作流程圖文教程 阿里云注冊(cè)域名的步驟
- 服務(wù)器虛擬化平臺(tái)搭建 虛擬機(jī)搭建服務(wù)器教程
- 蘋果6強(qiáng)刷ios13教程 蘋果手機(jī)版本更新要多久
- idea創(chuàng)建桌面快捷方式 ubuntu安裝idea教程
