jini-jakarta99-blogging
[ 首頁 | 索引 | 登入 | 註冊 ]

2008-02-11

jini 所撰寫。最後修改者是 jini 在 144 天之前。 已瀏覽 233 次。
[編輯] [附加]

JSR 223, javax.script 08:47

在 JavaSE 6 裡面加入了 Java Scripting 的 API, 我記得很久以前在 BBS 有討論, 學 Java 和 JavaScript 的差別, 往往得到的答案是 Java != Javasript. 把 Javascript 的應用侷限在網頁設計之上, 但是隨著 AJAX 應用與 script 輕便性的考量, 在 JavaSE6 加入了 Script 的應用, 主要是為了簡單快速的開發應用, 對我來說, Scripting 的語言可以更容易進行文字處理而不用去考慮型別.

首先, JavaSE 6 要怎麼應用 Script 語言呢

主要是採用 javax.script 之下的 API

  • 建立 ScriptEngineManager 物件
  • 向該 Manager 物件取得 ScriptEngine
  • 執行 ScriptEngine 的 eval() method

例如,

ScriptEngineManager manager = new ScriptEngineManager();
ScriptEngine engine = manager.getEngineByName("JavaScript");
engine.eval("print('Hello world')"); // 直接跳出 Hello World 對話框
engine.eval(new java.io.FileReader("c:\\test.js")); // 取得 test.js 的 script 執行

因為 JavaSE 6 具有 Scripting Engine 的執行環境, 所以 script 的語法可以和 java 相互交錯, 也顯得更為複雜. 例如

File f = new File("test.txt");
engine.put("file",f);
engine.eval("print(file.getAbsolutePath())");
Engine 在執行 print 的時候, 發現 file 物件是由 java 傳送(put) 過來的, 所以他先利用 java 的執行環境取得 getAbsolutePath() 的字串, 才回到 ScriptEngine 中繼續執行 script 語法.

除了在 ScriptEngine 中呼叫 Java method 之外, 在 Java 之中也可以呼叫 Script function,

String script = 'function hello(name){ print('hello js to '+name);}";
engine.eval(script); // 建議都採用 js 檔案比較好寫
Invocable inv = (Invocable) engine; // 將 engine 轉型可以被 java 呼叫, 視你的 script engine 來決定是否有實做
inv.invokeFuction("hello","jini");
如果採用某個 js 物件的 Object, 可以用 get 取得該物件, 更可呼叫(invokeMehtod) 他的屬性 Object obj = engine.get("obj");

以上是比較基礎的應用, 其他的可以參考

  • JavaSE 6 教學文件
>>http://java.sun.com/javase/6/docs/technotes/guides/scripting/programmer_guide/index.html
  • JSR 223 的 Specification
>>http://jcp.org/en/jsr/detail?id=223
  • Rhino *IMPORTANT*
>>http://www.mozilla.org/rhino/
  • Scripting dev.java.net 可以查看其他的 scripting engine 是否有你熟悉的 script engine
>>https://scripting.dev.java.net/

目前無回響 | 發表回響
請利用全文檢索或日期來找你想看的文章 ^^~

< July 2008 >
SunMonTueWedThuFriSat
12345
6789101112
13141516171819
20212223242526
2728293031

歡迎來到 jini(99% jakarta) blogging
如果要加入我的 blogging 網頁
可以抓下面的小圖
jini (99% jakarta) blogging
link 是 www.softleader.com.tw:8668
alt 請寫 jini (99% jakarta) blogging

Blog 精選
>>Jakarta
>>Java Database
>>JAAS
>>Code Style
>>Groovy
>>Self Misc.

不會用 snipsnap 嗎
請查詢 snipsnap-help.

我會發言的討論版
jini in>>jsptw


我發行的電子報(Java Opensource Newspaper)
>>BIG5-Traditional Chinese Version
>>GB-Simplified Chinese Version

Users: (2)
… and 18 Guests


一群Java高手的部落格
>>JiaYun
>>jserv
>>Forth
>>Tempo
>>edwardsayer
>>swanbear
>>jini's JavaEE 5
>>雅加達爪哇咖啡北京分店

其他連結:
XHTML 1.0 validated
CSS validated
RSS 2.0 validated
powered by snipsnap
Attribution-NonCommercial-ShareAlike 1.0
Java b Blog
RSS Feed

Powered by SnipSnap 0.4.2a

snipsnap.org | Copyright 2000-2002 Matthias L. Jugel and Stephan J. Schmidt