package cn.foxsand.day05;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.io.FileReader;
import java.net.URL;
import java.util.List;
/**
* 测试脚本引擎执行javaScript代码
*/
public class TestJavaScript {
public static void main(String[] args) throws Exception{
//获取脚本引擎对象
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("javascript");
//定义变量,存储到引擎上下文中
engine.put("msg" , "demo is a good gril!");
String str = "var user = {name:'demo' , age:18};";
/**
* JDK1.6 时 ,println(user.name);
*/
str += "print(user.name);";
engine.eval(str);
engine.eval("msg = 'Foxsand is good man!';");
System.out.println(engine.get("msg"));
System.out.println("############################");
//定义JS 函数
engine.eval("function add(a,b){" +
"var sum = a + b ;" +
"return sum;" +
"};");
//执行JS函数
Invocable jsInvoke = (Invocable)engine;
Object result = jsInvoke.invokeFunction("add" , new Object[]{10,20});
System.out.println(result);
//导入JAVA包,使用java的类,深入学习及了解细节,请学习Rhino的语法
/**
* JDK1.6 需要这么写:
* importPackage(java.util); var list = java.util.Arrays.asList("北京大学","清华大学");
*/
String jsCode = "var list = java.util.Arrays.asList(\"北京大学\",\"清华大学\");";
engine.eval(jsCode);
List<String> list1 = (List<String>)engine.get("list");
for (String s1:list1
) {
System.out.println(s1);
}
//执行JS文件
URL url = TestJavaScript.class.getClassLoader().getResource("demoJs.js");
FileReader reader = new FileReader(url.getPath());
engine.eval(reader);
reader.close();
}
}