java动态编程-Rhino脚本引擎

来源:互联网 发布:自行车大全软件 编辑:程序博客网 时间:2024/05/17 11:56

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);        }    }}
0 0
原创粉丝点击