ScriptEngine执行javascript片段

来源:互联网 发布:ftp端口22 编辑:程序博客网 时间:2024/06/05 03:47
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;/** *  * @date 2016年10月12日 下午5:14:34 */public class ScriptEngineTest {    public static void main(String[] args) throws Exception {        final ScriptEngineManager scriptEngineManager = new ScriptEngineManager();        test(scriptEngineManager);    }    public static void test(ScriptEngineManager scriptEngineManager) throws ScriptException, NoSuchMethodException, InterruptedException {        final 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");        final String str = "msg += '!!!';var user = {name:'tom',age:23,hobbies:['football','basketball']}; var name = user.name; var hb = user.hobbies[1];";        engine.eval(str);        final String msg = (String) engine.get("msg");        final String name = (String) engine.get("name");        final 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; }");        final Invocable jsInvoke = (Invocable) engine;        System.out.println("1+2="+jsInvoke.invokeFunction("add", 1,2));                final Object result1 = jsInvoke.invokeFunction("add", new Object[] { 10, 5 });        System.out.println(result1);        // 3        final Adder adder = jsInvoke.getInterface(Adder.class);        final Adder add=jsInvoke.getInterface(Adder.class);        System.out.println("1+2="+add.add(1, 2));        final int result2 = adder.add(10, 35);        System.out.println(result2);        // 4        engine.eval("function run() {print('www.java2s.com');}");        final Invocable invokeEngine = (Invocable) engine;        final Runnable runner = invokeEngine.getInterface(Runnable.class);        final Thread t = new Thread(runner);        t.start();        t.join();        // 5        final String jsCode = "importPackage(java.util);var list2 = Arrays.asList(['A', 'B', 'C']); ";        engine.eval(jsCode);        final List<String> list2 = (List<String>) engine.get("list2");        for (String val : list2) {            System.out.println(val);        }    }                public void printEngineDeatail() throws IllegalArgumentException, IllegalAccessException{        final ScriptEngineManager scriptEngineManager = new ScriptEngineManager();        final 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);}

原创粉丝点击