2006 年 10 月 30 日
在即將發布的 java SE6(Mustang)中,增加了對腳本語言的支持。通過對腳本語言的調用,使得一些通常用 Java 比較難于實現的功能變得簡單和輕便。腳本語言與 Java 之間的互操作將變得優雅而直接。
腳本語言與 Java
假設我們有一個簡單的需求,察看一份文檔中 5 個字母組成的單詞的個數。用 Java 一般實現如下:
import java.io.BufferedReader;import java.io.FileReader;import java.io.IOException;public class Find5Words { public static void main(String[] args) throws IOException { String result = ""; String line = null; int num = 0; FileReader fr = new FileReader("filename"); BufferedReader br = new BufferedReader(fr); while ((line = br.readLine()) != null) { result += line; } br.close(); fr.close(); String[] s = result.split(" "); for (int i = 0; i < s.length; i++) { if (s[i].matches("^//w{5}$")) { num++; } } System.out.PRintln(num); }}
再看看 Perl 語言實現同樣功能的代碼:
open FILE, "<filename ";while (<FILE>) { for (split) { $num++ if /^/w{5}$/ } }print $num;那么有沒有一種優雅的方式將 Java 與腳本語言結合呢,在今年秋季即將發布的 Java SE6(代號 Mustang)中,這將成為現實。
Mustang 的腳本引擎
JSR 233 為 Java 設計了一套腳本語言 API。這一套 API 提供了在 Java 程序中調用各種腳本語言引擎的接口。任何實現了這一接口的腳本語言引擎都可以在 Java 程序中被調用。在 Mustang 的發行版本中包括了一個基于 Mozilla Rhino 的 javascript 腳本引擎。
Mozilla Rhino
Rhino 是一個純 Java 的開源的 Javascript 實現。他的名字來源于 O'Reilly 關于 JavaScript 的書的封面:
Rhino 項目可以追朔到 1997 年,當時 Netscape 計劃開發一個純 Java 實現的 Navigator,為此需要一個 Java 實現的 JavaScript —— Javagator。它也就是 Rhino 的前身。起初 Rhino 將 JavaScript 編譯成 Java 的二進制代碼執行,這樣它會有最好的性能。后來由于編譯執行的方式存在垃圾收集的問題并且編譯和裝載過程的開銷過大,不能滿足一些項目的需求,Rhino 提供了解釋執行的方式。隨著 Rhino 開放源代碼,越來越多的用戶在自己的產品中使用了 Rhino,同時也有越來越多的開發者參與了 Rhino 的開發并做出了很大的貢獻。如今 Rhino1.6R2 版本將被包含在 Java SE6 中發行,更多的 Java 開發者將從中獲益。
Rhino 提供了如下功能
支持的腳本語言
在dev.java.net可以找到官方的腳本引擎的實現項目。這一項目基于BSD License ,表示這些腳本引擎的使用將十分自由。目前該項目已對包括 Groovy, JavaScript, Python, Ruby, php 在內的二十多種腳本語言提供了支持。這一支持列表還將不斷擴大。
新聞熱點
疑難解答