//获得脚本引擎对象
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("javascript");
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("javascript");
//定义变量,存储到引擎上下文中,java,js都可以获取
String str = "var user = {name:'张三',age:20,schools:['清华大学','北京大学']};" ;
str += "print(user.name);"; //此处用println会报错,受JDK版本影响
//执行脚本
engine.eval(str);-->张三
engine.eval(str);-->张三
//脚本可以被Java操作
engine.put("msg", "good boy!");
engine.eval("msg = 'good girl!';");
System.out.println(engine.get("msg"));--->good girl!
//定义函数
engine.eval("function add (a,b){var sum = a + b;return sum;}");
//取得调用接口
Invocable jsInvocalbe = (Invocable) engine;
//执行脚本中定义的方法
Object result = jsInvocalbe.invokeFunction("add", new Object [] {11,22}) ;
engine.eval("function add (a,b){var sum = a + b;return sum;}");
//取得调用接口
Invocable jsInvocalbe = (Invocable) engine;
//执行脚本中定义的方法
Object result = jsInvocalbe.invokeFunction("add", new Object [] {11,22}) ;
System.out.println(result);-->33.0
//导入其它java包,使用其他包中的java类
//String jsCode = "ImportPackage (java.util);var list = Arrays.asList([\"清华大学\",\"北京大学\"]);"; ---JDK1.6版本写法
String jsCode = "var list = java.util.Arrays.asList([\"清华大学\",\"北京大学\"]);"; ---JDK1.8版本写法
engine.eval(jsCode);
List<String> list2 = (List<String>)engine.get("list");
for(String temp:list2) {
System.out.println(temp);--->遍历结果为清华大学,北京大学
}
//String jsCode = "ImportPackage (java.util);var list = Arrays.asList([\"清华大学\",\"北京大学\"]);"; ---JDK1.6版本写法
String jsCode = "var list = java.util.Arrays.asList([\"清华大学\",\"北京大学\"]);"; ---JDK1.8版本写法
engine.eval(jsCode);
List<String> list2 = (List<String>)engine.get("list");
for(String temp:list2) {
System.out.println(temp);--->遍历结果为清华大学,北京大学
}
//执行一个js文件--将a.js文件放在src下即可
URL url = (类名).class.getClassLoader().getResource("js文件名");
FileReader fr = new FileReader(url.getPath());
engine.eval(fr);
fr.close();//try-catch块