100字范文,内容丰富有趣,生活中的好帮手!
100字范文 > 【Java脚本引擎】脚本引擎执行JavaScript代码

【Java脚本引擎】脚本引擎执行JavaScript代码

时间:2022-01-16 02:57:38

相关推荐

【Java脚本引擎】脚本引擎执行JavaScript代码

应用场景

公司有30员工,每个人工资计算方式不同。现在需要计算工资。

传统的方法:一个接口,30个实现类。

使用脚本引擎:编写一个xml文件,每人一个计算公式,使用的时候可以把公式加载到程序中,启动时使用脚本引擎调用相关的脚本,计算工资。

通过脚本引擎管理器,获得脚本引擎对象,执行相关代码

Warning: Nashorn engine is planned to be removed from a future JDK release

警告:计划从未来的JDK版本中删除Nashorn引擎

示例(1):在Java中执行JS代码

package cn.hanquan.rhino;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;//测试脚本引擎执行JavaScript代码public class TestRhino {public static void main(String[] args) throws Exception {// 获得脚本引擎对象ScriptEngineManager sem = new ScriptEngineManager();ScriptEngine engine = sem.getEngineByName("javascript");// 定义变量,存储到引擎的上下文中engine.put("msg", "hello~world!");String str = "var user= {name:'HanQuan', age:29};";str += "print(user.name);";// 执行脚本engine.eval(str);}}

运行结果

HanQuan

示例(2):分别通过 JavaScript/Java 获取脚本引擎定义的msg变量、使用脚本引擎修改msg的内容

引擎,相当于连接JavaScript和Java的桥梁。存储到引擎的上下文中的变量msg,既可以被JavaScript操作,也可以被Java操作

package cn.hanquan.rhino;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;//测试脚本引擎执行JavaScript代码public class Demo1 {public static void main(String[] args) throws Exception {// 获得脚本引擎对象ScriptEngineManager sem = new ScriptEngineManager();ScriptEngine engine = sem.getEngineByName("javascript");// 定义变量msg,存储到引擎的上下文中engine.put("msg", "hello~world!");// 使用js修改msg内容engine.eval("msg='Hello,Are you Okayyyy'");// 分别通过 JavaScript/Java 获取msgengine.eval("print('通过JavaScript获取msg: '+msg);");System.out.println("通过Java获取msg:" + engine.get("msg"));}}

运行结果

通过JavaScript获取msg: Hello,Are you Okayyyy通过Java获取msg:Hello,Are you Okayyyy

示例(3):分别用JavaScript和Java,执行JavaScipt中的函数

package cn.hanquan.rhino;import javax.script.Invocable;import javax.script.ScriptEngine;import javax.script.ScriptEngineManager;//测试脚本引擎执行JavaScript代码public class Demo2 {public static void main(String[] args) throws Exception {// 获得脚本引擎对象ScriptEngineManager sem = new ScriptEngineManager();ScriptEngine engine = sem.getEngineByName("javascript");// 定义函数engine.eval("function add(a,b){var sum=a+b; return sum;}");// 通过JavaScript执行函数engine.eval("print('通过JavaScript执行函数: ' + add(11,22));");// 通过Java执行函数Invocable jsInvoke = (Invocable) engine;Object res = jsInvoke.invokeFunction("add", new Object[] {44, 55 });System.out.println("通过Java执行函数: " + res);}}

运行结果

通过JavaScript执行函数: 33通过Java执行函数: 99.0

还可以导入其他Java包

运行结果

北京尚学堂清华大学北京大学

* 若想要深入了解 Rhino 细节,可以上 Rhino 官网,详细学习 Rhino 语法。

* 另外,还有很多用 Java 执行 JS 脚本的方法, Rhino 只是其中一种。

执行本地的JavaScript文件

JS代码

目录结构

Java代码

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。