您的位置:首页 > 编程语言 > Java开发

java动态编程-Rhino脚本引擎

2016-05-24 10:32 609 查看
java 6.0提供一些标准接口来操作脚本语言,它让java有能力在代码中,动态的执行脚本语言,接口的实现就由第三方来实现。Rhino引擎是一个实现javascript脚本接口的第三方实现,java6.0之后,默认引入,作为java的jar包。

简单使用见下面的例子

/**
* RhinoDemo引擎demo
* @author liuxg
* @date 2016年5月24日 上午10:30:37
*/
public class RhinoDemo {

public static void main(String[] args) throws Exception {

ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine se = sem.getEngineByName("javascript");

//使用上下文,执行eval之后,js的变量和函数都存储于上下文,通过get和put可以获取和保存变量,java和javascript都可以使用同一个上下文
se.put("myame", "liuxg !!");
System.out.println(se.get("myame"));

se.eval("var yourname = 'who are you ?'");
System.out.println(se.get("yourname"));

//执行变量
String script = "var compo = {addr : \"广州\",tel : \"12345678901\"};";
script += "println(compo.addr + \" : \" + compo.tel)";
se.eval(script);

//执行js函数
String funscript = "function sum(a,b){return a + b ;}";
se.eval(funscript);
Invocable jsInvocable = (Invocable)se;
Object obj = jsInvocable.invokeFunction("sum", 1,2);
System.out.println("sum = " + obj);

//执行js文件
URL url = RhinoDemo.class.getClassLoader().getResource("rhino.js");//获取classpath下的js文件
FileReader reader = new FileReader(url.getFile());
se.eval(reader);
Object obj1 = jsInvocable.invokeFunction("skyscolor");
System.out.println(se.get("skycolor") + " -- " + obj1);

//js和java代码混合用
String jsjavacode =  "importPackage(java.util); var names = Arrays.asList(\"liuxg1\",\"liuxg2\",\"liuxg3\")";
se.eval(jsjavacode);
List<String> names = (List<String>) se.get("names");
for (String name : names) {
System.out.println(name);
}

}
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: