从JDK8开始,Nashorn引擎开始取代Rhino (jdk6、7中)成为java的嵌入式js引擎,它将js代码编译为java字节码,与先前的Rhino的实现相比,性能提升了2到10倍。
jjs是java8中一个新的命令行工具,jjs能够在控制台执行java中js脚本代码。
例如,编写一个sample.js 内容如下
print("hello world")
保存文件,然后在当前目录打开控制台窗口,执行
jjs sample.js
即可在看到结果 ——在控制台输出了 hello world 字符串。
jjs命令的交互模式:
在控制台直接执行 jjs 回车即可进入交互模式,如再输入
10+5 回车
控制台输出: 15
输入quit() 可退出。
示例代码1 :
package com.tingcream.java8.nashorn; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class NashornEngineTest { public static void main(String[] args) throws ScriptException { // ScriptEngine engine= new ScriptEngineManager().getEngineByName("JavaScript"); //引擎名称传入JavaScript、js、javascript、nashorn、Nashorn 均可等价 //最好指定具体的引擎名称为nashorn。若指定为JavaScript 也是采用JDK8中默认js引擎nashorn // ScriptEngine engine= new ScriptEngineManager().getEngineByName("nashorn"); ScriptEngine engine= new ScriptEngineManager().getEngineByName("Nashorn"); // jjs a.js // jjs a.js -- aa bb cc // jjs [回车进入交换命令模式] /* Integer result = (Integer) engine.eval("10+3"); System.out.println(result);*/ String js="var a=10;var b=20; var c=a+b;c;"; Double o= (Double) engine.eval(js); System.out.println(o); } }
示例代码2:
package com.tingcream.java8.nashorn; import java.io.File; import java.io.FileReader; import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import org.junit.Test; public class NashornEngineTest2 { /** * java中调用js脚本文件中的函数 * @throws Exception */ @Test public void test1() throws Exception { ScriptEngine engine = new ScriptEngineManager().getEngineByName("nashorn"); String path =this.getClass().getResource("script.js").getPath();//获取文件路径 engine.eval(new FileReader(new File(path)));//执行文件 Invocable invocable = (Invocable) engine; Object result = invocable.invokeFunction("func1", "张三");//调用js中函数 System.out.println("返回结果: "+result); } }
在当前目录有一个script.js文件,内容如下:
function func1(name) { print('Hi there from Javascript, ' + name); return "hello "+name; }; var func2 = function (object) { print("JS Class Definition: " + Object.prototype.toString.call(object)); };
上一篇:java8--Optional类
下一篇:java8--新的日期时间api
Copyright © 叮叮声的奶酪 版权所有
备案号:鄂ICP备17018671号-1