- 获得脚本引擎对象
//获得脚本引擎对象
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("javascript");
- javascript脚本引擎——Rhino
网站:https://developer.mozilla.org/en-US/docs/Mozilla/Projects/Rhino
例子
import java.io.FileReader;
import java.io.IOException;
import java.net.URL;
import java.util.List;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;
public class Test {
public static void main(String[] args) {
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("javascript");
engine.put("msg", "但使龙城飞将在,不教胡马度阴山");
String str = "var man= {name:'汉将军李广',age:18,skills:['飞刀','骑射']};";
str += "print(man.name)";
try {
// 执行脚本
engine.eval(str);
// 操作属性
engine.eval("msg='飞将军是卫青';");
System.out.println(engine.get("msg"));
System.out.println("----------------------");
// 执行函数
engine.eval("function add(a,b){var sum=a+b;return sum;}");
Invocable jsInvoke = (Invocable) engine;
Object ret = jsInvoke.invokeFunction("add", new Object[] { 10, 20 });
System.out.println(ret);
System.out.println("----------------------");
// 导入java包,使用包中的类
String jsCode = "var list = java.util.Arrays.asList([\"北京\",\"南京\",\"西安\"]);";
engine.eval(jsCode);
List<String> list2 = (List<String>) engine.get("list");
for (String ls : list2) {
System.out.println(ls);
}
System.out.println("----------------------");
// 执行js脚本文件
URL url = Test.class.getClassLoader().getResource("test.js"); // 项目src目录下——即 System.getProperty("java.class.path")
FileReader fr = new FileReader(url.getPath());
engine.eval(fr);
fr.close();
} catch (ScriptException | NoSuchMethodException | IOException e) {
e.printStackTrace();
}
}
}