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();

 



 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值