文章插图
1 概述本文介绍在 Java 环境中执行 JavaScript 脚本的简单使用,具体包含以下内容
Java 8 中的内置 Nashorn Javascript 引擎介绍Rhino JavaScript 引擎介绍以及对 XML 的处理介绍2 Java 8 中的内置 Nashorn Javascript 引擎介绍Nashorn 是 Java 8 中内置的 JavaScript 引擎,无需加入任何依赖 。
Nashorn 基本使用步骤如下
new 出 ScriptEngineManager 对象通过 ScriptEngineManager 对象中的 getEngineByName 方法获取指定的 JavaScript 引擎,返回 ScriptEngine 对象Java 8 中的默认的 Javascript 引擎包括:[nashorn, Nashorn, js, JS, JavaScript, javascript, ECMAScript, ecmascript]通过 ScriptEngine 对象的 eval 方法来执行 JavaScript 脚本 。2.1 通过 PrintWriter 对象获取脚本中的 print 输出Javascript 脚本中没有函数,没有返回值,通过 print 输出内容,这时需要通过 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 获取匿名函数的返回值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();}}2.3 调用 Javascript 脚本中指定的函数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.02.4 读取 Javascript 文件并执行这种情况是读取 Javascript 文件,并执行,具体如下
以上关于本文的内容,仅作参考!温馨提示:如遇健康、疾病相关的问题,请您及时就医或请专业人士给予相关指导!
「四川龙网」www.sichuanlong.com小编还为您精选了以下内容,希望对您有所帮助:- js脚本编写教程 js网页编程
- 免费做视频特效的软件推荐 ppt特效制作教程
- dnf立绘补丁教程 dnf美化包怎么设置
- 安装windows10步骤 windows重装系统教程
- 笔记本win10优化代码 win优化设置教程
- 阿里云网站搭建教程 阿里云搭建网站多少钱
- 附操作流程图文教程 阿里云注册域名的步骤
- 服务器虚拟化平台搭建 虚拟机搭建服务器教程
- 苹果6强刷ios13教程 苹果手机版本更新要多久
- idea创建桌面快捷方式 ubuntu安装idea教程