1. 引擎工厂的属性
引擎 | 名字 | MIME类型 | 文件扩展 |
---|---|---|---|
Nashorn | nashorn,Nashorn js,JS JavaScript,javascript ECMAScript,mcmascript |
application/javascript application/ecmascript text/javascript text/ecmascript |
js |
Groovy | groovy | groovy | |
Renjin | Renjin | text/x-R | R,r,S,s |
SISC Scheme | sisc | scheme,sisc |
2. 获取manager
ScriptEngineManager manager = new ScriptEngineManager(); System.out.println("Available factories: ");
3. 查看线程安全
for (ScriptEngineFactory factory : manager.getEngineFactories()){ System.out.println(factory.getEngineName()); //null:不安全 //MULTITHREADED:安全 //... System.out.println("线程安全:"+factory.getParameter("THREADING")); }
4. 获取js引擎
final ScriptEngine engine = manager.getEngineByName("nashorn"); if (engine == null) { System.err.println("No engine for nashorn"); System.exit(1); }
5. 调用脚本
engine.eval("n=88"); Object evalResult = engine.eval("n+2"); System.out.println(evalResult); engine.put("x", 99); evalResult = engine.eval("x+2"); System.out.println(evalResult);
6. 重定向输出
Writer orinalWriter = engine.getContext().getWriter(); engine.getContext().setWriter(new PrintWriter("E:\\js.txt")); engine.eval("print('hello')"); engine.getContext().setWriter(orinalWriter); //只有脚本引擎的输出被改变 System.out.println("hello");
7. 调用函数
engine.eval("function greet(how ,whom) {return how+','+whom}"); evalResult = ((Invocable)engine).invokeFunction("greet", "hello","world"); System.out.println(evalResult);
8. 调用方法
engine.eval("function Greeter(how){this.how=how}"); engine.eval("Greeter.prototype.welcome= function(whom) {return this.how+','+whom}"); Object yo = engine.eval("new Greeter('Yo')"); evalResult = ((Invocable)engine).invokeMethod(yo, "welcome","world"); System.out.println(evalResult);
9.调用接口
package shell; public interface Greeter { String welcome(String whom); }
//定义function engine.eval("function welcome(whom) {return 'welcome hello,'+whom}"); Greeter greeter = ((Invocable)engine).getInterface(Greeter.class); evalResult = greeter.welcome("world"); System.out.println(evalResult);
10. 编译脚本
if(engine instanceof Compilable){ CompiledScript compiledScript = ((Compilable)engine).compile("print('hello xxx')"); compiledScript.eval(); }