J2SE 8的脚本 1. 引擎工厂的属性 2. 获取manager 3.  查看线程安全 4. 获取js引擎 5. 调用脚本 6. 重定向输出 7. 调用函数 8. 调用方法 9.调用接口 10. 编译脚本

引擎 名字 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();
		}