您好,登錄后才能下訂單哦!
這篇文章主要講解了“Java里面怎么運行JS”,文中的講解內容簡單清晰,易于學習與理解,下面請大家跟著小編的思路慢慢深入,一起來研究和學習“Java里面怎么運行JS”吧!
Java自JDK1.6以來,就支持JS的腳本執行,首先通過初始化腳本引擎管理器,通過這個管理器獲取對應腳本的執行引擎,如下:
ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine engine = factory.getEngineByName("JavaScript");
到這個地方,這個engine對象我們就可以隨時隨地的使用,下面開始幻化吧
先從一個基本的程序開始,輸出我們熟悉的Hello World
String script = "function hello(name) { return 'Hello,' + name;}"; engine.eval(script); Invocable inv = (Invocable) engine; String res = (String) inv.invokeFunction("hello", "World"); System.out.println("res:" + res);
第一行就是一個標準的JS函數,入參name,返回Hello+name
這樣一個形式
第二行就是把這個函數置入到引擎環境中
第四行調用hello方法,傳入參數World,并且將返回值強制為String類型
在引擎中設置一個變量有兩種,第一是從java語言調用engine的put
方法
engin.put("name","zhangsan")
第二種是在腳本里面var一個變量,再在engine里面進行配置
engin.eval("var name=lisi;");
在和Java打交道的時候,更多從Java方面獲取對象參數,然后到JS里面去運算;所以在JAVA里面把變量準備好,包括入參和出參都進行設定,然后在JS使用這些變量,當然也可以傳入參數,輸出復雜對象最好是設定一個變量。舉個例子:
//對上面的方法進行擴展 Map<String, Object> map = new HashMap<String, Object>();//一個哈希表 map.put("a", "abc");//向哈希表增加一個元素 engine.put("map", map);//把這個哈希表丟到JS引擎中去 //執行一段JS腳本,作用是把一個鍵值對為currentTime和當前時間丟到哈希表 engine.eval("map.put('currentTime','20161022');"); Student student=new Student();//這是一個普通的POJO student.setAge(12); student.setName("張三"); engine.put("student", student); String script = "function hello(name) { return 'Hello,' + map.get('currentTime')+map.get('a')+student.getName();}"; engine.eval(script); Invocable inv = (Invocable) engine; String res = (String) inv.invokeFunction("hello", "World"); System.out.println(res);
在JS腳本里面使用JDK的方法需要增加Packages后面包名、類和類的方法
String js = "function getUUID(){var f=Packages.java.util.UUID.randomUUID();print(f)}"; engine.eval(js); Invocable inv = (Invocable) engine; inv.invokeFunction("getUUID");
很多時候,JS的功能不如Java強大,而這種JS中使用JAVA方法顯得非常重要
JSON 作為對象的組織者介于JAva和JavaScript之間都能比較好的傳輸數據、組裝數據,我們使用第三方JSON處理包來做一個例子
String jsonStr="{'key':'value','SubSets':[{'x':'abc'},{'y':'edf'}],'random':Math.random()},{'other':'info'}"; JSONObject json=new JSONObject(jsonStr); // engine.put("json", json); String script = "function hello(json) { return 'Hello,' + json.getJSONArray(\"SubSets\").getJSONObject(0).get(\"x\").toString();}"; engine.eval(script); Invocable inv = (Invocable) engine; String res = (String) inv.invokeFunction("hello", json); System.out.println(res);
首先是一個比較復雜的JSON對象,使用org.json.JSONObject進行封裝,作為入參傳遞進入JS引擎的hello方法,該方法對JSON對象進行解析也是利用org.json.JSONObject的方法。
JS實現java的接口,來完成具體業務
String script = "var obj = new Object();obj.run = function() { println('執行具體方法==='+name);}"; engine.put("name", "全局參數"); engine.eval(script); Object obj = engine.get("obj"); Invocable inv = (Invocable) engine; Runnable r = inv.getInterface(obj, Runnable.class); Thread th = new Thread(r); th.start();
此處使用Runnable接口開啟一個新的線程,具體的業務邏輯封裝在JS里面,業務需要返回值可以自定義一個接口,比如public ReturnObj execute();
,那么JS里面的obj.execute
方法就是具體干活的地方。
JS里面手動清除一個變量,或者對象使用delete方法
var a=10; a;//出現10delete(a); a;//出現Uncaught ReferenceError: a is not defined
感謝各位的閱讀,以上就是“Java里面怎么運行JS”的內容了,經過本文的學習后,相信大家對Java里面怎么運行JS這一問題有了更深刻的體會,具體使用情況還需要大家實踐驗證。這里是億速云,小編將為大家推送更多相關知識點的文章,歡迎關注!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。