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();
}
}