J2SE 8的脚本

1. 引擎工厂的属性

引擎名字MIME类型文件扩展
Nashornnashorn,Nashorn
js,JS
JavaScript,javascript
ECMAScript,mcmascript
application/javascript
application/ecmascript
text/javascript
text/ecmascript
js
Groovygroovy groovy
RenjinRenjintext/x-RR,r,S,s
SISC Schemesisc 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();
		}




  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值