java ScriptEngine 使用 (支援JavaScript指令碼,eval()函式等)
阿新 • • 發佈:2019-01-25
參考連結:http://www.cnblogs.com/zouhao/p/3644788.html
java中的ScriptEngineManager 可以用於解析指令碼和執行指令碼語言。
簡單的執行指令碼樣例:
package com.eastcom.first.spark.data.script; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class ListScriptEngines { public static void main(String args[]) throws ScriptException { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("javascript"); Double hour = (Double) engine.eval("var date = new Date();" + "date.getHours();"); System.out.println("hour : " + hour); } }
執行結果:
hour : 14.0
和指令碼語言進行互動
上面例子只是運行了一個非常簡單的指令碼。這個指令碼是孤立的,並未通過Java向這指令碼傳遞任何的值。雖然從這個指令碼返回了一個值,但這種返回方式是隱式的。
指令碼引擎除了這些簡單的功能,還為我們提供了更強大的功能。甚至可以通過Java向指令碼語言中傳遞引數,還可以將指令碼語言中的變數的值取出來。這些功能要依靠ScriptEngine中的兩個方法put和get。
put 有兩個引數,一個是指令碼變數名,另一個是變數的值,這個值是Object型別,因此,可以傳遞任何值。
get 有一個引數,就是指令碼變數的名。
下面的程式碼通過javascript指令碼將一個字串翻轉(這個字串是通過java傳給javascript的),然後通過java得到這個被翻轉後的字元後,然後輸出。
樣例:
package com.eastcom.first.spark.data.script; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager; import javax.script.ScriptException; public class ReverseString { public static void main(String args[]) throws ScriptException { ScriptEngineManager manager = new ScriptEngineManager(); ScriptEngine engine = manager.getEngineByName("javascript"); engine.put("name", "abcdefg"); engine.eval("var output ='' ;" + "for (i = 0; i <= name.length; i++) { " + " output = name.charAt(i) + output" + "}"); String name = (String) engine.get("output"); System.out.printf("被翻轉後的字串:%s", name); } }
執行結果:
被翻轉後的字串:gfedcba
更多詳解參考上面連結。