Java实现对JavaScript脚本文件的读取和执行

package com.amxc.utils;

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

/**
 * 实现对脚本文件的定义
 * 运用此类需要最低JDK编译为1.6+
 * @author mr_yi
 * 下午3:57
 */
public class scriptDemo2 {

    public static void main(String[] args) throws Exception{
        /*mimeType为传输的文件类型,如 application/javascript*/
        /*获取执行JavaScript的执行引擎*/
        ScriptEngine engine = new ScriptEngineManager().getEngineByName("javascript");
        /*为文件注入全局变量*/
        Bindings bindings = engine.createBindings();
        bindings.put("factor", 2);
        /*设置绑定参数的作用域*/
        engine.setBindings(bindings,ScriptContext.ENGINE_SCOPE);

        Scanner scanner = new Scanner(System.in);
        /*开始等待用户输入->体现出不需要重复运行JVM就可以实现脚本文件的更换*/
        while(scanner.hasNextInt()){
            /*只有当用户输入的是整数型时才会被执行*/
            int first = scanner.nextInt();
            int second = scanner.nextInt();
            System.out.println("当前输入的参数为: "+first+":"+second);
            /*执行js文件代码*/
            URL url = Thread.currentThread().getContextClassLoader().getResource("");
            String path;
            if (url!=null){
                path = url.getPath();
                engine.eval(new FileReader(path+"/script_engine.js"));
                /*查看是否可以调用方法*/
                if (engine instanceof Invocable){
                    Invocable in = (Invocable) engine;
                    Double result = (double)in.invokeFunction("formula",first,second);
                    System.out.println("输出结果为"+result);
                }
            }

        }


    }
}

script_engine.js文件如下:

/*实现java对脚本语言的支持*/

/**
 * 通过java对factor因子进行初始化,然后计算出答案
 * 对脚本语言的修改不需要重新启动编译器
 * @param var1
 * @param var2
 * @return {*}
 */

var factor;
function formula(var1,var2){
    return var1+var2*factor;
}

该功能实现Java对脚本文件的读取和执行,有助于扩展Java的功能!

猜你喜欢

转载自blog.csdn.net/qq844579582/article/details/78904365
今日推荐