java如何用腳本引擎執行javascript代碼

腳本引擎

介紹

JAVA腳本引擎是從JDK6.0之後添加的新功能

什麼是腳本引擎?

  • 使得java應用程序可以通過一套固定的接口與各種腳本引擎交互,從而達到在java平臺上調用各種腳本語言的目的
  • java腳本API是連通java平臺和腳本語言的橋樑
  • 可以把一些複雜易變的業務邏輯交給腳本語言處理,這大大提高了開發效率。

簡單說就是腳本引擎是java平臺和其他腳本語言平臺(例如js平臺)的中間平臺,裏面的變量,java平臺可以讀,其他腳本語言平臺也可以讀到。

獲得腳本引擎對象

要執行js代碼,首先要獲得腳本引擎對象:

//獲取腳本引擎對象
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("javascript");
//定義變量,存儲到java平臺和javascript平臺的中間平臺,兩個平臺都可以取到這個變量
engine.put("msg","smart wang ergou is a good man");
//javascript
String str = "var user = {name :'wangErgou',age : 18,schools:['海事大學 ',' 尚學堂 ' ] } ;";
//打印
str += "print(user.name);";
//執行腳本語言
engine.eval(str);
//修改msg變量的值
engine.eval("msg = 'dmu is a good school';");
//獲得msg變量的值
System.out.println(engine.get("msg"));

ScriptEngine 腳本引擎有三個常用的方法,put(),get(),eval(),分別對應,定義一個變量,獲得一個變量值,執行一段代碼。

有了這三個方法,我們可以執行一些簡單的js代碼。但是我們都知道,js中也是有函數的,該怎樣定義和調用一個函數呢?
其實有了eval()方法,就可以定義函數,但是要調用獲得返回值,則需要取得Invocable接口,執行接口的invokeFunction()方法,就可以調用函數並取得返回值。

//定義函數
engine.eval("function add(a,b){var sum = a + b; return sum;}");
//執行函數
//取得接口
Invocable jsInvocable = (Invocable)engine;
//執行腳本中定義的方法
Object result = jsInvocable.invokeFunction("add", new Object[] {22,33});
System.out.println(result);

導入包也是正常的操作,使用eval()方法

//導入其他java包,使用其他包中的類
engine.eval("importPackage(java.util); var list = Arrays.asList([\"海事大學  \" ,\"dmu\"])");
List<String> list = (List<String>) engine.get("list");
System.out.println(list);

如果覺得用String寫js麻煩,也可以直接執行js文件:

//執行一個js文件(將a.js置於項目的src下)
URL url = test.class.getClassLoader().getResource("a.js");
FileReader fr = new FileReader(url.getPath());
engine.eval(fr);
fr.close();
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章