博客详情

java8--新的JavaScript引擎Nashorn (原创)

作者: 朝如青丝暮成雪
发布时间:2018-10-24 22:13:51  文章分类:java8   阅读(1080)  评论(0)

 从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  Nashorn
评论信息
暂无评论
发表评论

亲,您还没有登陆,暂不能评论哦! 去 登陆 | 注册

博主信息
   
数据加载中,请稍候...
文章分类
   
数据加载中,请稍候...
阅读排行
 
数据加载中,请稍候...
评论排行
 
数据加载中,请稍候...

Copyright © 叮叮声的奶酪 版权所有
备案号:鄂ICP备17018671号-1

鄂公网安备 42011102000739号