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