JAVA 脚本引擎

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

}

===================================================

//执行js文件,像xml,把文件放到项目的src下,然后获取
URL url=Demo01.class.getClassLoader().getResource("a.js");
FileReader reader=new FileReader(url.getPath());
engine.eval( reader);
reader.close();

}


}


猜你喜欢

转载自blog.csdn.net/wangdongli_1993/article/details/80976090
今日推荐