Java可以通过脚本引擎来调用脚本语言,比如JavaScript,Groovy等
脚本引擎
脚本引擎是一个可以执行用某种特定语言编写的脚本的类库。当虚拟机启动的时候,它会发现可用的脚本引擎。
获取引擎并执行JavaScript脚本
public class ScriptStudy {
public static void main(String[] args) throws ScriptException {
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");//获取脚本
String javaScriptStr = "a = 3";
Object result = engine.eval(javaScriptStr);
System.out.println(result);
Object rs2 = engine.eval("a+1");
System.out.println(rs2);
//添加变量
engine.put("k",1728);
rs2 =engine.eval("k+1");
System.out.println(rs2);
//获取变量
rs2 = engine.get("a");
System.out.println(rs2);
//绑定全局作用域名变量
Bindings scope = engine.createBindings();
scope.put("name","maozedong");
rs2 = engine.eval("'hello: '+name",scope);
System.out.println(rs2);
}
}
打印结果
编译脚本
某些脚本引擎出于对执行效率的考虑。可以将脚本代码编译为某种中间格式。这些引擎实现了Compilable接口。
Reader reader = new FileReader("J:\\myscript.js");
CompiledScript script = null;
ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
if(engine instanceof Compilable){
script = ((Compilable)engine).compile(reader);
}
Object rs = null;
if(script != null ){
System.out.println("执行编译后的代码");
rs = script.eval();
}else{
System.out.println("执行原生代码");
rs = engine.eval(reader);
}
myscript.js
a = 3;
b = 5;
println(a+b);
打印结果