當前位置:
首頁 >
前端技术
> javascript
>内容正文
javascript
【Java脚本引擎】脚本引擎执行JavaScript代码
生活随笔
收集整理的這篇文章主要介紹了
【Java脚本引擎】脚本引擎执行JavaScript代码
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
應用場景
公司有30員工,每個人工資計算方式不同。現在需要計算工資。
傳統的方法:一個接口,30個實現類。
使用腳本引擎:編寫一個xml文件,每人一個計算公式,使用的時候可以把公式加載到程序中,啟動時使用腳本引擎調用相關的腳本,計算工資。
通過腳本引擎管理器,獲得腳本引擎對象,執行相關代碼
警告:計劃從未來的JDK版本中刪除Nashorn引擎
示例(1):在Java中執行JS代碼
package cn.hanquan.rhino;import javax.script.ScriptEngine; import javax.script.ScriptEngineManager;//測試腳本引擎執行JavaScript代碼 public class TestRhino {public static void main(String[] args) throws Exception {// 獲得腳本引擎對象ScriptEngineManager sem = new ScriptEngineManager();ScriptEngine engine = sem.getEngineByName("javascript");// 定義變量,存儲到引擎的上下文中engine.put("msg", "hello~world!");String str = "var user= {name:'HanQuan', age:29};";str += "print(user.name);";// 執行腳本engine.eval(str);} }運行結果
HanQuan示例(2):分別通過 JavaScript/Java 獲取腳本引擎定義的msg變量、使用腳本引擎修改msg的內容
- 引擎,相當于連接JavaScript和Java的橋梁。
- 存儲到引擎的上下文中的變量msg,既可以被JavaScript操作,也可以被Java操作
運行結果
通過JavaScript獲取msg: Hello,Are you Okayyyy 通過Java獲取msg:Hello,Are you Okayyyy示例(3):分別用JavaScript和Java,執行JavaScipt中的函數
package cn.hanquan.rhino;import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager;//測試腳本引擎執行JavaScript代碼 public class Demo2 {public static void main(String[] args) throws Exception {// 獲得腳本引擎對象ScriptEngineManager sem = new ScriptEngineManager();ScriptEngine engine = sem.getEngineByName("javascript");// 定義函數engine.eval("function add(a,b){var sum=a+b; return sum;}");// 通過JavaScript執行函數engine.eval("print('通過JavaScript執行函數: ' + add(11,22));");// 通過Java執行函數Invocable jsInvoke = (Invocable) engine;Object res = jsInvoke.invokeFunction("add", new Object[] { 44, 55 });System.out.println("通過Java執行函數: " + res);} }運行結果
通過JavaScript執行函數: 33 通過Java執行函數: 99.0還可以導入其他Java包
運行結果
* 若想要深入了解 Rhino 細節,可以上 Rhino 官網,詳細學習 Rhino 語法。
* 另外,還有很多用 Java 執行 JS 腳本的方法, Rhino 只是其中一種。
執行本地的JavaScript文件
JS代碼
目錄結構
Java代碼
總結
以上是生活随笔為你收集整理的【Java脚本引擎】脚本引擎执行JavaScript代码的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 【Java反射】反射机制性能问题、反射操
- 下一篇: 【Java字节码操作】JavaAssis