Rhino簡介

這幾天突然對js引擎非常感興趣,大概瞭解了一下,記下來備忘。javascript引擎大家比較熟悉的應該是當前比較火的Chrome V8引擎。以快速聞名。v8基於c++開發。這裏就不多闡述了。另外一個是 基於java的Rhino引擎,這個想來大家不是很瞭解。下面來簡單介紹一下。
Rhino簡介
Rhino 是一種使用 Java 語言編寫的 JavaScript 的開源實現,原先由Mozilla開發,現在被集成進入JDK 6.0。與其他很多語言一樣,Rhino 是一種動態類型的、基於對象的腳本語言,它可以簡單地訪問各種 Java 類庫。Rhino 從 JavaScript 中借用了很多語法,讓程序員可以快速編寫功能強大的程序。最爲明顯的區別是,Rhino 不再使用語句結束符( ; ),放寬了變量聲明規則,並且極大地簡化了修改和檢索對象屬性的語法(沒有求助於調用存取方法)。
由於 Rhino 是 JavaScript 的一種基於 Java 的實現,所以對於 Java 開發人員來說,它應該特別易於使用。JavaScript 的(以及 Rhino 的)語法非常類似於 Java 編程語言。這兩種語言都採用了與 Java 編程語言相似的循環和條件結構,並且遵循類似的語法模式來表示這些結構。
雖然 Rhino 與本系列文章中介紹的其他編程語言具有很多共同點,但對於 Java 平臺上的編程而言,它也有獨特之處(可能有時有些不同的地方)。
Rhino 是一種 基於原型的(prototype-based)語言,而不是一種 基於類的(class-based)語言。在 Rhino 中,您可以構建對象,而不是類。除了類的對象實例之外,這樣做還可以讓您避免構建和操作類的開發、部署和執行成本。正如您將在文中發現的那樣,諸如 Rhino 這類基於原型的語言在開發和運行基於 GUI 的應用程序時尤其有效。
如何使用Rhino
你可以去Rhino的主頁下載最新的源代碼和文檔,解壓開之後有一個js.jar 這就是Rhino的庫文件。Rhino應用方式我分爲console,js調java,java調js三種。下面來一一闡述。
一 console  shell命令
相信很多技術猿們習慣使用酷酷的console控制檯來敲打shell命令。可這些一般都是服務端語言。現在你也可以在控制檯中敲到js代碼了。用法很簡單。 首先要將js.jar文件放入windows的java\jdk1.6.0\jre\lib\ext目錄,mac的 /System/Library/Java/Extensions/目錄下。
然後你就可以在命令行中敲打
java  org.mozilla.javascript.tools.shell.Main
然後你就會看到像這樣的輸出:
Rhino 1.7 release 4 2012 06 18
js> 
這樣你就可以調試js代碼了,這裏你既可以加載js文件來運行,也可以直接運行js語法語句,並且Rhino借用了java中很多的基礎語法,使我們寫起代碼來更easy。
下面我們來試試看。
直接寫代碼,效果如下:
js> var a={'name':'zhangwen','age':30}
js> a.name
zhangwen
js> a.age
30
新建一個test.js文件,內容如下:
function test(str){
   var name=str;
   print(name);
}
 
然後在console中輸入:
js> load('test.js');
js> test('awen');  
awen
js> 
體驗了這兩種方式後感覺是不是很酷?
二 Rhino中調用JAVA
不說廢話,直接上代碼:
js> var date=new java.util.Date();
js> date
Mon Jul 16 17:04:07 CST 2012
js> java.lang.Math.PI
3.141592653589793
當然,你也先導入包,import Package(java.util)(相當於java中的import package)那麼代碼中就不用寫類名的包路徑了,var date=new Date();不知道細心地同學發現沒有。在javascript中也有原生的Date,那這樣我們就應該避免這樣的寫法,防止代碼中混亂。
 Rhino實現Java接口:
 
js> var obj={run:function(){print("\nrunning...");}}
js> var r=new java.lang.Runnable(obj);
js> var t=new java.lang.Thread(r);
js> t.start();
js> 
running...
 
Rhino創建Java 數組
 
js> var array=java.lang.reflect.Array.newInstance(java.lang.String, 2);  
js> array[0]="恩";     

js> array[1]="哦";

js> java.util.Arrays.toString(array);
[恩, 哦]
 
三 Java對象操縱JavaScript
 
import org.mozilla.javascript.Context;
import org.mozilla.javascript.Scriptable;


public static void main(String[] args) {
   Context ctx=Context.enter();
   Scriptable scope=ctx.initStandardObjects();
   
   String jsStr="100*20/10";
   Object result=ctx.evaluateString(scope, jsStr, null, 0,null); 
   System.out.println("result="+result);

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章