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