自行打包精选推荐的漂亮ren的尿尿视频老公发泄xingyu逆推自压的百度盘童真男主兽欲剪辑老司机老板解压密码的猴油脚本秒
【自行打包】精选推荐!偷看漂亮妻子尿尿...
2023-11-29
本文介绍在 Java 环境中执行 JavaScript 脚本的简单使用,具体包含以下内容
Nashorn 是 Java 8 中内置的 JavaScript 引擎,无需加入任何依赖。
Nashorn 基本使用步骤如下
Javascript 脚本中没有函数,没有返回值,通过 print 输出内容,这时需要通过 PrintWriter 获取读取脚本中的 print 输出,具体如下
@Test public 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(); } }Javascript 脚本是一个匿名函数并且有返回值,通过 eval 函数可以直接
@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(); }}Javascript 脚本中有变量,有多个函数,具体如下
@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.0这种情况是读取 Javascript 文件,并执行,具体如下
@Testpublic void test_invoke_js_file() { try { ScriptEngine engine = new ScriptEngineManager().getEngineByName("Nashorn"); engine.eval(new FileReader(TestJSEngine.class.getResource("/test.js").getPath())); 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(); }}文件内容和上面一样。
默认的 Nashorn 引擎是无法解析 xml 的,像 DOMParser 这样的对象是浏览器内置的组件。
这里可以通过 Maven 依赖 Rhino 引擎来处理 xml。
<dependency> <groupId>cat.inspiracio</groupId> <artifactId>rhino-js-engine</artifactId> <version>1.7.10</version></dependency>使用的步骤和其他 JavaScript 引擎一样,引擎的名称为 Rhino.
这里通过读取文件的方式来加载和解析 JavaScript 脚本,脚本中是对一段 xml 的解析的过程。
print("----------------------------------------");var e = new XML('<employees> <employee id="1"><name>Joe</name><age>20</age></employee> <employee id="2"><name>Sue</name><age>30</age></employee> </employees>');// 获取所有的员工print("获取所有的员工:\n" + e..name);// 名字叫 Joe 的员工print("名字叫 Joe 的员工:\n" + e.employee.(name == "Joe"));// 员工的id 为 1 和 2print("员工的id 为 1 和 2:\n" + e.employee.(@id == 1 || @id == 2));// 员工的id 为 1print("员工的id 为 1: " + e.employee.(@id == 1).name);print("----------------------------------------");@Testpublic void test_rhino_file_js() { try { ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino"); ScriptContext scriptContext = engine.getContext(); StringWriter stringWriter = new StringWriter(); PrintWriter printWriter = new PrintWriter(stringWriter); scriptContext.setWriter(printWriter); engine.eval(new FileReader(TestJSEngine.class.getResource("/xml.js").getPath())); System.out.println(String.format("xml result = %s",stringWriter.toString() )); } catch (Exception e) { e.printStackTrace(); }}xml result = ----------------------------------------All the employee names are:<name>Joe</name><name>Sue</name>The employee named Joe is:<employee id="1"> <name>Joe</name> <age>20</age></employee>Employees with ids 1 & 2:<employee id="1"> <name>Joe</name> <age>20</age></employee><employee id="2"> <name>Sue</name> <age>30</age></employee>Name of the the employee with ID=1: Joe----------------------------------------<CCardProcessSyncResponse> <RetCode>0</RetCode> <Message>操作成功!</Message> <RefundCycle /> <EpayRefundCycleMin>1</EpayRefundCycleMin> <EpayRefundCycleMax>7</EpayRefundCycleMax> <EpayRefundCycleUnitF /></CCardProcessSyncResponse>@Testpublic void test_rhino() { try { ScriptEngine engine = new ScriptEngineManager().getEngineByName("rhino"); String jsString = jsString = "var obj=new XML('<CCardProcessSyncResponse> <RetCode>0</RetCode> <Message>操作成功!</Message> <RefundCycle /> <EpayRefundCycleMin>1</EpayRefundCycleMin> <EpayRefundCycleMax>7</EpayRefundCycleMax> <EpayRefundCycleUnitF /> </CCardProcessSyncResponse>');print(obj.Message == '操作成功!');"; ScriptContext scriptContext = engine.getContext(); StringWriter stringWriter = new StringWriter(); PrintWriter printWriter = new PrintWriter(stringWriter); scriptContext.setWriter(printWriter); engine.eval(jsString); System.out.println(String.format("xml result = %s",stringWriter.toString() )); } catch (Exception e) { e.printStackTrace(); }}上面的输出结果如下
xml result = true
以上内容就是为大家推荐的javascript脚本怎么运行(js脚本编写教程)最佳回答,如果还想搜索其他问题,请收藏本网站或点击搜索更多问题
内容来源于网络仅供参考版权声明:所有来源标注为小樱知识网www.xiaoyin02.com的内容版权均为本站所有,若您需要引用、转载,只需要注明来源及原文链接即可。
本文标题:javascript脚本怎么运行(js脚本编写教程)
本文地址:https://www.xiaoyin02.com/shcs/115321.html
相关文章
热点文章
2021年独生子女补贴新政策是真的吗(独生子女证有有效期吗)
2021年国庆节阅兵仪式几点开始几点结束(2021年国庆节还有阅兵吗)
鼠目寸光一点红是什么生肖动物(鼠目寸光一点红)指什么生肖,紧密
k0到k9的玩法大全(强制gc的玩法和注意事项)
入土为安是什么生肖《入土为安》打一个生肖动物,词语解释
浙江12月底全面停工是真的吗(浙江什么时候放假停工)
如何做t(t怎么把p做哭)
北京口碑最差的三甲医院(北京301医院最擅长什么)