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();
    		}




  • 相关阅读:
    图解Http协议 url长度限制
    cpu占用工具,亲测可用
    python使用mysql 获取数据,感知不到数据变化的原因
    dns压测工具dnsperf
    sqlalchemy.exc.ArgumentError: Mapper mapped class Result->result could not assemble any primary key 报错解决
    DevTools failed to load SourceMap: Could not load content for chrome-extension 解决
    tcp/udp 的一些测试
    win端 vscode 远程连接 centos,配置调试
    gitllab访问报错:Permission denied (publickey). 以及后续测试
    linux文件表项测试
  • 原文地址:https://www.cnblogs.com/xiang--liu/p/9710366.html
Copyright © 2011-2022 走看看