在JAVA中调用JavaScript代码

在JAVA中调用JavaScript代码

有些时候,我们在执行JAVA代码的时候,希望能够通过执行其他脚本语言(如js, 修改脚本新逻辑立即生效,不需要重新加载)根据其结果来进行逻辑判断,自java SE 8开始已经集成了Nashorn JavaScript引擎作为JDK的一部分。

1.使用nashorn引擎

1.1直接执行脚本

1.1.1查询引擎使用nashorn
public static void main(String[] args) throws Exception {
    ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
    ScriptEngine scriptEngine =scriptEngineManager.getEngineByName("nashorn");
    //执行脚本
    scriptEngine.eval("print('Hello,World')");
}
1.1.2查询引擎使用JavaScript
public static void main(String[] args) throws Exception {
ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("JavaScript");
//执行脚本
scriptEngine.eval("print('Hello,World')");
}

1.2 执行脚本指定函数

1.2.1查询引擎使用nashorn
   public static void main(String[] args) throws Exception {
        ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
        ScriptEngine scriptEngine =scriptEngineManager.getEngineByName("nashorn");
        //传入脚本
        scriptEngine.eval("function hello(name){print('Hello,'+ name )}");
        //ScriptEngine强转为Invocable
        Invocable inv = (Invocable) scriptEngine;
        //调用函数,传入参数
        inv.invokeFunction("hello", "javaScript");
    }

1.2.2查询引擎使用JavaScript

public static void main(String[] args) throws Exception {
  ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
  ScriptEngine scriptEngine = scriptEngineManager.getEngineByName("nashorn");
  //传入脚本
  scriptEngine.eval("function hello(param) {\n" +
          "        if(param == '123') {\n" +
          "            return true;\n" +
          "        }\n" +
          "        return false;\n" +
          "}");
  //ScriptEngine强转为Invocable
  Invocable inv = (Invocable) scriptEngine;
  //调用函数,传入参数
  boolean result =  (Boolean) inv.invokeFunction("hello", "12");
  System.out.println(result);

1.3 获取的都是nashorn引擎

   //获取的都是nashorn引擎
   scriptEngineManager.getEngineByName("nashorn");
   scriptEngineManager.getEngineByName("JavaScript");

NashornScriptEngineFactory截图

NashornScriptEngineFactory截图

2. 使用脚本语言的优点

  1. 脚本语言可以直接运行,不需要编译为字节码,如果修改了逻辑不需要重新启动应用,立刻生效
  2. 动态类型,创建变量不需要创建及声明类型,可以重复使用变量

参考
https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_guide/about.html#sthref8
https://docs.oracle.com/javase/8/docs/technotes/guides/scripting/prog_guide/api.html#CDEGJDJF

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值