隨筆-62  評論-29  文章-0  trackbacks-0
          Java Web Start 是幫助客戶機(jī)端應(yīng)用程序開發(fā)的一個(gè)新技術(shù),它的獨(dú)特之處在于將您從關(guān)心客戶機(jī)是如何啟動的(從 Web 瀏覽器或是桌面)中解放出來。另外,該技術(shù)提供了一個(gè)使 Web 服務(wù)器能獨(dú)立的分發(fā)和更新客戶機(jī)代碼的集合部署方案。軟件工程師 Steve Kim 介紹了該新技術(shù)(該技術(shù)預(yù)定將集成進(jìn)Java 1.4 的最終發(fā)行版),并從開發(fā)者和用戶的角度進(jìn)行了描述。您可以在 討論論壇與作者和其他讀者分享您對這篇文章的看法。

          在現(xiàn)今的不斷發(fā)展的軟件業(yè)市場,用戶強(qiáng)烈要求客戶機(jī)應(yīng)用程序不但能運(yùn)行在臺式機(jī)環(huán)境,還能運(yùn)行在因特網(wǎng)。用戶希望他們從基于 Web 的應(yīng)用程序獲得與從臺式機(jī)獲得的相同的功能和支持,而且最好是用瘦客戶機(jī)接口打包。目前,最通用的解決方案是開發(fā)兩個(gè)獨(dú)立的 Java 應(yīng)用程序:一個(gè)作為臺式機(jī)應(yīng)用程序執(zhí)行,另一個(gè)模仿臺式機(jī)應(yīng)用程序的多數(shù)功能,但是通過 Web 訪問。這對開發(fā)者是個(gè)負(fù)擔(dān),開發(fā)者要寫兩個(gè)獨(dú)立的在不同的執(zhí)行環(huán)境執(zhí)行相同的功能的應(yīng)用程序,然而對軟件公司也是個(gè)財(cái)政負(fù)擔(dān),軟件公司被迫為兩個(gè)獨(dú)立的應(yīng)用程序提供支持。為緩解該問題,Sun Microsystems 引進(jìn)了 Java Web Start,它是個(gè)使 Java 應(yīng)用程序可以從臺式機(jī)或 Web 頁面啟動的客戶機(jī)端技術(shù)。這消除了為 Web 應(yīng)用程序開發(fā) Java 支持的需要,而且還提供了一個(gè)有效方式來升級、維護(hù)和管理任何通用的 Web 服務(wù)器都支持的客戶端的 Java 應(yīng)用程序。

          什么是 Java Web Start?

          Java Web Start 是一個(gè)軟件技術(shù),它包含了 applet 的可移植性、Servlet 和 JavaServer Pages (JSP)的可維護(hù)性以及象 XML 和 HTML 這樣的標(biāo)記語言的簡易性。它是基于 Java 的應(yīng)用程序,允許從標(biāo)準(zhǔn)的 Web 服務(wù)器啟動、部署和更新功能完全的 Java 2 客戶機(jī)應(yīng)用程序。在第一次啟動 Java Web Start 時(shí),用戶可以從 Web 下載新的客戶機(jī)應(yīng)用程序;之后這些應(yīng)用程序可以通過 Web 頁面的鏈接或(Windows 中的)桌面圖標(biāo)或“開始”菜單初始化。應(yīng)用程序在 Java Web Start 下快速初始化,被高速緩存在客戶機(jī),并且可以遠(yuǎn)程的離線啟動。另外,因?yàn)?Java Web Start 是從 Java 2 技術(shù)建立起來的,所以它繼承了 Java 平臺的完整的安全性體系結(jié)構(gòu)。

          由于 Java Web Start 自身是一個(gè) Java 應(yīng)用程序,所以該軟件是平臺獨(dú)立的,并且支持 Java 2 平臺的任何客戶機(jī)系統(tǒng)都支持該軟件。當(dāng)客戶機(jī)應(yīng)用程序啟動時(shí),Java Web Start 自動執(zhí)行更新,在從原來的高速緩存(倘若存在高速緩存)裝入應(yīng)用程序的同時(shí),從 Web 下載最新的代碼。Java Web Start 還提供了一個(gè) Java 應(yīng)用程序管理器(Java Application Manager)實(shí)用程序,既提供了多種選項(xiàng),如清除下載的應(yīng)用程序的高速緩存、指定多種 JRE 的使用、設(shè)置 HTTP 代理,還允許最終用戶組織他們的 Java 應(yīng)用程序。





          回頁首


          Java Web Start 對 Java 插件

          Java Web Start 和 Java 插件的一個(gè)共同作用是:允許 Java 程序從任何地方、在任何平臺安全運(yùn)行。兩種 Java 技術(shù)都提供了可以啟動和執(zhí)行 Java 程序的“沙箱(sandbox)”安全環(huán)境,還具有高速緩存應(yīng)用程序和指定使用的 JRE 的能力。Java Web Start 和 Java 插件的根本不同是 Java 插件限于在 Web 瀏覽器環(huán)境中運(yùn)行的 Java applet。Java 插件嚴(yán)重的依賴于 Web 瀏覽器的 JRE,并且如果沒有瀏覽器就不能運(yùn)行。另一方面,Java Web Start 可以在 Web 頁面單擊鏈接或是單擊 Java 應(yīng)用程序管理器來啟動 Java 應(yīng)用程序。在 Windows 操作系統(tǒng)中,用戶可以從開始菜單或是只要雙擊桌面圖標(biāo)來啟動應(yīng)用程序。如果瀏覽器窗口被關(guān)閉,從 Web 瀏覽器啟動的客戶機(jī)應(yīng)用程序不會受到影響。

          盡管 Java Web Start 確實(shí)支持 Java applet,而且確實(shí)包含內(nèi)置的 Appletviewer,但這個(gè)技術(shù)的最初目的是啟動和部署 Java 客戶機(jī)應(yīng)用程序。某些約束,如 applet 的策略文件不受支持。





          回頁首


          用戶觀點(diǎn)的 Java Web Start

          Java Web Start 不僅允許開發(fā)者開發(fā)可從 Web 頁面啟動和執(zhí)行的應(yīng)用程序(不只是 applet),還強(qiáng)調(diào)了無需任何用戶交互就可以為現(xiàn)存的客戶機(jī)代碼提供透明更新的部署方案。為幫助您理解這個(gè)過程、幫助您決定是否為與 Java Web Start 的兼容性而開發(fā)自己的應(yīng)用程序,我們將從用戶的觀點(diǎn)來看這個(gè)產(chǎn)品。我將從兩個(gè)基本的用戶場景(安裝 Java Web Start 和從使用 Java Web Start 的 Web 下載和啟動應(yīng)用程序)的基本解釋開始。

          首次安裝 Java Web Start

          Java 插件無需用戶在客戶機(jī)安裝任何的應(yīng)用程序,與 Java 插件不同,Java Web Start 必須要安裝在每臺用于從 Web 來啟動 Java 應(yīng)用程序的客戶機(jī)。當(dāng)用戶試圖用 Java Web Start 啟動一個(gè)基于 Web 的應(yīng)用程序時(shí),Web 瀏覽器將啟動 Java Web Start 從而開始下載適當(dāng)?shù)奈募?/p>

          如果 Java Web Start 安裝在本地機(jī)的話,那么需要的應(yīng)用程序?qū)⒄5膯雍瓦M(jìn)行。另一方面,如果 Java Web Start 還沒安裝,用戶將被提示要下載該程序。一旦用戶同意下載 Java Web Start 并且已經(jīng)下載了該文件,用戶就必須運(yùn)行程序來安裝 Java Web Start,如圖 1 所示。


          圖 1. 安裝 Java Web Start
          安裝 Java Web Start

          在安裝過程中,Java Web Start 安裝程序?qū)⑴袛嘣诳蛻魴C(jī)上是否安裝了 Java 2 環(huán)境。如果未安裝,將出現(xiàn)一個(gè)安裝對話框,如圖 2 所示。


          圖 2. Java Web Start 搜索 Java 2 環(huán)境
          搜索 Java 2 環(huán)境

          一旦裝好了 Java Web Start,就必須關(guān)閉所有的打開的 Web 瀏覽器。新的 MIME 標(biāo)記(帶有 jnlp 擴(kuò)展名)是為 Web 瀏覽器定義的,用于 Web 瀏覽器啟動自身(Web 服務(wù)器)和 Java Web Start 之間的聯(lián)系。(JNLP 是 Java Network Launching Protocol 的首字母縮略字。JNLP 文件確定哪些 JAR 文件和資源有助于客戶端的 Java 應(yīng)用程序。)一旦 Web 瀏覽器被關(guān)閉并重新啟動,用戶可以再次單擊相同的鏈接來啟動所要的應(yīng)用程序。Web 瀏覽器然后將與 Java Web Start 聯(lián)系,并且應(yīng)用程序?qū)㈤_始啟動過程。

          “Developer's Guide for Java Web Start” (請參閱 參考資料)包含能夠查出本地是否安裝了 Java Web Start 的 JavaScript 和 Visual Basic 腳本。

          用 Java Web Start 啟動應(yīng)用程序

          當(dāng)用戶首次單擊一個(gè)鏈接來啟動一個(gè)客戶端的 Java 應(yīng)用程序時(shí),發(fā)生下面的過程:

          • Web 瀏覽器被指示運(yùn)行 Java Web Start。
          • Java Web Start 以啟動閃屏開始
          • 然后 Java Web Start 與指定的 Web 服務(wù)器聯(lián)系,并且確定是否為所要的 Java 應(yīng)用程序下載了所有的文件。
          • 把適當(dāng)?shù)奈募螺d到本地機(jī)。
          • Java Web Start 運(yùn)行下載的應(yīng)用程序。

          在整個(gè)安裝和啟動過程中,Java Web Start 與 Java Web Start 應(yīng)用程序管理器一起提供了一個(gè)外觀和感覺一致的界面,同時(shí)還向用戶提供了反饋。圖 3 表示了當(dāng) Java Web Start 首次試圖啟動一個(gè)客戶機(jī) Java 應(yīng)用程序時(shí)出現(xiàn)的窗口。


          圖 3. Java Web Start 下載客戶機(jī) JAR 文件

          Java Web Start 把一個(gè)應(yīng)用程序下載到了本地機(jī)之后,客戶機(jī)程序就被執(zhí)行了。將來,當(dāng)程序再次從 Java Web Start 啟動時(shí),Java Web Start 將試圖判定客戶機(jī)是否有應(yīng)用程序的最新版本。在此過程中,用戶將可以看到一個(gè)與圖 4 所示的相似的窗口。


          圖 4. Java Web Start 檢查應(yīng)用程序的版本

          從用戶的觀點(diǎn)來看,該窗口提供了該 Java 應(yīng)用程序是在啟動過程還是在更新過程的可視化反饋。另外,進(jìn)度條和文本反饋不僅通知用戶每個(gè)過程所需的時(shí)間,還讓用戶可以了解更新或啟動什么時(shí)候?qū)⑼瓿伞_@也許是該產(chǎn)品的最有用的特性之一,它可以確保在應(yīng)用程序的啟動過程的每一步都通知了用戶正在發(fā)生什么。





          回頁首


          圖形用戶界面(GUI)

          應(yīng)用程序管理器的 GUI (圖形用戶界面)提供了一個(gè)簡單的卻合理的界面,該界面允許用戶在啟動應(yīng)用程序時(shí)可以指定多種的選項(xiàng)。每次啟動應(yīng)用程序管理器時(shí),出現(xiàn)一個(gè)閃屏,如圖 5 所示。


          圖 5. 應(yīng)用程序管理器閃屏
          應(yīng)用程序管理器閃屏

          一旦閃屏消失,應(yīng)用程序管理器的主窗口就顯示出來,如圖 6 所示。


          圖 6. 應(yīng)用程序管理器的主窗口
          應(yīng)用程序管理器的主窗口

          在 Applications 框中,可以看到和啟動所有的從 Java Web Start 啟動的應(yīng)用程序。在下面的框中,提供了關(guān)于選中的 Java 應(yīng)用程序的附加信息(在圖 6 中,即為 Draw 4),如供應(yīng)商、可以獲得關(guān)于該應(yīng)用程序的更多信息的主頁以及程序的描述。這條信息是直接從該應(yīng)用程序的 JNLP 文件(稍后有更多關(guān)于 JNLP 的介紹)派生的。

          在 File Preferences,有讓用戶調(diào)整和校準(zhǔn)的多種設(shè)置。盡管大多數(shù)設(shè)置已經(jīng)由 Java Web Start 自動配置了,但仍然允許用戶覆蓋不同的設(shè)置,如代理設(shè)置,如下面的圖 7 所示。


          圖 7. 應(yīng)用程序管理器的 Preferences 選項(xiàng)卡
          應(yīng)用程序管理器的Preferences 選項(xiàng)卡

          用戶還可以指定當(dāng)啟動應(yīng)用程序時(shí)使用 JRE 的什么版本,如圖 8 所示。


          圖 8. 指定 JRE
          指定 JRE

          本質(zhì)上,應(yīng)用程序管理器的目的在于為管理所有的遵照 Java Web Start 指導(dǎo)方針和策略的應(yīng)用程序提供了一個(gè)統(tǒng)一的實(shí)用程序。另外,應(yīng)用程序管理器允許有經(jīng)驗(yàn)的用戶配置一些應(yīng)用程序設(shè)置。這樣免除了一些開發(fā)者將在其它方面需要做的工作,比如寫腳本或批處理文件來啟動或配置應(yīng)用程序。要注意應(yīng)用程序管理器僅對為 Java 2 平臺編寫的而且與 Java Web Start 兼容的應(yīng)用程序有用,注意到這一點(diǎn)是很重要的。實(shí)用程序不能查出駐留在本地機(jī)的其它 Java 應(yīng)用程序。

          要考慮的問題

          當(dāng)選擇是否為與 Java Web Start 兼容而開發(fā)應(yīng)用程序時(shí),明智的做法是對用戶體驗(yàn)做全面考慮。

          • Java Web Start 必須安裝在每臺從 Web 或從 Java 應(yīng)用程序管理器啟動客戶機(jī) Java 應(yīng)用程序的機(jī)器上。所以,雖然客戶機(jī) Java 應(yīng)用程序可以從 Web 頁面啟動,但如果最初沒有 Java Web Start 安裝在本地機(jī)上的話,該應(yīng)用程序本身是不能啟動的;這樣 Web 瀏覽器僅提供啟動程序的方便的鏈接 ― 不多不少。
          • Java Web Start 僅對正確打包的并且依照 Java Web Start 指導(dǎo)方針的應(yīng)用程序有用。另外,需要 Web 服務(wù)器,而且 Web 服務(wù)器必須正確的配置來解釋 所有的JNLP 和 MIME 標(biāo)記。所以,除非下載的或是從 Web 啟動的所有的客戶機(jī) Java 應(yīng)用程序滿足了這些要求,每個(gè)客戶機(jī) Java 應(yīng)用程序才能從 Java Web Start 被啟動和被管理的。
          • 在用戶中也許有點(diǎn)關(guān)于 Java Web Start 和 Java 插件的應(yīng)用程序與 applet 間的不同之處的困惑。用戶可能理解或還不理解為什么 Java Web Start 能管理和啟動許多的客戶機(jī) Java 應(yīng)用程序,卻不能與以 Java 插件運(yùn)行的 Java Applets 建立任何連接,盡管事實(shí)是任一程序都可以從 Web 瀏覽器啟動。
          • 對于被要求去為僅僅一個(gè)客戶機(jī)應(yīng)用程序而下載 Java Web Start 的用戶來說,可能又認(rèn)為對一個(gè)客戶機(jī) Java 應(yīng)用程序的執(zhí)行來說,Java Web Start 應(yīng)用程序管理器的特性很累贅,安裝過程“麻煩”太多。
          • Java Web Start 僅能用于為 Java 2 平臺編寫的客戶機(jī) Java 應(yīng)用程序。
          • 當(dāng)前,Java Web Start 可在 Windows 95/98/NT/2000、Linux 和 Solaris 操作系統(tǒng)上執(zhí)行。




          回頁首


          為 Java Web Start 做開發(fā)

          從開發(fā)的觀點(diǎn),您應(yīng)該能象為常規(guī)的客戶端應(yīng)用程序一樣能為與 Java Web Start 的兼容性編寫和設(shè)計(jì)代碼。您應(yīng)該相對的不用擔(dān)心更新現(xiàn)存的客戶機(jī)代碼所需的打包問題和變通技術(shù)。下面是您在開發(fā)和部署 Java Web Start 的客戶端 Java 應(yīng)用程序時(shí)需要依照的一些簡單的規(guī)則:

          • 應(yīng)用程序可以作為針對 Java 2 平臺的獨(dú)立的應(yīng)用程序正常的編寫。
          • 如果您的應(yīng)用程序需要訪問本地系統(tǒng),那么 JAR 文件中的每個(gè)條目都必須被簽名。
          • 應(yīng)用程序的所有的文件必須保存在一個(gè) JAR 文件集中,該文件集包含如圖像和聲音文件等資源。
          • 裝入資源(如圖像)的任何訪問都必須使用有類裝載器的 getResource 方法。請參閱下面的使用 getResource 方法示例的清單 1。

          清單 1. 使用 ClassLoader 對象從 JAR 文件裝入資源
          //Obtain the current classloader
                      ClassLoader classLoader = this.getClass().getClassLoader();
                      //Load the company logo image
                      Image companyLogo = classLoader.getResource("images/companyLogo.gif");
                      

          更新應(yīng)用程序代碼

          從 Web 服務(wù)器首次下載一個(gè)應(yīng)用程序時(shí),應(yīng)用程序的所有的相關(guān)的 JAR 文件被下載到了本地機(jī)。Java Web Start 將自動決定該把這些文件下載到何處,這是因?yàn)槿笔〉陌踩詤f(xié)議(如本地磁盤存取)在起作用。下面將進(jìn)一步討論安全性。

          從應(yīng)用程序開發(fā)和維護(hù)的觀點(diǎn)來看,Java Web Start 使更新應(yīng)用程序代碼很容易。因?yàn)橄螺d的應(yīng)用程序的所有文件必須包含在客戶機(jī)的 JAR 文件集中,您只需更新存儲在 Web 服務(wù)器的 JAR 文件集。Java Web Start 將根據(jù)下面將討論的版本編號方案來決定當(dāng)應(yīng)用程序最初被啟動時(shí)需要下載和更新客戶機(jī)的哪些文件和資源。每次用戶啟動一個(gè)應(yīng)用程序時(shí),Java Web Start 將與包含 JAR 文件集的 Web 服務(wù)器連接,并將下載適當(dāng)?shù)奈募W⒁饪蛻魴C(jī)可以下載的資源僅為 JAR 文件、圖像和 JNLP 文件。

          Java Web Start 使用 HTTP 請求來從 Web 服務(wù)器獲得資源文件,并且允許客戶機(jī)端 Java 應(yīng)用程序從代理服務(wù)器或防火墻后執(zhí)行。最初,Java Web Start 將既使用通用的代理自動配置腳本也試著檢測本地機(jī)的缺省 Web 瀏覽器中定義的代理設(shè)置。如果需要附加信息,可用應(yīng)用程序管理器使用 Preferences 部分來指定端口和代理。





          回頁首


          Java Web Start 的核心:JNLP

          為使 Java 應(yīng)用程序能用 Java Web Start 執(zhí)行,您必須為應(yīng)用程序創(chuàng)建一個(gè) Java 網(wǎng)絡(luò)語言協(xié)議(Java Networking Language Protocol,JNLP)文件。JNLP 是一個(gè)為應(yīng)用程序提供基本的元素和描述的 XML 文件。JNLP 符合規(guī)范號為 JSR 000056(請參閱 參考資料)的 Java Community Process (JCP)。

          JNLP 文件的目的如下:

          • 指定從 Web 服務(wù)器下載的 JAR 文件
          • 提供其它的可能的包需要
          • 指定系統(tǒng)屬性
          • 考慮到任何必要的運(yùn)行時(shí)參數(shù)
          • 指定使用哪個(gè)版本的 Java 2 平臺

          JNLP 文件的一個(gè)示例

          JNLP 文件以一種與 Web 瀏覽器相似的方式(僅用 URL 而不是特定的文件名)來獲得并定位文件。清單 2 表示了 JNLP 文件的一個(gè)示例。


          清單 2. JNLP 文件的一個(gè)示例:clientApp.jnlp
          <?xml version="1.0" encoding="UTF-8"?>
                      <jnlp codebase=http://www.companySite.com/javaApp>
                      <href="clientApp.jnlp">
                      <information>
                      <title>This is my company's Java client application</title>
                      <vendor>Company name</vendor>
                      <icon href="companyLogo.gif"/>
                      <homepage ref="reference/tips.html">
                      <offline-allowed/>
                      </information>
                      <resources>
                      <j2se version=1.3/>
                      <jar href="companySong.jar" part="music" download="lazy"/>
                      </resources>
                      <resources os="Windows"/>
                      <nativelib="windowIconsForWindowOS.jar" part="windowIcons"
                      download="eager"/>
                      <application-desc main-class="com.company.ui.Client"/>
                      <security>
                      <all-permissions/>
                      </security>
                      </jnlp>
                      

          清單 2 的注釋

          接下來對 JNLP 文件的示例的評述也許在您創(chuàng)建自己的文件時(shí)對您有所幫助:

          • 第一行,您可以看到文件的編碼是 UTF-8 字符編碼。所以,當(dāng)編輯 JNLP 文件時(shí),最終文件要用與 JDK 一起提供的 native2ascii工具轉(zhuǎn)換來確保文件的編碼正確。
          • jnlp codebase 屬性用于在 JNLP 文件中指定所有的相關(guān) URL。 href 屬性設(shè)置(要求的)是為了讓應(yīng)用程序并入 Java Web Start 應(yīng)用程序管理器。
          • information 標(biāo)記(如 title、vendor 等)用于提供來自 Java Web Start 應(yīng)用程序管理器的關(guān)于應(yīng)用程序的附加信息。 homepage ref 屬性是專門用于指向 Web URL 從而用戶可以去提供了關(guān)于應(yīng)用程序的更多的信息的 Web 頁面。最有趣的 information 標(biāo)記是 offline-allowed 屬性;該屬性決定了客戶機(jī) Java 應(yīng)用程序是否能離線啟動。當(dāng)離線運(yùn)行客戶機(jī) Java 應(yīng)用程序時(shí),Java Web Start 將繼續(xù)判定來自 Web 服務(wù)器的最新的文件;在多數(shù)情況下,這個(gè)方案將引起快速的超時(shí)(因?yàn)槲恢帽恢付ㄒx線啟動),并且應(yīng)用程序從本地高速緩存啟動。
          • resource 標(biāo)記考慮到 JNLP 文件指定應(yīng)用程序使用哪些 JAR 文件和如何下載 JAR 文件;即,是急切的還是不緊不慢的。這個(gè)特性在當(dāng)用戶要下載大量的文件而對用戶來說不是所有的文件都是客戶機(jī)執(zhí)行所需要的時(shí)是非常有幫助的。缺省的,多數(shù)資源是急切的下載的,在這樣情況下,JAR 文件和資源在應(yīng)用程序啟動前被下載。不緊不慢的下載的資源只有當(dāng) Java 虛擬機(jī)(JVM)觸發(fā)從應(yīng)用程序載入資源或文件時(shí)才被下載。不緊不慢的下載資源的一個(gè)示例是客戶機(jī)的幫助文件;考慮到了客戶機(jī)的更快的啟動和執(zhí)行,只有在用戶實(shí)際上向客戶機(jī)請求幫助文件時(shí),才會下載這些文件。然而,一旦用戶請求了一個(gè)幫助文件,在請求過程中適當(dāng)?shù)?JAR 就會被下載,并伴有一個(gè)通知用戶大致的下載時(shí)間的窗口。
          • JNLP 文件中最后一個(gè)有趣的標(biāo)記是 security 屬性。缺省的,任何從 Java Web Start 客戶機(jī)啟動的 Java 應(yīng)用程序在一個(gè)安全的、受限制的環(huán)境執(zhí)行,該環(huán)境中不允許進(jìn)行本地文件訪問、與其它計(jì)算機(jī)的網(wǎng)絡(luò)連接等等。然而,對于要對客戶機(jī)和網(wǎng)絡(luò)可以完全訪問的特性豐富的客戶機(jī)來說, all-permissions 值是用于給予客戶機(jī)完全訪問的權(quán)限的。為具有對本地機(jī)的完全訪問,Java 應(yīng)用程序所使用和裝入的所有 JAR 文件和資源必須被數(shù)字簽名。安全性將在下面將進(jìn)一步討論。




          回頁首


          JNLP 和 WAR 文件

          為與應(yīng)用程序相關(guān)的 JNLP 文件和 JAR 文件提供更加方便有效的打包方案,Java Web Start 使 Web 壓縮文件(WAR)的分發(fā)成為可能。WAR 文件是一個(gè)目錄結(jié)構(gòu),它包含了一個(gè)與 JNLP 文件和 JAR 文件一起打包的 servlet,從而使整個(gè)包能夠方便的在 Web 服務(wù)器上部署。該 servlet 自身被打包在 jnlp-servlet.jar 文件里,包里還有 JnlpDownloadServlet 類作為主要的執(zhí)行 Java 類,這個(gè)類將負(fù)責(zé)不同的任務(wù),如:

          • 生成 JARDiff 文件
          • 根據(jù) WAR 文件中的每個(gè)文件或每個(gè)目錄進(jìn)行版本編號
          • 支持 JNLP 文件中定義的下載協(xié)議
          • 自動安裝 URL 到 JNLP 文件,從而免除對開發(fā)者要進(jìn)行硬編碼 URL 的要求。

          為了從 Java Web Start 啟動應(yīng)用程序,把應(yīng)用程序和 WAR 文件打包在一起并非必需。然而,WAR 文件的加入可以改善存儲在 Web 服務(wù)器的文件的管理和升級。WAR 文件的主題對于本文的范圍來講實(shí)在是太冗長了。請參閱 參考資料來獲得與附加信息的聯(lián)系。





          回頁首


          Java Web Start 中的版本變化

          到目前為止,我們已經(jīng)討論了想要實(shí)施 Java Web Start 的開發(fā)者和用戶所需的整體的部署和管理技術(shù)。在我們深入前,我要概括一下到目前為止我所講到的部署的步驟。

          • 應(yīng)用程序所用的文件存儲在 JAR 文件。
          • 必須創(chuàng)建一個(gè) JNLP 來通知 Java Web Start 應(yīng)用程序使用哪些 JAR 文件、如何下載必要的文件等。
          • 一個(gè)標(biāo)準(zhǔn)的 Web 服務(wù)器被配置來接受被 Java Web Start 理解的 MIME 類型。
          • JAR 文件放在了 Web 服務(wù)器上。
          • 用戶需要下載和安裝 Java Web Start(僅一次)。
          • 用戶首次運(yùn)行應(yīng)用程序;JAR 文件被下載并執(zhí)行。
          • 用戶可以再次運(yùn)行應(yīng)用程序,從 Java Web Start 應(yīng)用程序管理器或 Web 頁面啟動。Java Web Start 將下載需要更新的全部文件,并且然后將啟動應(yīng)用程序。

          從技術(shù)角度來說,這個(gè)總結(jié)可能會引發(fā)問題:Java Web Startf 是如何決定哪些文件是有必要更新的呢?答案很簡單:JNLP 文件。一個(gè)有版本標(biāo)識的唯一的 URL與每個(gè) JNLP 文件中定義的資源相關(guān)聯(lián)。如清單 3 所示。


          清單 3.JNLP文件中的一個(gè)基于版本的 JAR 文件的示例
          <jar href=http://www.companySite.com/javaApp/imageFiles.jar
                      version="1.1+">
                      

          當(dāng)啟動了一個(gè)應(yīng)用程序時(shí),Java Web Start 檢查 JNLP 文件并創(chuàng)建一個(gè)有 URL 和版本標(biāo)識的 HTTP GET 請求。如果沒有 version 屬性,那么 Java Web Start 就只是創(chuàng)建一個(gè) JAR 文件的 HTTP GET 請求。Java Web Start 檢查 Web 服務(wù)器的響應(yīng)狀態(tài)代碼和 MIME 類型來決定此 JAR 文件是否有更新的版本。

          JNLP 文件還允許使用 JARDiff 實(shí)用程序來遞增的更新 JAR 文件。 JARDiff 實(shí)用程序能只下載 JAR 文件中的特定文件(不是整個(gè) JAR 文件本身),這樣使下載更快。請參閱 參考資料來獲得關(guān)于決定 JNLP 文件配置的更多信息。





          回頁首


          安全性

          也許在決定是否為了與 Java Web Start 兼容而開發(fā)應(yīng)用程序時(shí),需要考慮的最重要的問題就是安全性。Java Web Start 允許客戶端 Java 應(yīng)用程序訪問各種本地機(jī)資源,如文件訪問、剪貼板訪問等。源自 Java 2 平臺,該產(chǎn)品繼承了該平臺的安全性體系結(jié)構(gòu)。如前面提到的,在 JNLP 文件中定義的 security 屬性決定了當(dāng)應(yīng)用程序通過 Java Web Start 啟動時(shí)所能有的安全性級別。缺省的,使用受限環(huán)境,為應(yīng)用程序授權(quán)對網(wǎng)絡(luò)和本地機(jī)的有限的訪問。如同使用 applet 沙箱(sandbox),這樣可以保證惡意的應(yīng)用程序不能造成任何破壞。

          Java Web Start 的安全性的另一重要元素是數(shù)字簽名的使用。當(dāng)啟動或更新一個(gè)應(yīng)用程序時(shí),它的 JAR 文件被下載到客戶機(jī)。Java Web Start 用那些文件中的數(shù)字編碼來判定在對文件初始簽名之后,是否有 JAR 文件已經(jīng)被修改或改變。如果有不一致的或是文件尚未被簽名,應(yīng)用程序就不能從 Java Web Start 啟動。正確簽名的應(yīng)用程序可以訪問本地機(jī)。

          用戶授權(quán)安全性

          當(dāng)運(yùn)行要對本地機(jī)無限制訪問的應(yīng)用程序時(shí),用戶最初將看到一個(gè)對話框,該對話框說明了應(yīng)用程序的出處或供應(yīng)商,并且允許用戶給應(yīng)用程序授予額外的權(quán)限。此外,當(dāng)應(yīng)用程序要求使用本地機(jī)的資源并且還沒有被簽名的 JAR 文件時(shí),Java Web Start 將允許用戶通過一個(gè) Security Advisory 對話框顯式的授予應(yīng)用程序訪問權(quán)限。例如,如果客戶機(jī) Java 應(yīng)用程序需要能把信息粘貼到 Windows 操作系統(tǒng)剪貼板工具,將出現(xiàn)一個(gè)與圖 9 相似的對話框。


          圖 9. 應(yīng)用程序試圖訪問剪貼板的 Security Advisory 對話框
          SecurityAdvisory 對話框 1

          當(dāng)應(yīng)用程序試圖訪問客戶機(jī)的本地資源(如文件系統(tǒng))時(shí),將出現(xiàn)另外的對話框窗口,如圖 10 所示。


          圖 10. 應(yīng)用程序試圖訪問文件系統(tǒng)時(shí)的 Security Advisory 對話框
          Security Advisory 對話框 2

          用戶可以在以下方面授予應(yīng)用程序?qū)Ρ镜貦C(jī)的訪問權(quán)限:

          • 在本地機(jī)存儲應(yīng)用程序的當(dāng)前狀態(tài)
          • 查看本地文件的內(nèi)容
          • 保存文件到本地機(jī)
          • 本地機(jī)打開文件
          • 在本地機(jī)對隨機(jī)存取文件讀/寫
          • 從本地機(jī)打印

          JNLP API 庫中的很多的類允許開發(fā)者在不可靠的環(huán)境使用系統(tǒng)的資源,由用戶來負(fù)責(zé)決定操作是否是允許的。





          回頁首


          結(jié)論

          Java Web Start 提供一個(gè)創(chuàng)造性的解決方案來開發(fā)和部署客戶機(jī)端的 Java 應(yīng)用程序。呈現(xiàn)給用戶啟動、更新和管理 Java 應(yīng)用程序的很多種的選項(xiàng)。Java 開發(fā)者獲得了設(shè)計(jì)軟件的自由,無須過多的關(guān)注代碼的修訂、更新和分布。盡管這是個(gè)新技術(shù),但 Java Web Start 是定義工業(yè)標(biāo)準(zhǔn)的一個(gè)嘗試。偕同已被證明的 Java 2 安全性體系結(jié)構(gòu)中的基礎(chǔ),Java Web Start 有潛力為從 Web 或桌面啟動和部署的 Java 應(yīng)用程序建立一個(gè)通用的、一致的協(xié)議。



          posted on 2009-04-13 16:12 閱讀(304) 評論(0)  編輯  收藏

          只有注冊用戶登錄后才能發(fā)表評論。


          網(wǎng)站導(dǎo)航:
           
          主站蜘蛛池模板: 霍山县| 射阳县| 泾源县| 嘉定区| 墨竹工卡县| 嘉鱼县| 汽车| 成安县| 通榆县| 庆云县| 肥城市| 浦城县| 望江县| 德惠市| 赤城县| 西吉县| 郁南县| 中山市| 鸡西市| 皮山县| 陆良县| 辉县市| 西藏| 钟祥市| 曲阳县| 鹿邑县| 黄陵县| 安达市| 桃江县| 靖州| 六安市| 廉江市| 达尔| 翼城县| 同江市| 闵行区| 青阳县| 珲春市| 荣成市| 邵武市| 绥滨县|