package Rhino;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
/**
* 测试脚本引擎执行js代码
* @author lenovo
*
*/
public class Demo01 {
public static void main(String[] args) throws ScriptException, NoSuchMethodException, IOException {
//获得脚本引擎对象
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("javascript");
//定义变量,会存储到引擎的上下文中
engine.put("message", "Hello");
String str = "var user = {name:'wangjian', age:20, school:['东南大学', '清华大学']};";
str += "print(user.name);";
//执行脚本
engine.eval(str);
engine.eval("message = 'sxt is a good school!';");
System.out.println(engine.get("message"));
//定义函数
engine.eval("function add(a, b){var sum = a + b; return sum;}");
//执行js函数
Invocable jsInvocable = (Invocable) engine;
Object result = jsInvocable.invokeFunction("add", new Object[] {23, 3});//传入方法的名字和参数
System.out.println(result);
//导入其他的java包,使用其它包中的java类
String jsCode = "var list = java.util.Arrays.asList([\"东南大学\", \"清华大学\"]);";
engine.eval(jsCode);
//再将js的变量转化为java里的变量输出
List<String> list1 = (List<String>) engine.get("list");
for(String temp: list1) {
System.out.println(temp);
}
//执行一个js文件(我们将a.js至于项目src下即可)
URL url = Demo01.class.getClassLoader().getResource("a.js");
FileReader fr = new FileReader(url.getPath());
engine.eval(fr);
fr.close();
}
}