Rhino -- 基於java的javascript實現


這幾天突然對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

當然,你也先導入包,importPackage(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); }

 

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM