新聞中心
1.Struts MVC中Model 1 和Model 2簡介

我們在開發(fā)Web應用時經(jīng)常提到的一個概念是Model 1/Model 2,那么到底它是什么意思呢?其實它是對采用JSP技術(shù)構(gòu)成Web應用的不同模型的描述。下面對這個概念做一個簡單的介紹。
Model 1
在使用JAVA技術(shù)建立Web應用的實例中,由于JSP技術(shù)的發(fā)展,很快這種便于掌握和可實現(xiàn)快速開發(fā)的技術(shù)就成了創(chuàng)建Web應用的主要技術(shù)。JSP頁面中可以非常容易地結(jié)合業(yè)務邏輯(jsp:useBean)、服務端處理過程(jsp:scriplet)和HTML(),在JSP頁面中同時實現(xiàn)顯示,業(yè)務邏輯和流程控制,從而可以快速地完成應用開發(fā)?,F(xiàn)在很多的Web應用就是由一組JSP頁面構(gòu)成的。這種以JSP為中心的開發(fā)模型我們可以稱之為Model 1。
當然這種開發(fā)模式在進行快速和小規(guī)模的應用開發(fā)時,是有非常大的優(yōu)勢,但是從工程化的角度考慮,它也有一些不足之處:
應用的實現(xiàn)一般是基于過程的,一組JSP頁面實現(xiàn)一個業(yè)務流程,如果要進行改動,必須在多個地方進行修改。這樣非常不利于應用擴展和更新。
由于應用不是建立在模塊上的, 業(yè)務邏輯和表示邏輯混合在JSP頁面中沒有進行抽象和分離。所以非常不利于應用系統(tǒng)業(yè)務的重用和改動。
考慮到這些問題在開發(fā)大型的Web應用時必須采用不同的設計模式――這就是Model2
Model 2
Model 2 表示的是基于MVC模式的框架。MVC是Model-View-Controller的簡寫。"Model" 代表的是應用的業(yè)務邏輯(通過JavaBean,EJB組件實現(xiàn)), "View" 是應用的表示面(由JSP頁面產(chǎn)生),"Controller" 是提供應用的處理過程控制(一般是一個Servlet),通過這種設計模型把應用邏輯,處理過程和顯示邏輯分成不同的組件實現(xiàn)。這些組件可以進行交互和重用。從而彌補了Model 1的不足。
Model 2具有組件化的優(yōu)點從而更易于實現(xiàn)對大規(guī)模系統(tǒng)的開發(fā)和管理,但是開發(fā)Struts MVC系統(tǒng)比簡單的JSP開發(fā)要復雜許多,它需要更多的時間學習和掌握。同時新東西的引入會帶來新的問題(這讓我想起來關(guān)于"自動計算"的一篇文章,中間提到為了降低系統(tǒng)的復雜度,卻導致更高的復雜度)。
必須基于Struts MVC組件的方式重新思考和設計應用結(jié)構(gòu)。原來通過建立一個簡單的JSP頁面就能實現(xiàn)的應用現(xiàn)在變成了多個步驟的設計和實現(xiàn)過程。
所有的頁面和組件必須在Struts MVC框架中實現(xiàn),所以必須進行附加地開發(fā)工作。
Struts MVC本身就是一個非常復雜的系統(tǒng),所以采用Struts MVC實現(xiàn)Web應用時,***選一個現(xiàn)成的MVC框架,在此之下進行開發(fā),從而取得事半功倍的效果?,F(xiàn)在有很多可供使用的MVC框架,由于Struts有完整的文檔并且相對來講比較簡單,所以用它開發(fā)MVC系統(tǒng)還是比較方便地。
2.Struts的結(jié)構(gòu)和處理流程簡介
Struts是Apache組織的一個項目,像其他的Apache組織的項目一樣,它也是開放源碼項目。Struts是一個比較好的MVC框架提供了對開發(fā)MVC系統(tǒng)的底層支持,它采用的主要技術(shù)是Servlet,JSP和custom tag library。獲取它的使用版本和具體信息可以查閱http://jakarta.apache.org網(wǎng)站。
Struts框架的基本構(gòu)成由下圖所示:
圖 1 struts uml圖
作為一個MVC的框架,Struts對Model、View和Controller都提供了對應的實現(xiàn)組件,對應上面的UML圖,分別進行介紹,并且看看它們是如何結(jié)合在一起的。
Controller:控制器的作用是從客戶端接受請求,并且選擇執(zhí)行相應的業(yè)務邏輯,然后把響應結(jié)果送回到客戶端。在Struts中Controller功能由圖中ActionServlet和ActionMapping對象構(gòu)成:核心是一個Servlet類型的對象ActionServlet,它用來接受客戶端的請求。ActionServlet包括一組基于配置的ActionMapping對象,每個ActionMapping對象實現(xiàn)了一個請求到一個具體的Model部分中Action處理器對象之間的映射。
Model: Struts MVC系統(tǒng)中的Model部分從概念上可以分為兩類――系統(tǒng)的內(nèi)部狀態(tài),和改變系統(tǒng)狀態(tài)的動作。Struts為Model部分提供了Action和ActionForm對象:所有的Action處理器對象都是開發(fā)者從Struts的Action類派生的子類。Action處理器對象封裝了具體的處理邏輯,調(diào)用業(yè)務邏輯模塊,并且把響應提交到合適的View組件以產(chǎn)生響應。Struts提供的ActionForm組件對象,它可以通過定義屬性描述客戶端表單數(shù)據(jù)。開發(fā)者可以從它派生子類對象,利用它和Struts提供的自定義標記庫結(jié)合可以實現(xiàn)對客戶端的表單數(shù)據(jù)的良好封裝和支持,Action處理器對象可以直接對它進行讀寫,而不再需要和request、response對象進行數(shù)據(jù)交互。通過ActionForm組件對象實現(xiàn)了對View和Model之間交互的支持。Struts通常建議使用一組JavaBean表示系統(tǒng)的內(nèi)部狀態(tài),根據(jù)系統(tǒng)的復雜度也可以使用像Entity EJB 和 Session EJB等組件來實現(xiàn)系統(tǒng)狀態(tài)。Struts建議在實現(xiàn)時把"做什么"(Action)和"如何做"(業(yè)務邏輯)分離。這樣可以實現(xiàn)業(yè)務邏輯的重用。
View:Struts應用中的View部分是通過JSP技術(shù)實現(xiàn)的。Struts提供了自定義的標記庫可以使用,通過這些自定義標記可以非常好地和系統(tǒng)的Model部分交互,通過使用這些自定義標記創(chuàng)建的JSP表單,可以實現(xiàn)和Model部分中的ActionForm的映射,完成對用戶數(shù)據(jù)的封裝,同時這些自定義標記還提供了像模板定制等多種顯示功能。
Struts MVC框架的處理流程清楚的體現(xiàn)了MVC系統(tǒng)的特點,簡單的Struts組件結(jié)構(gòu)如圖2所示。Struts Controller ActionServlet處理客戶請求,利用配置的ActionMapping對象把請求映射到Action處理器對象進行處理。Action處理對象訪問ActionForm中的數(shù)據(jù),處理和響應客戶請求,它還調(diào)用后臺的Bean組件,這些組件封裝了具體的業(yè)務邏輯。Action處理器對象根據(jù)處理結(jié)果通知Controller,Controller進行下一步的處理。
圖2 Struts框架的組件結(jié)構(gòu)圖
3.利用Struts框架開發(fā)Struts MVC系統(tǒng)要做的工作
由于Struts已經(jīng)為我們提供了一個非常好的MVC框架,我們利用Struts開發(fā)MVC系統(tǒng)時可以大大加快開發(fā)的速度。在開發(fā)時可以采用的一個開發(fā)流程如下(引自資料3):
收集和定義應用需求。
基于數(shù)據(jù)采集和顯示的原則定義和開發(fā)"屏幕顯示"需求 。
為每一個"屏幕顯示"定義訪問路徑。
定義ActionMappings建立到應用業(yè)務邏輯之間的聯(lián)系。
開發(fā)滿足"屏幕顯示"需求的所有支持對象。
基于每一個"屏幕顯示"需求提供的數(shù)據(jù)屬性來創(chuàng)建對應的ActionForm對象
開發(fā)被ActionMapping調(diào)用的Action對象。
開發(fā)應用業(yè)務邏輯對象 (Bean,EJB,等等)。
對應ActionMapping設計的流程創(chuàng)建JSP頁面。
建立合適的配置文件struts-config.xml , web.xml。
開發(fā)/測試/部署
具體在使用Struts框架時,對應各個部分的開發(fā)工作主要包括:
Model部分:采用JavaBean和EJB組件,設計和實現(xiàn)系統(tǒng)的業(yè)務邏輯。根據(jù)不同的請求從Action派生具體Action處理對象。完成"做什么"的任務來調(diào)用由Bean構(gòu)成的業(yè)務組件。創(chuàng)建由ActionForm 的派生類實現(xiàn)對客戶端表單數(shù)據(jù)的封裝。
Controller部分:Struts為我們提供了核心控制部分的實現(xiàn)。我們只需要配置ActionMapping對象
View部分:為了使用Model中的ActionForm 對象,我們必須用Struts提供的自定義標記創(chuàng)建HTML 表單。利用Struts提供的自定義標記庫編寫用戶界面把應用邏輯和顯示邏輯分離。Struts框架通過這些自定義標記建立了View和Model之間的聯(lián)系。Struts的自定義標記還提供了很多定制頁面的功能。
同時需要編輯兩個配置文件:web.xml和struts-config.xml。通過它們配置Struts系統(tǒng)中的各個模塊之間的交互。下面對這兩個配置文件做一些介紹:
web.xml文件的配置:
web應用中的web.xml是***個要配置的地方,它描述了系統(tǒng)的Controller對象。在web.xml中增加如下標記
org.apache.struts.action.ActionServlet
|
說明:這個servlet對象就是Struts提供的Controller,還可以為它指定初始化參數(shù),比如對系統(tǒng)應用屬性的支持。
< SERVLET-MAPPING> < SERVLET-NAME>a ction< /SERVLET-NAME> |
說明:實現(xiàn)客戶請求的url信息和服務器端具體處理的映射關(guān)系。
|
說明:添加對Struts提供的應用所使用的自定義標記庫的引用。
struts-config.xml文件的配置:
struts-config.xml是用于建立Controller和Model之間的關(guān)系的。它描述了Controller所使用的把請求對應到具體處理的法則,同時它還描述了客戶提供的數(shù)據(jù)與ActionForm組件的對應映射關(guān)系。
在struts-config.xml中增加如下標記
說明:標記描述一個具體的ActionForm子類對象,通過它和JSP頁面中的自定標記的結(jié)合使用可以實現(xiàn)ActionForm和View之間的數(shù)據(jù)映射。
|
說明:標記描述了請求和處理的一對一映射關(guān)系。input和path屬性唯一的標記了客戶端的一個請求,name屬性描述封裝客戶端的數(shù)據(jù)的ActionForm子類對象。Type屬性描述處理這個請求的Action子類對象。
通過對兩個配置文件的配置,把Struts MVC框架中MVC的各個部分聯(lián)系起來,實現(xiàn)一個真正的Struts MVC系統(tǒng)。
4.可供參考的例子
編寫一個好的Struts MVC例子演示是比較占篇幅的,可以從http://jakarta.apache.org/ 下載Struts***的發(fā)表包,在這個包中有詳細的用戶幫助和API文檔,還有非常好的演示程序可供參考。具體的安裝步驟可以參考附帶的文檔。參考這些例子可以很快地理解如何利用struts框架開發(fā)MVC系統(tǒng)。
【編輯推薦】
- 在Eclipse中開發(fā)struts應用程序
- 手把手教你在Eclipse中配置開發(fā)Struts
- Eclipse下開發(fā)struts完整解決亂碼問題
- Struts相關(guān)背景介紹
- 使用Easy Struts for Eclipse開發(fā)Struts
本文標題:淺談StrutsMVC工作原理及實例
URL網(wǎng)址:http://www.5511xx.com/article/dppsphi.html


咨詢
建站咨詢
