和以前的版本相比,Java 2增加了不少令人難忘的特色。特別是Swing提供的用戶界面部件(如表格和樹形控制)以及2-D編程接口、JavaBean支持的增強,使得JDK 1.1看起來像一個古董。遺憾的是,沒有一個浏覽器能夠完全支持Java 2,也就是說,那些令人激動的新功能在浏覽器上無法運行,甚至還沒有一個浏覽器宣布在確定的日期內提供對Java 2的支持。在Internet頁面上也許沒有必要用Java 2,但在LAN環境下不用這些新增功能實在讓人覺得可惜。如果你也有這種感覺,不妨使用Java Plug-in(Java 插件)。
1.基本原理及存在的問題
本來,Applet的概念相當簡單??只要在Web頁面中加入一個< APPLET >標記就可以了。浏覽器一遇到這個標記,就會下載對應的 Applet類文件,並啟動自己的解釋器運行這個Applet。在此過程中浏覽器擔當相當重要的角色,特別是它必需具備運行Java的能力,同時浏覽器的虛擬機也決定了可接受的Java代碼版本。
運用Java插件的基本目標是將顯示Web頁面和運行Java Applet這兩個任務分離,浏覽器的主要任務是負責各種頁面部件(如圖片、文本、Applet等)的布局。這種機制Navigator和IE都早就具備,Netscape稱之為浏覽器插件。
所謂的插件就是一個能夠負責特定頁面區域的代碼模塊。假設某個頁面中含QuickTime電影片斷,浏覽器只需要知道它應該保留的大小,然後就可以將它象圖片或其它頁面元素一樣安排了,頁面中該區域的顯示則由QuickTime插件代碼負責。
可以將Applet與電影片斷同等看待。此時浏覽器只需要知道Applet的顯示區域大小,就可以像對待其它頁面元素一樣對待Applet了。而運行Applet的任務則由Java 插件負責。
在IE中又怎麼辦呢?IE中的ActiveX也具有完全相似特性:浏覽器將頁面中某個區域的控制權交給其它代碼負責。雖然Netscape叫它插件,Microsoft叫它ActiveX控件,兩者名字大不相同,但它們都能夠讓Web浏覽器運行真正的Java 2代碼。
這種方法最大的好處在於,它能夠讓IE和Navigator使用Sun的Java運行時環境,而不再依賴於浏覽器來獲得Java支持,更不必關注浏覽器支持什麼Java版本了。
但這種方法也存在缺點,主要有以下兩個方面:首先,這種運行Applet的方式需要下載和安裝Java 插件;其次,一個簡單的< APPLET >標記已經不再足夠,用插件運行Applet的Web頁面需要更多的HTML代碼。
對於第一個問題,既可以從Sun站點(http://java.sun.com/products/plugin/index.html)事先下載和安裝插件軟件包,如果有Internet連接,也可以讓浏覽器在遇到< EMBED > 或< OBJECT > 標記時自動下載。
標記不同問題稍微復雜一點。雖然Netscape的插件機制和Microsoft的ActiveX技術是非常相似的東西,但在Web頁面中調用它們的方法卻是完全不同的。Navigator用< EMBED >標記引入插件,IE中起類似功能的標記叫< OBJECT >。
如果你熟悉HTML且需要引用Java 2 Applet的頁面不多,可以手工將< EMBED >標記嵌入到< OBJECT >標記對內部,使得頁面在兩個浏覽器下都可以正常顯示。假設要運行的是TestApplet,則通過Java插件運行Applet的HTML代碼類如(也就是說,用下面這些代碼取代原來的< APPLET >標記):
< OBJECT classid=xxx
WIDTH = 350 HEIGHT = 150
codebase="http://java.sun.com/products/plugin
/1.2/jinstall-12-win32.cab#Version=1,2,0,0" >
< PARAM NAME = CODE VALUE = TestApplet >
< PARAM NAME="type" VALUE="application/
x-java-applet;version=1.2" >
< COMMENT >
< EMBED type="application/x-java-applet;version=1.2"
java_CODE = TestApplet WIDTH =
350 HEIGHT = 150
pluginspage="http://java.sun.com/products/plugin/
1.2/plugin-install.html" >< NOEMBED >< /COMMENT >
< /NOEMBED >< /EMBED >
< /OBJECT >
更方便的方法是利用Sun提供的HTML Converter工具,它可以實現< Applet >標記到上述標記的自動轉換。如果頁面數量較多,使用這個工具尤為值得。HTML Converter可在以下地址下載:
http://java.sun.com/products/plugin/1.2/converter.html
2.具體過程示例
下面我們通過實例來說明整個過程。假設有下面這個Applet,它用到了Swing,因而需要Java 2支持:
import java.awt.*;
public class TestApplet extends javax.swing.JApplet {
private Font mFont = new Font("Serif", Font.PLAIN, 64);
public void paint(Graphics g) {
Graphics2D g2 = (Graphics2D)g;
g2.setRenderingHint(RenderingHints.KEY_ANTIALIASING,
RenderingHints.VALUE_ANTIALIAS_ON);
g2.setPaint(new GradientPaint(0, 0, Color.green,
20, 10, Color.blue, true));
Dimension d = getSize();
g2.fillRect(0, 0, d.width, d.height);
g2.setPaint(Color.red);
g2.setFont(mFont);
g2.drawString("ABCDEFG", 20, 84);
}
}
下面這個HTML頁面使用< APPLET >標記引入TestApplet。在浏覽器中該Applet是無法運行的,如果你願意的話,可以用AppletViewer觀察它的運行效果:
< html >
< head >
< /head >
< body >
< applet code=TestApplet width = 350
height = 150 >< /applet >
< /body >
< /html >
接下來工作就是用HTML Converter將< Applet >標記轉換為調用Java 插件的< EMBED >和< OBJECT >標記了。在下載和安裝這個工具之後,輸入命令 java HTMLConverter即可運行它。此時將出現該程序的主窗口,用法很簡單,只需選擇轉換剛創建的文件即可。轉換之後原來的文件將被覆蓋(可在獨立目錄下創建原文件備份)。轉換之後就可以運行Java 插件了。在Web服務器或本地打開轉換後的頁面,如果Java 插件安裝正確,就可以看到Applet的運行。雖然整個過程略顯麻煩,但對於Java 2所提供的許多新特色來說,這種麻煩又微不足道了。