Rhino學(xué)習(xí)總結(jié)_第1頁
Rhino學(xué)習(xí)總結(jié)_第2頁
Rhino學(xué)習(xí)總結(jié)_第3頁
Rhino學(xué)習(xí)總結(jié)_第4頁
全文預(yù)覽已結(jié)束

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

1、Rhino學(xué)習(xí)筆記Mozilla RhinoRhino 是一個(gè)純 Java 的開源的 JavaScript 實(shí)現(xiàn)。他的名字來源于 O'Reilly 關(guān)于 JavaScript 的書的封面:1 簡介 rhino是使用java代碼實(shí)現(xiàn)的javascript解釋器,它實(shí)現(xiàn)了javascript的核心,符合Ecma-262標(biāo)準(zhǔn),支持javascript標(biāo)準(zhǔn)的所有特性。Rhino 提供了如下功能ü 對(duì) JavaScript 1.5 的完全支持 ü 直接在 Java 中使用 JavaScript 的功能 ü 一個(gè) JavaScript shell 用于運(yùn)行 JavaS

2、cript 腳本 ü 一個(gè) JavaScript 的編譯器,用于將 JavaScript 編譯成 Java 二進(jìn)制文件 2 如何運(yùn)行js腳本后進(jìn)入運(yùn)行交互界面(js),而后在js提示符下輸入 load( “文件路徑”),注意次數(shù)的目錄間隔是“/”。而后輸入要運(yùn)行的js的函數(shù)名稱即可運(yùn)行js腳本。例:js 代碼function isPrime (num) if (num <= 1) print("Please enter a positive integer >= 2.") return false var prime = true var sqrRoo

3、t = Math.round(Math.sqrt(num) for (var n = 2; prime & n <= sqrRoot; +n) prime = (num % n != 0) return prime load("D:/isPrime.js");isPrime(77);結(jié)果=false3 腳本調(diào)試在命令行輸入java org.mozilla.javascript.tools.debugger.Main可以看到腳本調(diào)試頁面4 如何通過java代碼執(zhí)行javascriptRhino執(zhí)行代碼的過程1) 先設(shè)置環(huán)境,生成各種javascript的本地對(duì)象

4、,如:Object,F(xiàn)unction2) 使用語法分析對(duì)字符串進(jìn)行分析生成ast。3) 然后再使用IRFactory類將ast轉(zhuǎn)換中間表示形式。4) 然后再將該中間表示形式轉(zhuǎn)換為二進(jìn)制代碼。5) 然后執(zhí)行該代碼得出結(jié)果。 public static void main(String args)    Context ctx = Context.enter();    /獲取環(huán)境設(shè)置Scriptable scope = ctx.initStandardObjects();    /初始化本地對(duì)象scope.put("x&quo

5、t;, scope, new Integer(20);    /輸入?yún)?shù)設(shè)置scope.put("y", scope, new Integer(30);    try         ctx.evaluateString(scope, "var result=x+y", "", 1, null);    /執(zhí)行    System.out.println(scope.get("

6、result", scope);    /結(jié)果輸出 finally         Context.exit();       5 Rhino的包結(jié)構(gòu)org.mozilla.javascript包:該包內(nèi)的對(duì)象是實(shí)現(xiàn)javascript的主要對(duì)象。org.mozilla.javascript.ast包:rhino中語法分析器生成的ast表示類都在該包內(nèi)。org.mozilla.javascript.debug包:該包實(shí)現(xiàn)了javascript的debug功能。org

7、.mozilla.javascript.optimizer包:該包實(shí)現(xiàn)了javascipt生成代碼的代碼優(yōu)化。org.mozilla.javascript.regexp包:該包實(shí)現(xiàn)了javascript正側(cè)表達(dá)式的功能。6JSR233Jsr233是為java設(shè)計(jì)的一套腳本語言API,在發(fā)行版本中包括了一個(gè)基于 Mozilla Rhino 的 JavaScript 腳本引擎。例:public class RunJavaScript public static void main(String args) ScriptEngineManager factory = new ScriptEngine

8、Manager(); ScriptEngine engine = factory.getEngineByName ("JavaScript"); engine.eval("print('Hello World')"); 如何與java通信通過put 方法用于將一個(gè) Java 對(duì)象映射成一個(gè)腳本語言的變量public class HelloWorld String s = "Hello World" public void sayHello() System.out.println(s); import javax.sc

9、ript.ScriptEngine;import javax.script.ScriptEngineManager;import javax.script.ScriptException;public class TestPut public static void main(String args) throws ScriptException ScriptEngineManager factory = new ScriptEngineManager(); ScriptEngine engine = factory.getEngineByName("JavaScript"

10、); HelloWorld hello = new HelloWorld(); engine.put("script_hello", hello); engine.eval("script_hello.sayHello()"); 7. Rhino與java的區(qū)別ü 由于 Rhino 是采用動(dòng)態(tài)類型的語言,因此在函數(shù)和變量的聲明中看不到類型。您可以使用 function 關(guān)鍵字開始函數(shù)的聲明,使用 var 關(guān)鍵字來聲明局部變量;ü Rhino 中語句結(jié)束符是可選的;8. 如何使用java類庫Rhino 中定義了一個(gè)全局變量 Packages,并且它的所有元素也是全局變量,這個(gè)全局變量維護(hù)了 Java 類的層次結(jié)構(gòu)var frame = java.io.File("filename");也可以像 Java 代碼中一樣把這個(gè)對(duì)象引用進(jìn)來importClass (java.io.File);var file = File("filename");importPackage(java.io);用戶自定義的包也可以被引用進(jìn)來,不過這時(shí)候 Packages 引用不能被省略importPackage(Packages.tony);var hello = HelloWorld();hello

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論