`

Java动态性--->3 java脚本引擎Rhino

 
阅读更多

 

 

 

1 Java脚本引擎简介:

 

 



 

 



 

 



 

 

2  使用Rhino 让Java和JS相互操作:

 

java :

public class Demo02 {
	public static void main(String[] args) throws Exception {
		//获得脚本引擎
		ScriptEngineManager sem = new ScriptEngineManager();
		ScriptEngine engine = sem.getEngineByName("javascript");
		//定义变量
		engine.put("msg", "zm is not a good man!");// 向引擎上下文中定义一个变量, 这样java js都可以从中获取
		String str = "var user = {name:'zm',age:30,schools:['北理工','iteye']}; ";
		str += "println(user.name);";
		//执行脚本 
		engine.eval(str); // 通过脚本获取 结果---> zm
		engine.eval("msg='zm is a old man';"); // 修改变量 msg的值  
		System.out.println(engine.get("msg")); // 通过Java端代码获取值 结果---> zm is a old man
		System.out.println("########################");
		
		// 定义函数
		engine.eval("function add (a, b) {var sum = a + b; return sum; }");
		// 取得调用接口
		Invocable jsInvoke = (Invocable) engine;
		//执行脚本中定义的方法
		Object result1 = jsInvoke.invokeFunction("add", new Object[] { 13, 20 });
		System.out.println(result1);  // 33.0

		// 导入其他java包,使用其他包中的java类
		String jsCode = "importPackage(java.util); var list = Arrays.asList([\"北京iteye\",\"清华大学\",\"北京大学\"]); ";
		engine.eval(jsCode);
		List<String> list2 = (List<String>) engine.get("list");
		for (String temp : list2) {
			System.out.println(temp);  // 北京iteye  清华大学  
		}

		//执行一个js文件(我们将a.js至于项目的src下即可)
		URL is = Demo02.class.getClassLoader().getResource("a.js");
		
		Reader r = new FileReader(is.getPath());
		engine.eval(r); // 结果----> 7
		
	}
}



a.js:



//定义test方法
function test(){
	var a = 3;
	var b = 4;
	println("invoke js file:"+(a+b));
}

//执行test方法
test();

 



 

 

 

  • 大小: 99.8 KB
  • 大小: 106.9 KB
  • 大小: 42.4 KB
  • 大小: 3.7 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics