一:認知腳本引擎
腳本引擎就是連接java語言與腳本語言的橋樑。通過腳本引擎可以使用java語言操作腳本語言。
Rhino腳本引擎就是java語言與javascrip腳本語言之間的橋樑。已經當做jar包加載到JDK中了。
package com.chen.Base_Points;
import java.io.FileReader;
import java.net.URL;
import java.util.List;
import javax.script.Invocable;
import javax.script.ScriptEngine;
import javax.script.ScriptEngineManager;
/**
* 認識javascrip腳本引擎,用java執行JavaScript腳本語言
* 1、獲得腳本引擎對象,選擇腳本語言
* ScriptEngineManager
* ScriptEngine
* eval()
* 2、定義函數
* Invocable
* invokeFunction()
* 3、導入其他java包,使用其他包中的java類。
* 4、上面的腳本文件是以字符串呈現的,下面我們來執行.js文件(注意:項目、包名等要用英文,否者可能出錯)
* @author CHJ
*
*/
public class Demo01 {
public static void main(String[] args) throws Exception {
// 1、獲得腳本引擎對象,選擇腳本語言
ScriptEngineManager sem = new ScriptEngineManager();
ScriptEngine engine = sem.getEngineByName("javascript");// 亦可以是js縮寫,代表JavaScript腳本語言
// 定義變量存儲到引擎的上下文中,這樣java和JavaScript都可以操作它
engine.put("str1", "java代碼");
//腳本語言
String str2 = "var user = {name:'虹君',age:18,schools:['清華大學','河南理工大學']};";
str2 += "println(user.schools);";
// 執行腳本
engine.eval(str2);
engine.eval("str1 = '我愛死了編程';");// 在引擎中用腳本語言操作變量
System.out.println(engine.get("str1"));
System.out.println("===============================");
// 2、定義函數
engine.eval("function add(a, b){var sum = a + b; return sum;}");
// 調用接口
Invocable jsInvoke = (Invocable) engine;
// 執行腳本中定義好的方法
Object result1 = jsInvoke.invokeFunction("add", new Object[] {12, 24});// 這裏注意一下參數的傳遞
System.out.println(result1);
System.out.println("========================");
// 3、導入其他java包,使用其他包中的java類。
String jsCode = "importPackage(java.util); var list = Arrays.asList([\"北京大學\", \"河南理工大學\"]);";
engine.eval(jsCode);
List<String> list2 = (List<String>)engine.get("list");// 獲得鏈表
for (String temp : list2) {
System.out.println(temp);
}
// 4、上面的腳本文件是以字符串呈現的,下面我們來執行.js文件(注意:項目、包名等要用英文,否者可能出錯)
/*
//第一種方式 Demo01.class.getClassLoader()就加載到了當前空間
URL url = Demo01.class.getClassLoader().getResource("b.js");
FileReader fr = new FileReader(url.getPath());
//System.out.println(url.getPath());F:/Eclipse%20Workplace/Rhino/bin/b.js(這裏因爲有個空格符號,所以導致第一種無法取得正確的地址)
*/
FileReader fr = new FileReader("F:/Eclipse WorkPlace/Rhino/src/b.js");// 第二種方式
engine.eval(fr);
fr.close(); //由於只是測試,就不那麼規範了。大家實際用時要使用try catch finally!
}
}