javascript
【Java脚本引擎】脚本引擎执行JavaScript代码
應(yīng)用場(chǎng)景
公司有30員工,每個(gè)人工資計(jì)算方式不同。現(xiàn)在需要計(jì)算工資。
傳統(tǒng)的方法:一個(gè)接口,30個(gè)實(shí)現(xiàn)類(lèi)。
使用腳本引擎:編寫(xiě)一個(gè)xml文件,每人一個(gè)計(jì)算公式,使用的時(shí)候可以把公式加載到程序中,啟動(dòng)時(shí)使用腳本引擎調(diào)用相關(guān)的腳本,計(jì)算工資。
通過(guò)腳本引擎管理器,獲得腳本引擎對(duì)象,執(zhí)行相關(guān)代碼
警告:計(jì)劃從未來(lái)的JDK版本中刪除Nashorn引擎
示例(1):在Java中執(zhí)行JS代碼
package cn.hanquan.rhino;import javax.script.ScriptEngine; import javax.script.ScriptEngineManager;//測(cè)試腳本引擎執(zhí)行JavaScript代碼 public class TestRhino {public static void main(String[] args) throws Exception {// 獲得腳本引擎對(duì)象ScriptEngineManager sem = new ScriptEngineManager();ScriptEngine engine = sem.getEngineByName("javascript");// 定義變量,存儲(chǔ)到引擎的上下文中engine.put("msg", "hello~world!");String str = "var user= {name:'HanQuan', age:29};";str += "print(user.name);";// 執(zhí)行腳本engine.eval(str);} }運(yùn)行結(jié)果
HanQuan示例(2):分別通過(guò) JavaScript/Java 獲取腳本引擎定義的msg變量、使用腳本引擎修改msg的內(nèi)容
- 引擎,相當(dāng)于連接JavaScript和Java的橋梁。
- 存儲(chǔ)到引擎的上下文中的變量msg,既可以被JavaScript操作,也可以被Java操作
運(yùn)行結(jié)果
通過(guò)JavaScript獲取msg: Hello,Are you Okayyyy 通過(guò)Java獲取msg:Hello,Are you Okayyyy示例(3):分別用JavaScript和Java,執(zhí)行JavaScipt中的函數(shù)
package cn.hanquan.rhino;import javax.script.Invocable; import javax.script.ScriptEngine; import javax.script.ScriptEngineManager;//測(cè)試腳本引擎執(zhí)行JavaScript代碼 public class Demo2 {public static void main(String[] args) throws Exception {// 獲得腳本引擎對(duì)象ScriptEngineManager sem = new ScriptEngineManager();ScriptEngine engine = sem.getEngineByName("javascript");// 定義函數(shù)engine.eval("function add(a,b){var sum=a+b; return sum;}");// 通過(guò)JavaScript執(zhí)行函數(shù)engine.eval("print('通過(guò)JavaScript執(zhí)行函數(shù): ' + add(11,22));");// 通過(guò)Java執(zhí)行函數(shù)Invocable jsInvoke = (Invocable) engine;Object res = jsInvoke.invokeFunction("add", new Object[] { 44, 55 });System.out.println("通過(guò)Java執(zhí)行函數(shù): " + res);} }運(yùn)行結(jié)果
通過(guò)JavaScript執(zhí)行函數(shù): 33 通過(guò)Java執(zhí)行函數(shù): 99.0還可以導(dǎo)入其他Java包
運(yùn)行結(jié)果
* 若想要深入了解 Rhino 細(xì)節(jié),可以上 Rhino 官網(wǎng),詳細(xì)學(xué)習(xí) Rhino 語(yǔ)法。
* 另外,還有很多用 Java 執(zhí)行 JS 腳本的方法, Rhino 只是其中一種。
執(zhí)行本地的JavaScript文件
JS代碼
目錄結(jié)構(gòu)
Java代碼
總結(jié)
以上是生活随笔為你收集整理的【Java脚本引擎】脚本引擎执行JavaScript代码的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 【Java反射】反射机制性能问题、反射操
- 下一篇: 【Servlet】JSP学习-概念和运行