zoukankan      html  css  js  c++  java
  • 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();
    		}




  • 相关阅读:
    Java遍历JsonObject对象
    fastjson.JSONObject之对象与JSON转换方法
    Java HotSpot VM中的JIT编译
    JAVA 反射类 捕获异常 method.invoke方法如何捕获异常
    手动调用hibernate的参数校验器和springboot参数校验器 验证
    Netty-Socketio API
    Netty-socketio集成redis,服务端集群推送消息
    mysql 导出csv格式数据解决乱码
    自建dns服务器
    MySQL 8.0 克隆(clone)插件快速搭建主从复制
  • 原文地址:https://www.cnblogs.com/xiang--liu/p/9710366.html
Copyright © 2011-2022 走看看