HTML、Swing還是XML,Java客戶端工具選擇?(三)

 Swing存在的問題在於佈署時的速度和兼容性問題。現在,它的一個重大改進解決了這些問題並使Java客戶端應用程序重新成爲一個可行的選擇,CPU的速度在過去2年中翻了一番。在JDK 1.3中,基於Swing的應用程序的運行速度已經非常快了,所需要的內存也相當少。這就使我們在佈署Swing方面還存在着最後一個問題,那就是如何進行佈署,在這裏,我們有三種解決方案可供選擇。

  方案一:Java插件

  基於瀏覽器的Java中最精彩的特性之一是Java插件。對HTML網頁作簡單的修改就能夠消除對瀏覽器JVM的依賴,並使我們可以在Sun的標準JVM中運行Applet。一旦安裝了JRE,Applet就被下載到本地磁盤上,並被放置在高速緩衝區中,再打開帶Applet的HTML網頁的速度就會快許多,原因是所有的東西都是在本地磁盤上的。爲說明其工作原理,我們首先來看看原來的Applet佈署方式,HTML網頁是如何使用插件的,我們假設你已經掌握了HTML和Java Applet的有關知識,並創建瞭如下的網頁:

<HTML>
<HEAD>
<TITLE>My traditional applet page</TITLE>
</HEAD>
<BODY>
<APPLET CODE=HelloWorld.class ARCHIVE=HelloWorld.jar>
Sorry, looks like I bumped into another browser that doesn't support Java applets
</APPLET>
</BODY>

  這種方式的缺點是它依賴瀏覽器JVM來加載和執行HelloWorld類。考慮到市場上存在有多種瀏覽器,它們執行Java的方式各不相同,使得Applet的佈署成爲一件令人恐懼的事。你必須保證在經過測試的JVM中運行Applet。我們不要求瀏覽器運行Java,而要求瀏覽器安裝和運行我們將要在其中運行Applet的JVM。在IE中,我們可以通過使用<OBJECT>標誌來完成這一任務,在其他的瀏覽器中,這一標誌可能會有所不同,例如在Netscape Navigator中是<EMBED>。修改後的網頁如下所示:

<HTML>
<HEAD>
<TITLE>My new applet page</TITLE>
</HEAD>
<BODY>
<OBJECT classid="clsid:8AD9C840-044E-11D1-B3E9-00805F499D93"
width=100% height=100
codebase="./j2re-1_3_0_02-win.exe#Version=1,3,0,2">
<param name="code" value="HelloWorld.class">
<param name="archive" value="HelloWorld.jar">
<param name="cache_archive" value="HelloWorld.jar">
<param name="cache_option" value="Plugin">
</OBJECT>
</BODY>

上面的網頁將使瀏覽器檢查指定ClassID的對象是否已經安裝,如果沒有安裝,則從指定的URL下載JVM,並進行安裝。然後瀏覽器執行插件,並下載和顯示Applet。我們可以通過http://192.9.48.9/products/plugin/1.3/demos/applets/GraphLayout/example1.html中的例子來學習其工作原理。關於Java插件更詳細的資料請參閱Sun公司的網站。

  插件帶來的好處是它可以支持各種操作平臺上的所有瀏覽器,此外,它還提供了一個有保障的執行環境,插件只需要安裝一次,就可以對所有Applet進行緩衝,使再次訪問網站時非常容易。這一方法的一個最大不足之處是,在運行Applet之前,必須下載一個大小爲5MB的插件,這在低速的互聯網連接上尤其令人不能容忍。事實上,如果你的Applet只是一個大小爲5KB的網頁頂端的一個鐘錶,爲此而下載一個5MB的插件是得不償失的。

  方案二:使用Java Web Start

  佈署Java應用軟件的另一種方式是Sun公司的Java Web Start,它在本質上與Java插件相似,只是在第一個步驟上有明顯的不同。Java Web Start要求在每臺臺式機上進行人工安裝,這一點遠不如插件的自動安裝。Java Web Start的安裝相當簡單,一旦安裝完畢,依賴Java Web Start的應用程序就可以被下載和安裝。就象插件一樣,應用程序也是通過互聯網發行的。

  根據我的經驗,Java插件在安裝上與Java Web Start相似,但比Java Web Start的用戶親和性更好,原因是它要求的管理員或用戶干預更少。也有一些公司創建了自己的功能類似的佈署工具,這些工具有時候比Java Web Start還好用。例如,Sitraka公司的DeployDirector在性能上優於Java Web Start,並且安裝也更簡單。

  總而言之,通過使用Java插件和Java Web Start,基於Swing的應用程序的佈署比原來要簡單和安全許多,但仍然比點擊一個只有JavaScript的HTML網頁要複雜得多。而且有些用戶可能對在本地機器上安裝JVM所需要完成的步驟有被脅迫的感覺,或者沒有發現Swing所帶來的好處,但如果需要一個動態GUI用戶界面,使用戶享有更多地靈活性,沒有一種方法比採用Swing Applet更好了。

  此外,如果整個開發都是基於Java的,在HTML請求數據和應用程序內部結構之間就無需進行映射。RMI可以提供快速的雙向網絡調用,它可以回叫客戶端應用程序,提醒用戶根據服務器的要求更新顯示內容。

  方案三、以純HTML方式佈署Java Swing

  儘管HTML和Swing在開發客戶端應用軟件方面各有利弊,但很明顯的是,理想的解決方案應該是二者都支持。然而,由於這二種技術在本質上具有較大的區別,在一個應用程序中只能採用二者之一。儘管大多數用戶都會喜歡基於Swing的快速交互客戶端應用程序,但下載並在客戶端系統上安裝JRE並非總是一個很好的選擇。有時候,安全和防火牆方面的限制使得RMI很難在網絡上運行。在這種情況下,我們需要的是一種可以在所有系統上運行的交互式客戶端應用程序,即使我們能夠使用的客戶端應用程序只有瀏覽器。CreamTec公司的WebCream可以充當Swing-HTML之間的橋樑。

  WebCream是一種Java工具,它可以爲基於GUI的Java應用程序和Applet提供自動的互聯網訪問,可以使我們利用AWT和Swing實現GUI前端應用程序,同時,可以自動地使HTML訪問該應用程序。在一定程度上,可以把WebCream看作是動態的Java-to-HTML轉換工具,它可以即時地把Java中的框架和對話轉換爲HTML。然後,將Webpage行爲模仿爲GUI事件,以保持應用程序原有的邏輯。WebCream不要求對現有的表格和業務邏輯進行修改,也無需學習任何新的API,它旨在發行現有的應用程序和applets。WebCream只是設置互聯網服務器和描述應用程序屬性文件的工具,它的標準版具有全部的功能,而且是免費的。WebCream還無需在客戶端的機器上進行安裝,甚至無需瀏覽器支持Java,因爲瀏覽器接收到的全部都是HTML代碼。

  據所我知,只有WebCream才具有這樣的功能,沒有其他的工具可以提供相似的解決方案。但也有一些產品採用不同的方法使原本不是爲互聯網設計的應用程序具有互聯網訪問功能。Windows 2000中有一種內置的終端服務器(Terminal Server)服務,可以使用戶只要在本地系統登錄就可以通過遠程方式訪問服務器。象Citrix系統公司的MetaFrame那樣,終端服務器向遠程終端發送一個視頻流,併爲在服務器上運行的應用程序模仿用戶的行爲。它在高速網絡上可以很好地運行,在低速網絡上的表現則不盡人意。它在Java應用程序方面還有問題,因爲它們不使用本機的繪製和滾動例程。終端服務器的可伸縮性還不太強,原因是每個用戶都在運行它的一個拷貝。由WebCream轉換過的應用程序在形式上與在本地系統上運行的應用程序有所不同,但它的性能更好,因爲只有用戶在提交一個頁面時,纔會與服務器進行連接。所有由具有WebCream功能的應用程序服務的用戶可以共享一個JVM,因此也可以大大降低資源的消耗。

  爲了演示WebCream的工作原理,下面的2個圖顯示了使用WebCream時,一個樣例GUI應用程序在HTML前端應用程序中是如何運行的。圖1是一個正在運行的GUI應用程序(源代碼),圖2是WebCream管理着同一個應用程序,窗口表示瀏覽器中的網頁。

 
jt-2001-7-3-1.gif
(圖1:例子中的GUI程序)
              
jt-2001-7-3-2.gif
(圖2:使用了WebCream後的GUI)


  Swing-HTML轉換方式並不適合所有的用戶,WebCream在一定程度上允許通過HTML訪問前端應用而提高基於Swing的前端應用程序的價值。有95%的應用程序可以無縫地轉換成HTML,另有5%的程序則需要改變數據的表達和處理方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章