1.Model 1 和Model 2簡介
我們在開發Web應用時經常提到的一個概念是Model 1/Model 2,那么到底它是什么意思呢?其實它是對采用jsp技術構成Web應用的不同模型的描述。下面對這個概念做一個簡單的介紹。
Model 1
在使用java技術建立Web應用的實例中,由于JSP技術的發展,很快這種便于把握和可實現快速開發的技術就成了創建Web應用的主要技術。JSP頁面中可以非常輕易地結合業務邏輯(jsp:useBean)、服務端處理過程(jsp:scriplet)和Html(<html>),在JSP頁面中同時實現顯示,業務邏輯和流程控制,從而可以快速地完成應用開發。現在很多的Web應用就是由一組JSP頁面構成的。這種以JSP為中心的開發模型我們可以稱之為Model 1。
當然這種開發模式在進行快速和小規模的應用開發時,是有非常大的優勢,但是從工程化的角度考慮,它也有一些不足之處:
1. 應用的實現一般是基于過程的,一組JSP頁面實現一個業務流程,假如要進行改動,必須在多個地方進行修改。這樣非常不利于應用擴展和更新。
2. 由于應用不是建立在模塊上的, 業務邏輯和表示邏輯混合在JSP頁面中沒有進行抽象和分離。所以非常不利于應用系統業務的重用和改動。
考慮到這些問題在開發大型的Web應用時必須采用不同的設計模式――這就是Model2
Model 2
Model 2 表示的是基于MVC模式的框架。MVC是Model-View-Controller的簡寫。"Model" 代表的是應用的業務邏輯(通過JavaBean,EJB組件實現), "View" 是應用的表示面(由JSP頁面產生),"Controller" 是提供給用的處理過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現。這些組件可以進行交互和重用。從而彌補了Model 1的不足。
Model 2具有組件化的優點從而更易于實現對大規模系統的開發和治理,但是開發MVC系統比簡單的JSP開發要復雜許多,它需要更多的時間學習和把握。同時新東西的引入會帶來新的問題(這讓我想起來關于"自動計算"的一篇文章,中間提到為了降低系統的復雜度,卻導致更高的復雜度)。
1. 必須基于MVC組件的方式重新思考和設計應用結構。原來通過建立一個簡單的JSP頁面就能實現的應用現在變成了多個步驟的設計和實現過程。
2. 所有的頁面和組件必須在MVC框架中實現,所以必須進行附加地開發工作。
MVC本身就是一個非常復雜的系統,所以采用MVC實現Web應用時,最好選一個現成的MVC框架,在此之下進行開發,從而取得事半功倍的效果。現在有很多可供使用的MVC框架,由于Struts有完整的文檔并且相對來講比較簡單,所以用它開發MVC系統還是比較方便地。
2.Struts的結構和處理流程簡介
Struts是Apache組織的一個項目,像其他的Apache組織的項目一樣,它也是開放源碼項目。Struts是一個比較好的MVC框架提供了對開發MVC系統的底層支持,它采用的主要技術是Servlet,JSP和custom tag library。獲取它的使用版本和具體信息可以查閱http://jakarta.apache.org/網站。
Struts框架的基本構成由下圖所示:
作為一個MVC的框架,Struts對Model、View和Controller都提供了對應的實現組件,對應上面的UML圖,分別進行介紹,并且看看它們是如何結合在一起的。
1. Controller:控制器的作用是從客戶端接受請求,并且選擇執行相應的業務邏輯,然后把響應結果送回到客戶端。在Struts中Controller功能由圖中ActionServlet和ActionMapping對象構成:核心是一個Servlet類型的對象ActionServlet,它用來接受客戶端的請求。ActionServlet包括一組基于配置的ActionMapping對象,每個ActionMapping對象實現了一個請求到一個具體的Model部分中Action處理器對象之間的映射。
2. Model: MVC系統中的Model部分從概念上可以分為兩類――系統的內部狀態,和改變系統狀態的動作。Struts為Model部分提供了Action和ActionForm對象:所有的Action處理器對象都是開發者從Struts的Action類派生的子類。Action處理器對象封裝了具體的處理邏輯,調用業務邏輯模塊,并且把響應提交到合適的View組件以產生響應。Struts提供的ActionForm組件對象,它可以通過定義屬性描述客戶端表單數據。開發者可以從它派生子類對象,利用它和Struts提供的自定義標記庫結合可以實現對客戶端的表單數據的良好封裝和支持,Action處理器對象可以直接對它進行讀寫,而不再需要和request、response對象進行數據交互。通過ActionForm組件對象實現了對View和Model之間交互的支持。Struts通常建議使用一組JavaBean表示系統的內部狀態,根據系統的復雜度也可以使用像Entity EJB 和 session EJB等組件來實現系統狀態。Struts建議在實現時把"做什么"(Action)和"如何做"(業務邏輯)分離。這樣可以實現業務邏輯的重用。
3. View:Struts應用中的View部分是通過JSP技術實現的。Struts提供了自定義的標記庫可以使用,通過這些自定義標記可以非常好地和系統的Model部分交互,通過使用這些自定義標記創建的JSP表單,可以實現和Model部分中的ActionForm的映射,完成對用戶數據的封裝,同時這些自定義標記還提供了像模板定制等多種顯示功能。
新聞熱點
疑難解答