Java中使用JavaScript脚本的方法步骤
简介Nashorn
Nashorn一个javascript引擎。
从JDK1.8开始,Nashorn取代Rhino(JDK1.6,JDK1.7)成为Java的嵌入式JavaScript引擎。Nashorn完全支持ECMAScript5.1规范以及一些扩展。
它使用基于JSR292的新语言特性,其中包含在JDK7中引入的invokedynamic,将JavaScript编译成Java字节码。
与先前的Rhino实现相比,这带来了2到10倍的性能提升。
使用方式
1.编写JavaScript脚本
列:JavaScript方法使用Java对象执行方法获取返回值。
functionscriptFunction(obj){
vara=1;
varb=2;
returnobj.sum(a,b);
}
scriptFunction(obj);//调用该方法
该脚本变量定义为Stringscript1;
2.创建JavaScript容器用户存储脚本ScirptContainer.java
publicclassScirptContainer{
publicstaticScriptEngineengine;//脚本引擎
static{
ScriptEngineManagermanager=newScriptEngineManager();//脚本引擎管理
engine=manager.getEngineByName("nashorn");//获取nashorn脚本引擎
engine.getContext().getWriter();//获取正文并且写入
}
privateConcurrentHashMapscripts=newConcurrentHashMap<>();//脚本存储容器
publicCompiledScriptgetCompiledScript(Stringscript)throwsScriptException{
//判断脚本是否为空
if(script==null||"".equals(script)){
thrownewScriptException("JavaScriptempty");
}
//获取脚本Hash
inthashCode=script.hashCode();
//从容器中获取脚本
CompiledScriptcompiledScript=scripts.get(hashCode);
if(compiledScript==null){
//容器中无脚本创建脚本对象
Compilablecompilable=(Compilable)engine;
//编译JavaScript脚本
compiledScript=compilable.compile(script);
//脚本对象存入容器中
scripts.put(hashCode,compiledScript);
}
returncompiledScript;
}
}
3.Java执行JavaScript脚本
publicclassScriptHandler{
//创建容器对象
privateScirptContainerscirptContainer=newScirptContainer();
//需要执行的对象
Stringjs1="functionscriptFunction(obj){vara=1;varb=2;returnobj.sum(a,b);}scriptFunction(obj);";
@Test
publicvoidtest()throwsScriptException{
//获取脚本对象
CompiledScriptc1=scirptContainer.getCompiledScript(js1);
//创建参数绑定
Bindingsbindings=scirptContainer.engine.createBindings();
//obj参数绑定SumTest类
bindings.put("obj",newSumTest());
//执行JavaScript脚本并且打印返回值
System.out.println(c1.eval(bindings));
}
}
注意事项:
- 脚本中scriptFunction(obj);是必须存在,否则不会执行方法.
- 脚本中可以创建Java对象,需要全类名如varmap=newjava.util.HashMap();
到此这篇关于Java中使用JavaScript脚本的方法步骤的文章就介绍到这了,更多相关Java使用JavaScript脚本内容请搜索毛票票以前的文章或继续浏览下面的相关文章希望大家以后多多支持毛票票!
作者:SimpleWu
出处:https://www.cnblogs.com/SimpleWu/p/12598442.html
本站使用「SimpleWuBY4.0」创作共享协议,转载请在文章明显位置注明作者及出处。