Java脚本引擎API
实现了java程序和脚本之间的交互,是一类接口,是的java和python ,js等脚本的交互
Rihno是由第三方实现了JAVA引擎接口是的javascript脚本与java交互
package lili.xidain.script;
import java.io.FileReader;
import java.net.URL;
import java.util.List;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class Demo01 {
public static void main(String[] args) throws Exception {
//获得脚本引擎ScriptEngineManager引擎类
ScriptEngineManager sem=new ScriptEngineManager();
//获得接口ScriptEngine 是RhinoScriptEngine类对象该类实现了ScriptEngine接口和Invocable接口
ScriptEngine engine=sem.getEngineByName("javascript");
//定义变量 键值对 存储到引擎的上下文 在java和javascript都可以操作
engine.put("msg", "I'm fine");
//执行脚本语言 修改msg的值
engine.eval("msg='I\\'m very good';");
//通过java获取msn的值
System.out.print(engine.get("msg"));//I'm very good 通过执行 修改值
============================================================
String str="var user={name:'wangdongli',age:18,schools:['清华大学','北京大学','西电']};";
//str中存的就是js代码
str+="println(user.name);";engine.eval(str); //输出wangdongli 执行了str的脚本
//js是基于函数的脚本语言
//定义js函数engine.eval("function add(a,b){var sum=a+b;return sum;}");
//取得调用接口 强制转换成Invocable 也实现了这个接口
Invocable jsInvoke=( Invocable) engine;
//执行方法
Object sum=jsInvoke.invokeFunction("add", new Object[]{3,4});
System.out.print(sum);
===================================================
//在js代码中导入java包,使用包中的java类String jscode="importPackage(java.util); var list=Arrays.asList(['清华大学','北京大学','西电']);";
engine.eval(jscode);
List<String> list2=(List<String>) engine.get("list");
for(String t:list2){
System.out.println(t);
}
===================================================
URL url=Demo01.class.getClassLoader().getResource("a.js");
FileReader reader=new FileReader(url.getPath());
engine.eval( reader);
reader.close();
}
}