15.java脚本引擎

java脚本引擎

脚本引擎

  • 使java应用程序通过一套固定的接口与各种脚本引擎交互,从而达到在java平台上调用各种脚本语言(js,python等)的目的
  • java脚本API是连通java平台和脚本语言的桥梁
  • 可以把一些复杂异变的业务逻辑交给脚本语言处理,大大提高了开发效率

java脚本API为开发者提供了如下功能

  • 1.获取脚本程序输入,通过脚本引擎运行脚本并返回结果,这是最核心的接口
  • 2.通过脚本引擎的运行,上下文在脚本和java平台间交换数据
  • 3.通过java应用程序调用脚本函数

java可以使用不同的实现,从而通用的调用js、groovy、python等脚本。Rihno是由第三方用java语言编写的实现了JAVA引擎接口的javascript脚本与java交互的具体实现类,现已经集成到jdk6.0中

脚本引擎执行javascript代码

package com.company.demo;

import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import java.io.FileReader;
import java.util.List;

public class TestRhino01 {
    public static void main(String[] args) throws Exception {  //为了演示就直接抛的Exception异常
        //获得脚本引擎对象
        ScriptEngineManager sem = new ScriptEngineManager();
        ScriptEngine engine = sem.getEngineByName("javascript");

        //定义变量 存储到引擎的上下文 在java和js中都可以操作
        engine.put("msg","hello java");
        String jsCode1 = "var a = 10; var b = 20;print(a+b)";

        //执行脚本
        engine.eval(jsCode1);  //30
        engine.eval("msg = 'hello world';");
        //使用java获取变量
        System.out.println(engine.get("msg"));  //hello world

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

        //js代码中导入java包,使用java包中的类
        String jsCode2="var list = java.util.Arrays.asList([\"清华大学\",\"北京大学\"]);";
        engine.eval(jsCode2);
        List<String> list2=(List<String>) engine.get("list");
        for(String temp:list2){
            System.out.println(temp);  //清华大学  北京大学
        }

        //执行js文件
        FileReader fr = new FileReader("src/test.js");
        engine.eval(fr);
        fr.close();
    }
}

猜你喜欢

转载自blog.csdn.net/weixin_39722922/article/details/88845547
今日推荐