• 脚本执行JavaScript代码


    下面是一个具体的demo测试脚本引擎,执行javas文件、

    package Rhino;

    import java.io.FileReader;
    import java.net.URL;

    import javax.script.Invocable;
    import javax.script.ScriptEngine;
    import javax.script.ScriptEngineManager;

    /*
    * 测试脚本引擎
    */
    public class Demo01 {
    public static void main(String[] args) throws Exception {
    //获得脚本引擎对象
    ScriptEngineManager sem=new ScriptEngineManager();
    ScriptEngine engine=sem.getEngineByName("javascript");
    //定义变量,存储到引擎上下文里面
    engine.put("msg", "tom is a boy");
    String str="var user= {name:'liulei',age:18,schools:['清华','北大']};";
    str += "print(user.name);";
    //执行脚本
    engine.eval(str);
    engine.eval("msg='sxt is a good school';");
    System.out.println(engine.get("msg"));
    //定义函数
    engine.eval("function add(a,b){var sum=a + b; return sum;}");
    //取得调用接口
    Invocable invocable=(Invocable) engine;
    //执行脚本里面的方法
    Object result=invocable.invokeFunction("add", new Object[]{13,30});
    System.out.println(result);
    // //导入其他java 包,使用其他包中的java类
    // String jsCode= "importPackage(java.util); var list=Arrays.asList(["北京","上海"]);";
    // engine.eval(jsCode);
    // List<String> list2=(List<String>)engine.get("list");
    // for(String temp:list2) {
    // System.out.println(temp);
    // }
    //执行一个js文件(我们将a.js至于项目的src下即可)
    URL url=Demo01.class.getClassLoader().getResource("a.js");
    FileReader fr=new FileReader(url.getPath());
    engine.eval(fr);
    fr.close();
    }
    }

     总之java也可以执行其他的语言,只需要查阅相应的api就行

  • 相关阅读:
    BZOJ2199[Usaco2011 Jan]奶牛议会——2-SAT+tarjan缩点
    BZOJ3862Little Devil I——树链剖分+线段树
    BZOJ2325[ZJOI2011]道馆之战——树链剖分+线段树
    BZOJ1018[SHOI2008]堵塞的交通——线段树
    BZOJ2733[HNOI2012]永无乡——线段树合并+并查集+启发式合并
    BZOJ4127Abs——树链剖分+线段树
    bzoj 4753 最佳团体
    bzoj 4472 salesman
    bzoj 5369 最大前缀和
    bzoj 1226 学校食堂Dining
  • 原文地址:https://www.cnblogs.com/henuliulei/p/9573827.html
Copyright © 2020-2023  润新知