Java 中调用 Javascript 脚本语言——易变业务使用脚本语言编写

Jul 27, 2019 阅读(171)

标签: Java

脚本语言特征

  • 灵活。 脚本语言一般都是动态类型,可以不用声明变量类型而直接使用,可以在运行期改变类型。

  • 便捷。 脚本语言是一种解释型语言,不需要编译成二进制代码,也不需要像 Java 一样生成字节码。它的执行是依靠解释器解释的。因此在运行期变更代码非常容易。而且不用停止应用。


调用Javascript示例

import javax.script.*;
import java.io.FileReader;
import java.util.Scanner;

/**
 * Java 调用脚本语言 Demo 程序
 */
public class ScriptInvokeDemo {

    public static void main(String[] args) throws Exception {
        // 获得一个 JavaScript 的执行引擎
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");

        // 建立上下文环境
        Bindings bind = engine.createBindings();
        bind.put("factor", 1);

        // 绑定上下文,作用域是当前引擎范围
        engine.setBindings(bind, ScriptContext.ENGINE_SCOPE);

        Scanner input = new Scanner(System.in);
        while (input.hasNextInt()){
            int first = input.nextInt();
            int sec = input.nextInt();
            System.out.println("输入参数是: " + first + "," + sec);

            // 执行 js 代码(formula.js文件放置在项目根目录下)
            engine.eval(new FileReader("formula.js"));

            // 是否可调用方法
            if(engine instanceof Invocable){
                Invocable in = (Invocable) engine;

                // 执行 js 中的函数
                Double result = (Double) in.invokeFunction("calc", first, sec);
                System.out.println("运算结果: " + result.intValue());
            }
        }
    }

}

formula.js

// 计算公式
function calc(var1, var2){
    // factor 变量因子,从执行环境上下文中获取
    return var1 - var2 * factor;
}


 jrunscript 命令工具

Java 6 不仅仅提供了代码级别的脚本内置,还提供了一个 jrunscript 命令工具,它可以在批处理中发挥最大效能,而且不需要通过 JVM 解释脚本语言,可以直接通过该工具运行脚本。

image.png

MongoDB学习园