這個架構的關鍵是客戶端和服務器端的小程序?ervlet之間的通信。但是由於小程序受到瀏覽器安全模式的限制,在小程序中訪問數據和信息並沒有看起來那麽簡單。在本文中,我們將解釋開發人員在Applet-Servlet結構中面臨的限制,並討論可以在Applet和Servlet之間傳輸數據的幾種不同的通信策略。如果妳已經熟悉Applet和Servlet,那麽它壹定會對妳閱讀這篇文章有所幫助。如果不是那麽熟悉,也沒關系。我們就簡單介紹壹下。
APPLET和SERVLET簡介
小應用程序
Java applets實際上是壹個運行在網頁上的Java程序。它是從java.applet.applet繼承而來的Java類,通過引用的方式嵌入到HTML頁面中,就像圖片壹樣。Applet和HTML的結合可以構建更強大的動態界面。對於壹些僅用於滾動文本和播放動畫的Applet,我們可以在企業級應用程序中使用它來顯示和處理來自服務器上的資源的數據。例如,Applet可以用來瀏覽和修改數據庫中的記錄,或者控制服務器上運行的其他應用程序。
除了自己定義的類文件之外,Java applet還可以使用其他類,無論它們是獨立存在還是打包到壹個JAR文件中。小程序和它們的類文件是通過標準的HTTP請求分發的,所以小程序可以通過網頁數據所在平臺的防火墻發送。除非涉及到維護應用程序完整性的問題,否則每次用戶再次訪問web主機時,小程序總是會自動刷新,並且會在客戶端停留壹段時間。
得益於Java操作系統的平臺獨立性,Applet可以在任何帶有Java虛擬機(JVM)的瀏覽器上運行。Sun的Java插件甚至可以使用最新版本的JVM來編譯頁面,而不用擔心在妳的用戶瀏覽器上受到JVM版本的限制。
因為Applet是Java平臺的擴展,所以在用Applet構建web應用程序的接口時,可以重用現有的Java組件。正如我們在下面的例子中看到的,您可以在Applet的組件中使用復雜的Java對象來開發原本由服務器端應用程序完成的工作。事實上,您可以編寫這樣的Java代碼,既可以在Applet上執行,也可以在應用程序中執行。
Applet具有傳統Java應用程序的所有功能,包括使用Sun公司的JFC/Swing組件。小程序還可以用來制作應用程序中的圖形和用戶界面(雖然有些輔助窗口會標上“警告,Java小程序窗口”)。但是不管它們有多相似,應用程序和Applet還是有壹些關鍵的區別。例如,我們必須考慮到我們的小程序受到安全模式的限制。
Applet的安全約束
Applet代碼來自web主機,在最終用戶機器的瀏覽器中運行。包含病毒的有害小程序可能會造成破壞性影響。為了防止這樣的小程序,小程序受到安全約束,即小程序只能與提供這個小程序的主機通信,小程序不能操作終端用戶的機器。他們不能讀寫用戶的文件系統,不能執行上述程序,不能檢查壹些敏感的環境參數。其實有壹種方法可以避免這種限制,那就是開發者可以使用數字簽名技術來標記小程序,這會詢問用戶是否可以給小程序壹些特殊的待遇。但是這超出了本文討論的範圍。此外,Applet不能建立或接受外部套接字連接。所謂外來,就是這個連接超出了提供這個小程序類文件的主機(不是提供引用這個小程序的HTML的主機)。
由於這種安全限制,我們必須在與Applet的通信中采用特殊的策略。唯壹的通信方式就是主機提供小程序和主機提供相應HTML之前的網絡連接。
Servlets
Java servlet是壹個服務器端組件,在很多方面與CGI相似。它可以處理web請求並返回數據或HTML。Servlet可以訪問數據庫,執行計算,並與Enterprise JavaBean等組件通信。與CGI程序不同,Servlet是持久的,即只要實例化壹次(這些請求很可能同時發生),就可以持續處理請求。因此,Servlet比CGI更有效。
Servlet運行在Servlet引擎中,通常在web服務器或應用服務器上。網景企業服務器4.0和網景應用服務器都支持最新版本的Java servlet規範。與Applet不同,Servlet不受安全約束的限制。因為Servlet完全在服務器上運行,所以它具有所有操作系統都允許的性能。
Servlet可用於在Applet和Web瀏覽器等客戶端與企業應用核心之間輕松建立連接。對於客戶機來說,對Servlet的請求與其他web請求沒有什麽不同。客戶端通過URL接受返回的信息。我們可以看到,返回的信息不壹定是HTML。事實上,我們可以通過HTML協議發送和接受任何類型的數據。
施工方法
企業應用程序有幾種方法來構造Applet和Servlet的使用。我給大家介紹三種不同的施工方法,比較壹下各自的優缺點。
第壹種方法實際上只使用了applets而不是Servlet。雖然小程序受到其安全模式的限制,但小程序仍然可以使用JDBC和RMI等協議來訪問數據庫、LDAP目錄和Enterprise JavaBeans組件等後端信息。這種施工方法如圖1所示。這種方法雖然看起來簡單,但並不是壹個好方法,而且會帶來很多問題。首先,這種安排要求您將所有訪問信息直接嵌入到Applet代碼中。數據庫用戶名、密碼、服務器標識,所有這些都必須包含在Applet代碼中,以便最終用戶可以從類文件中收集這些信息。此外,您訪問的數據庫或任何其他系統必須位於提供Applet的同壹服務器上。這意味著妳的服務器將不得不承受雙重負擔。它既是web服務器又是數據庫服務器。通常,您的後端資源可能受到防火墻的保護,但在這種情況下,這是不可能的,因為在客戶端上運行的Applet必須直接訪問您的機器。最後,使用這種方法,即使不是不可能,也很難使用web服務器集群。
圖1。兩層應用程序的構建
更好的方法是將與後端資源通信的事務封裝成Servlet,而Applet只用來處理前端工作。在這種構造方法中,如圖2所示,Servlet克服了小程序固有的安全約束,用於控制小程序訪問企業信息系統和事務邏輯。當Servlet收到請求時,它將查詢後端數據庫中的信息,執行計算,處理表示小程序的信息的獲取,並對來自小程序的信息進行操作。這種方法的壹大進步是Applet/Servlet對可以分布在後端web服務器的集群上,與某個數據庫的所有通信都存在於後端。此外,使用Servlet的設計有助於模塊化設計,抽象應用程序的後端來處理業務邏輯,提高設計的靈活性。
圖二。三層應用程序結構。
如果您圍繞Enterprise JavaBeans構建應用程序,Servlet就成了中間件。EJB組件有助於將業務邏輯從Servlet中分離出來,並使其更加抽象。在這種情況下,Applet與其Servlet通信,Servlet又與EJB組件通信。正如我們在圖3中看到的。在應用構建中引入由EJB組件、Servlet和前端applet/HTML組成的分層結構,可以為我們提供最大的靈活性和性能。雖然妳不得不附加復雜性和費用的成本。
圖3。壹個多層結構的應用程序構造。