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