脚本引擎执行JS代码

优势:
计算员工工资,但是不同员工有不同算法,希望通过每个员工对应一个表达式,用脚本语言直接进行计算。

引入脚本引擎

//获得引擎管理器
        ScriptEngineManager sem=new ScriptEngineManager();
        //引入JS引擎
        ScriptEngine engine=sem.getEngineByName("javascript");

执行字符串脚本代码

        //var有多个属性 name age schools   可以通过user调用它的属性
        String str="var user={name:'LINDA',age:18,schools:['tinghua','beijing']};";
        //JDK1.6或者1.7可以写println但是1.8之后就不能使用println
        //ReferenceError: "println" is not defined in <eval> at line number 1
        str+="print(user.name);";
        //运行JS代码
        engine.eval(str);

定义JS变量

//将键值对放入引擎
        engine.put("msg","LINDA is a good girl ");
        System.out.println((String) engine.get("msg"));
        //通过JS代码改变msg的值
        engine.eval("msg='LINDA is a good girlfriend';");
        //java代码也可以获取它的值
        System.out.println((String) engine.get("msg"));

定义JS函数

 engine.eval("function add(a,b){var sum=a+b;return sum;}");
        //执行函数(先混个眼熟吧)
        Invocable jsInvoke= (Invocable) engine;
        Object result=jsInvoke.invokeFunction("add",new Object[]{13,20});
        System.out.println(result);

需要使用JAVA包下的类
//这里导包的方法JDK1.8 更新了之前的版本不同

String jsCode="var list=java.util.Arrays.asList([\"beijing\",\"shanghai\"]);";
        engine.eval(jsCode);
        List<String>list= (List<String>) engine.get("list");
        for (String  str2:list
             ) {
            System.out.println(str2);
        }

导入某个地方js文件并运行

URL url=Demo01.class.getClassLoader().getResource("a.js");
//字符节点流引入JS代码,写入引擎,运行
        FileReader fr=new FileReader(url.getPath());
        engine.eval(fr);
        fr.close();
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值