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();
    }
}
  • 0
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值