ScriptEngineTest

来源:互联网 发布:长沙联通网络好不好 编辑:程序博客网 时间:2024/04/28 06:50
import java.util.List;
import javax.script.Invocable;
import javax.script.ScriptContext;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineFactory;
import javax.script.ScriptEngineManager;
import javax.script.ScriptException;


import com.niuwa.p2p.core.file.PublciNWFileBuilder;


/**
 * 
 * @date 2016年10月12日 下午5:14:34
 */
public class ScriptEngineTest {
    public static void main(String[] args) throws Exception {
        ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
        test(scriptEngineManager);


    }


    public static void test(ScriptEngineManager scriptEngineManager) throws ScriptException, NoSuchMethodException, InterruptedException {
        ScriptEngine engine = scriptEngineManager.getEngineByName("javascript");
        // ScriptContext public static final int ENGINE_SCOPE = 100;
        // ScriptContext public static final int GLOBAL_SCOPE = 200;
        // 1
        engine.put("msg", "just a test");
        String str = "msg += '!!!';var user = {name:'tom',age:23,hobbies:['football','basketball']}; var name = user.name; var hb = user.hobbies[1];";
        engine.eval(str);
        String msg = (String) engine.get("msg");
        String name = (String) engine.get("name");
        String hb = (String) engine.get("hb");
        System.out.println(msg);
        System.out.println(name + ":" + hb);
        // 2
        engine.eval("function add (a, b) {c = a + b; return c; }");
        Invocable jsInvoke = (Invocable) engine;
        System.out.println("1+2="+jsInvoke.invokeFunction("add", 1,2));
        
        Object result1 = jsInvoke.invokeFunction("add", new Object[] { 10, 5 });
        System.out.println(result1);
        // 3
        Adder adder = jsInvoke.getInterface(Adder.class);
        Adder add=jsInvoke.getInterface(Adder.class);
        System.out.println("1+2="+add.add(1, 2));
        int result2 = adder.add(10, 35);
        System.out.println(result2);
        // 4
        engine.eval("function run() {print('www.java2s.com');}");
        Invocable invokeEngine = (Invocable) engine;
        Runnable runner = invokeEngine.getInterface(Runnable.class);
        Thread t = new Thread(runner);
        t.start();
        t.join();
        // 5
        String jsCode = "importPackage(java.util);var list2 = Arrays.asList(['A', 'B', 'C']); ";
        engine.eval(jsCode);
        List<String> list2 = (List<String>) engine.get("list2");
        for (String val : list2) {
            System.out.println(val);
        }
    }
    
    
    
    public void printEngineDeatail() throws IllegalArgumentException, IllegalAccessException{
        ScriptEngineManager scriptEngineManager = new ScriptEngineManager();
        List<ScriptEngineFactory> engineFactoryList = scriptEngineManager.getEngineFactories();


        System.out.println("------ScriptEngineFactory-----");
        for (ScriptEngineFactory scriptEngineFactory : engineFactoryList) {
            System.out.println("-----------------属性 ------------------");
                ReflectTest.printAllData(scriptEngineFactory);
                System.out.println(scriptEngineFactory.getLanguageName()); 
                System.out.println(scriptEngineFactory.getEngineName());
                System.out.println(scriptEngineFactory.getEngineVersion());
                System.out.println(scriptEngineFactory.getLanguageName());
                System.out.println(scriptEngineFactory.getLanguageVersion());
                System.out.println("-----------------属性 ------------------");
        }
//        -----------------属性 ------------------
//        field name:names,value:[juel]
//        field name:extensions,value:[juel]
//        field name:mimeTypes,value:[]
//        JSP 2.1 EL
//        juel
//        1.0
//        JSP 2.1 EL
//        2.1
//        -----------------属性 ------------------
//        -----------------属性 ------------------
//        field name:names,value:[js, rhino, JavaScript, javascript, ECMAScript, ecmascript]
//        field name:mimeTypes,value:[application/javascript, application/ecmascript, text/javascript, text/ecmascript]
//        field name:extensions,value:[js]
//        ECMAScript
//        Mozilla Rhino
//        1.7 release 3 PRERELEASE
//        ECMAScript
//        1.8
//        -----------------属性 ------------------
        System.out.println("-----------");


    }
}


interface Adder {
    int add(int a, int b);
}
0 0