Java中使用JavaScript脚本
2020-03-30 08:04:05来源:博客园 阅读 ()
Java中使用JavaScript脚本
简介 Nashorn
Nashorn 一个 javascript 引擎。
从JDK 1.8开始,Nashorn取代Rhino(JDK 1.6, JDK1.7)成为Java的嵌入式JavaScript引擎。Nashorn完全支持ECMAScript 5.1规范以及一些扩展。
它使用基于JSR 292的新语言特性,其中包含在JDK 7中引入的 invokedynamic,将JavaScript编译成Java字节码。
与先前的Rhino实现相比,这带来了2到10倍的性能提升。
使用方式
- 编写JavaScript脚本
列:JavaScript方法使用Java对象执行方法获取返回值。
function scriptFunction(obj){
var a = 1;
var b = 2;
return obj.sum(a,b);
}
scriptFunction(obj);//调用该方法
该脚本变量定义为 String script1;
2. 创建JavaScript容器用户存储脚本 ScirptContainer.java
public class ScirptContainer {
public static ScriptEngine engine;//脚本引擎
static {
ScriptEngineManager manager = new ScriptEngineManager();//脚本引擎管理
engine = manager.getEngineByName("nashorn");//获取nashorn脚本引擎
engine.getContext().getWriter();//获取正文并且写入
}
private ConcurrentHashMap<Integer, CompiledScript> scripts = new ConcurrentHashMap<>();//脚本存储容器
public CompiledScript getCompiledScript(String script) throws ScriptException{
//判断脚本是否为空
if(script == null || "".equals(script)){
throw new ScriptException("JavaScript empty");
}
//获取脚本Hash
int hashCode = script.hashCode();
//从容器中获取脚本
CompiledScript compiledScript = scripts.get(hashCode);
if(compiledScript == null){
//容器中无脚本创建脚本对象
Compilable compilable = (Compilable) engine;
//编译JavaScript脚本
compiledScript = compilable.compile(script);
//脚本对象存入容器中
scripts.put(hashCode, compiledScript);
}
return compiledScript;
}
}
- Java执行JavaScript脚本
public class ScriptHandler {
//创建容器对象
private ScirptContainer scirptContainer = new ScirptContainer();
//需要执行的对象
String js1 = "function scriptFunction(obj){ var a = 1; var b = 2; return obj.sum(a,b); } scriptFunction(obj);";
@Test
public void test() throws ScriptException{
//获取脚本对象
CompiledScript c1 = scirptContainer.getCompiledScript(js1);
//创建参数绑定
Bindings bindings = scirptContainer.engine.createBindings();
//obj参数绑定SumTest类
bindings.put("obj", new SumTest());
//执行JavaScript脚本并且打印返回值
System.out.println(c1.eval(bindings));
}
}
注意事项:
- 脚本中scriptFunction(obj);是必须存在,否则不会执行方法.
- 脚本中可以创建Java对象,需要全类名如var map = new java.util.HashMap();
原文链接:https://www.cnblogs.com/SimpleWu/p/12598442.html
如有疑问请与原作者联系
标签:
版权申明:本站文章部分自网络,如有侵权,请联系:west999com@outlook.com
特别注意:本站所有转载文章言论不代表本站观点,本站所提供的摄影照片,插画,设计作品,如需使用,请与原作者联系,版权归原作者所有
上一篇:Redis服务器重要属性详解
下一篇:十分钟实现发送邮件服务
- 国外程序员整理的Java资源大全(全部是干货) 2020-06-12
- 2020年深圳中国平安各部门Java中级面试真题合集(附答案) 2020-06-11
- 2020年java就业前景 2020-06-11
- 04.Java基础语法 2020-06-11
- Java--反射(框架设计的灵魂)案例 2020-06-11
IDC资讯: 主机资讯 注册资讯 托管资讯 vps资讯 网站建设
网站运营: 建站经验 策划盈利 搜索优化 网站推广 免费资源
网络编程: Asp.Net编程 Asp编程 Php编程 Xml编程 Access Mssql Mysql 其它
服务器技术: Web服务器 Ftp服务器 Mail服务器 Dns服务器 安全防护
软件技巧: 其它软件 Word Excel Powerpoint Ghost Vista QQ空间 QQ FlashGet 迅雷
网页制作: FrontPages Dreamweaver Javascript css photoshop fireworks Flash