脚本引擎执行js代码

Java脚本API为开发者提供如下功能:
-获取脚本程序输入,通过脚本引擎运行脚本并返回结果,这是最核心的接口。
注意:接口。Java可以使用各种不同的实现,从而通用的调用js、groovy、python等脚本。
js使用Rhino,Rhino是一种使用java语言编写的JavaScript的开源实现。
-通过脚本引擎的运行上下文在脚本和java平台间交换数据。
-通过java应用程序调用脚本函数。

package com.bjsxt.bean;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
import java.io.FileNotFoundException;
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.util.List;

public class ScriptEngineTest {
    public static void main(String[] args) throws ScriptException, NoSuchMethodException, IOException {
        ScriptEngineManager sem = new ScriptEngineManager();
        ScriptEngine js = sem.getEngineByName("js");
        // 定义变量,存储到引擎上下文 java与js均可以取得该变量
        js.put("msg", "test variable");
        System.out.println(js.get("msg"));
        js.eval("print(msg)");

        // 执行脚本
        String str = "var user={name:'kotonoha',age:21,schools:['123','456']};";
        js.eval(str += "print(user.name)");

        js.eval("msg='hello hi'");
        System.out.println(js.get("msg"));

        // 定义函数
        js.eval("function add(a,b){var sum=a+b;return sum;}");
        // 执行
        // 取得调用接口
        Invocable engine = (Invocable) js;
        // 执行脚本中定义的方法
        Object result = engine.invokeFunction("add", new Object[]{13, 20});
        System.out.println(result);

        // 导入其他java包,使用包中其他的java类
        String jsCode = "var list=java.util.Arrays.asList([\"asd\",\"zxc\"])";
        js.eval(jsCode);

        List<String> list = (List<String>) js.get("list");
        for (String temp : list) {
            System.out.println(temp);
        }

        // 执行js文件(a.js置于src下即可)
        URL resource = ScriptEngineTest.class.getClassLoader().getResource("a.js");
        System.out.println(resource);
        System.out.println(resource.getPath());
        FileReader fr = new FileReader(resource.getPath());
        js.eval(fr);
        fr.close();
    }
}

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。