JavaScript腳本引擎Rhino

一:認知腳本引擎
	腳本引擎就是連接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!
		
	}
}


發佈了44 篇原創文章 · 獲贊 9 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章