當前流行的J2EE WEB應用架構分析 |
|
1. 架構概述 各種因數初步確定 定向技術培訓 角色分工 運行維護 擴展性 大家都知道這些好處,一心想形成一個這樣的J2EE應用程序架構(就像在windows平臺中的MFC)。在這個路程中經歷了兩個大的階段: 1.1. 模型1 模型1其實不是一個什么穩定架構,甚至談不上形成了架構。模型1的基礎是JSP文件。它從HTTP的請求中提取參數,調用相應的業務邏輯,處理HTTP會話,最后生成HTTP文檔。一系列這樣的JSP文件形成一個完整的模型1應用,當然可能會有其他輔助類或文件。早期的ASP 和 PHP 技術就屬于這個情況。 總的看來,這個模型的好處是簡單,但是它把業務邏輯和表現混在一塊,對大應用來說,這個缺點是令人容忍不了的。 1.2. 模型2 它在瀏覽器(本文對客戶代理都稱瀏覽器)和JSP或SERVLET之間插入一個控制組件。這個控制組件集中了處理瀏覽器發過來的HTTP請求的分發邏輯,也就是說,它會根據HTTP請求的URL,輸入參數,和目前應用的內部狀態,把請求分發給相應的WEB 層的JSP 或SERVLET。另外它也負責選擇下一個視圖(在J2EE中,JSP,SERVLET會生成回給瀏覽器的html從而形成視圖)。集中的控制組件也有利于安全驗證,日志紀錄,有時也封裝請求數據給下面的WEB tier層。這一套邏輯的實現形成了一個像MFC的應用框架, 1.3. 多層應用 Client tier客戶層 WEB tier WEB應用層 EJB tier 企業組件層 EIS tier 企業信息系統層 應用框架目前主要集中在WEB層,旨在規范這一層軟件的開發。其實企業組件層也可以實現這個模型,但目前主要以設計模式的形式存在。而且有些框架可以擴充,有了企業組件層組件的參與,框架會顯得更緊湊,更自然,效率會更高 2. 候選方案 2.1. Apache Struts 2.1.1. Struts和MVC 2.1.1.1. 控制 2.1.1.2. 模型 Form beans(表單Beans) 業務邏輯beans 系統狀態beans 2.1.1.3. 視圖 2.1.2. Struts的細節分析 2.1.2.1. 視圖-控制-模型 當動作對象運行perform方法時,可能出現錯誤信息。動作對象可以保存這些錯誤信息到一個error對象中,接著調用自身的saveerrors方法把這個錯誤保存到request對象的屬性中。接著動作對象調用actionmapping對象的getInput方法從動作映射中獲取input參數,也就是產生輸入的視圖,并以這個input為參數生成一個actionforward對象返回。這個input參數的JSP中一般有HTTP:errors定制標簽讀取這些錯誤信息并顯示在頁面上。 2.1.2.2. 模型到視圖 模型到視圖指視圖在顯示之前裝載系統數據到視圖的過程。系統數據一般為模型內java bean的信息。示意圖表現了由控制組件forward過來的有html:form定制標簽的JSP 的處理邏輯。 html:form定制標簽處理對象從application scope(通過查詢SERVLETCONTEXT對象的屬性來實現)獲取先前由控制組件actionSERVLET放在那里的動作映射等對象,由html:form 的action屬性查得actionform名字、類型和范圍等信息,在相應的范圍內查找actionform,如果有則利用它的信息填充html form表單[實際填充動作在嵌套的html:text等定制標簽的處理對象中]。否則在相應范圍內創建一個actionform 對象。 2.1.3. 優缺點 優點 缺點 修改建議 2.2. JATO 這個框架功能主要有三部分組成: 應用框架核心定義了基本接口、對象協議、簡單組件,以及iPlanet應用框架程序的最小核心。包括視圖簡單組件、模型簡單組件、請求分發組件和可重用命令對象。iPlanet應用框架組件利用框架核心定義的基本接口、協議和組件向開發者提供高層的重用組件,這些組件既有與特定視覺效果無關的水平組件,同時也有適應特定實用環境、提高可用性而特意提供的垂直型組件。框架擴展實現了用框架相容的方法訪問非J2EE環境的方法。通常情況下,擴展被框架應用程序用來無縫訪問J2EE容器特定功能。JATO平臺棧圖很清楚地表達了這個情況 JATO最大的威力在:對于快速開發用戶,你能利用框架組件和擴展提高生產率,對于要求更大靈活性的用戶,你能實現框架核心提供的接口來保持應用的框架兼容性。 此圖表示實現一個JATO應用程序,可以簡單地實現控制組件module1Servlet,視圖組件ListCustomersViewBean和模型組件CustomersModuleImpl,以及一個給客戶代理顯示界面的ListCustomers.jsp文件。并清楚地表明這些組件與JATO框架組件的繼承關系。 JATO標簽庫提供了VIEW對象與JSP文件的接口。庫中標簽處理程序負責實現VIEW對象和JSP產生地客戶端文檔的信息同步和交換。這個圖清楚地表達了這種對應關系 2.2.1. MVC分析 請求分發組件分發請求給工作者,工作者實現了command接口。應用開發者可以實現這個接口。JATO提供了一個缺省實現:DefaultRequestHandingCommand,這個實現會把請求傳給視圖組件的特定事件。 組合視圖是指視圖組件在顯示給用戶時的層次關系:根視圖是一個ViewBean類的對象字段是一個DisplayField類的對象,容器視圖是一個ContainerView類的對象。 2.2.2. 優缺點分析 優點: 缺點: 修改建議 2.3. JSF(JavaServer Faces) 2.3.1. STRUTS、JATO和JSF比較 2.4. WAF WAF是WEB APPLICATION FRAMWORK的簡稱,是SUN藍皮書例子程序中提出的應用框架。它實現了 MVC和其他良好的設計模式。 2.4.1. 細節分析 2.4.2. 視圖-控制-模型 如圖所示,開發人員編寫的兩個xml配置文件定義了WAF的運作參數。Screendefinition.xml定義了一系列的屏幕(screen)。Mapping.xml則定義了某個動作之后應該顯示的屏幕,但沒有指定屏幕到哪里拿數據。 用戶發出一個HTTP請求(*.screen),由TemplateSERVLET屏幕前端控制組件接收,它提取請求信息,設置request對象CurrentScreen屬性,再把請求發到模版JSP。模版JSP收到請求后,JSP中的Template標簽察看這個當前屏幕,并從屏幕定義文件(Screendefinition.xml)中獲取這個屏幕的具體參數,再生成html返回給客戶。 假設返回給客戶的html中包括了html表單,用戶在輸入一定數據之后提交,發出一個HTTP請求(*.do)。這個請求被MainSERVLET接收,它提取請求信息,察看動作映射文件(mapping.xml),設置處理這個請求的動作對象(HTTPAction對象),交給requestprosessor對象處理。Requestprosessor對象調用動作對象完成任務,如果需要進一步處理,requestprosessor對象會調用WEBclientcontroler對象的事件處理機制。MainSERVLET在處理完請求之后,從屏幕流管理對象那里得到下一個屏幕,并把請求傳給這個屏幕的JSP文件。 值得一提的是WEBclientcontroler事件處理機制最終把HTTP請求的數據傳到了EJBAction對象那里處理。這樣HTTPAction對象和EJBAction對象形成了兩級處理機制,前一級與request對象緊密相關,把數據封裝起來形成一個Event對象,再傳給了EJBAction對象,后者與Request對象無關。這個方式可以形成一個session級別的數據處理機制。下圖顯示了這個方法。HTTPAction1對象處理一個請求,并把數據放到一個狀態SessionBean內,HTTPAction2也如此,當HTTPAction3接收到HTTP請求之后,把控制傳給EJBAction, 后者獲取狀態SessionBean數據,處理請求,成功后清控狀態SessionBean的內容。這個機制非常適應多個輸入頁面才能滿足一個業務的輸入數據的情況(比如購物車)。 2.4.3. 優缺點分析 優點 缺點 修改意見 |