無狀態(tài)網(wǎng)絡(luò) 可以將 Web 應(yīng)用程序協(xié)議分為兩大類:無狀態(tài)和有狀態(tài)。協(xié)議的狀態(tài)是指下一次傳輸可以“記住”這次傳輸信息的能力。有狀態(tài)協(xié)議能夠根據(jù)客戶機(jī)以前的請求創(chuàng)建上下文。無狀態(tài)協(xié)議沒有上下文;每個(gè)請求都是與服務(wù)器的獨(dú)立連接。
無論是否需要管理 servlet 容器、設(shè)置服務(wù)器負(fù)載均衡、處理簡單的 HTML 表單或甚至對 HTTP 數(shù)據(jù)流執(zhí)行復(fù)雜的處理,servlet 體系結(jié)構(gòu)和 API 都能使 Web 應(yīng)用程序開發(fā)和部署變得非常容易。用 servlet 容器設(shè)置和管理 Web 服務(wù)器非常簡單,只需要很少的配置。對于服務(wù)器部署,通常一個(gè)或兩個(gè) XML 文件就包含所有所需的配置設(shè)置。對 servlet 進(jìn)行編程也很簡單。servlet API 對以下過程中所涉及到的細(xì)節(jié)進(jìn)行了抽象:截取客戶機(jī)請求、將請求路由至相應(yīng)的 servlet 實(shí)例、從線程池檢索線程、調(diào)用正確的方法來處理請求(doGet()、doPost() 或其它任何從 service() 方法調(diào)用的方法)以及甚至為抽取和處理編碼的 HTTP 數(shù)據(jù)提供方便的 API。
Java Web Start 實(shí)際上是 applet 和獨(dú)立應(yīng)用程序的混合物,它是一項(xiàng)較新的技術(shù),它有許多較突出的優(yōu)點(diǎn)(關(guān)于更多這方面的信息,請參閱參考資料)。象 applet 一樣,可以從 Web 瀏覽器調(diào)用 Java Web Start,它也可以與 servlet 交互。與 applet 不同的是,Java Web Start 應(yīng)用程序?qū)⑽募彺嬖诒镜赜脖P,只有當(dāng)需要時(shí)才下載額外的文件。可以從本地資源安裝或通過 Web 遠(yuǎn)程安裝 Java Web Start 應(yīng)用程序。此外,啟動(dòng)的 GUI 是功能齊全的 Swing 客戶機(jī)。可以在不妨礙應(yīng)用程序的情況下關(guān)閉瀏覽器。其結(jié)果是結(jié)合了 applet 和非 applet 兩者的優(yōu)點(diǎn)。然而,Java Web Start 并不是十全十美。它需要將所有資源都包含在本地 JAR 文件中(而不是松散的文件中);它不允許直接訪問資源(資源是通過抽象的資源管理機(jī)制來訪問的);它不支持本機(jī)應(yīng)用程序的部署。
Web 應(yīng)用程序 在標(biāo)準(zhǔn)的基于 Web 的應(yīng)用程序(譬如 Web 瀏覽器)情形下,您會(huì)采用支持 HTTP 的客戶機(jī),它需要訪問一個(gè)或多個(gè)后端業(yè)務(wù)服務(wù)。在這種情形下,不需要考慮客戶機(jī)位于防火墻的哪一側(cè),因?yàn)楸仨氁褂?servlet。顯而易見,HTTP 的需求會(huì)利用 Web 層。實(shí)質(zhì)上將根據(jù)對 EJB 容器服務(wù)的相對需求來決定是否使用 EJB 組件。
多種客戶機(jī)類型 最后一種情形是需要多種客戶機(jī)類型。也許外部客戶需要使用基于 Web 瀏覽器的客戶機(jī),而內(nèi)部員工需要使用標(biāo)準(zhǔn)的桌面、豐富的 GUI。在提供高性能和可靠性的需求與重用需求之間,如何平衡?
如果不需要管理復(fù)雜的事務(wù),或者不需要訪問多個(gè)企業(yè)資源,則可以簡單地使用與一系列助手類進(jìn)行相互操作的 servlet 層來進(jìn)行業(yè)務(wù)處理。外部瀏覽器客戶機(jī)將通過這個(gè) Web 層與系統(tǒng)進(jìn)行相互操作。然后,重用助手 bean 來直接為內(nèi)部應(yīng)用程序的請求提供服務(wù),或者內(nèi)部應(yīng)用程序通過 servlet 層進(jìn)行通信。雖然這樣能解決問題,但它不是最干凈、最有效或可伸縮性最好的解決方案。