• 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) 匹配原理 2 回溯
    java实现sftp实例
    自定义注解
    java构造器
    Does the parameter type of the setter match the return type of the getter?
    JAVA经典算法40题(18)
    关于session的详细解释
    .net上传功能fileupload代码
    ContentUris类使用介绍
    java回顾之类初级
  • 原文地址:https://www.cnblogs.com/xiang--liu/p/9710366.html
Copyright © 2020-2023  润新知