第8章MVC設(shè)計模式_第1頁
第8章MVC設(shè)計模式_第2頁
第8章MVC設(shè)計模式_第3頁
第8章MVC設(shè)計模式_第4頁
第8章MVC設(shè)計模式_第5頁
已閱讀5頁,還剩40頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

第8章MVC模式目錄8.1MVC模式8.2Struts28.3配置詳解8.1MVC模式什么是模式?23種設(shè)計模式體系結(jié)構(gòu)(架構(gòu))模式MVC模式模型-視圖-控制器(MVC)是80年代Smalltalk-80出現(xiàn)的一種軟件設(shè)計模式,現(xiàn)在已經(jīng)被廣泛的使用MVC是一種軟件設(shè)計模式,不僅僅應(yīng)用于WEB。在日常生活中處處可以找到類似于MVC的例子。在WEB應(yīng)用上,J2EE平臺最先應(yīng)用MVC設(shè)計模式,并成為一個事實上的標準。數(shù)據(jù)與顯示分離什么是MVC設(shè)計模式

1、模型(Model)

業(yè)務(wù)邏輯層。用于封裝業(yè)務(wù)邏輯和數(shù)據(jù)模型。

2、視圖(View)

表示層。就是與用戶實現(xiàn)交互的界面,通常實現(xiàn)數(shù)據(jù)的輸入和輸出功能。

3、控制器(controller)

控制層。起到控制整個業(yè)務(wù)流程的作用,實現(xiàn)View層跟Model層的協(xié)同工作。

模型

模型(Model):就是業(yè)務(wù)流程/狀態(tài)的處理以及數(shù)據(jù)模型的制定。業(yè)務(wù)流程的處理過程對其它層來說是黑箱操作,模型接受視圖請求的數(shù)據(jù),并返回最終的處理結(jié)果。模型的設(shè)計可以說是MVC最主要的核心。Struts2Struts2MVC模式的信息管理系統(tǒng)8.2View組件——視圖層作用:實現(xiàn)業(yè)務(wù)數(shù)據(jù)的輸入和顯示,外部對象與系統(tǒng)進行交互和通信要通過視圖層。一般視圖就是為操作者顯示的窗口界面,操作者通過該窗口來進行系統(tǒng)管理。職責(zé):與操作者進行交互功能:

(1)提供數(shù)據(jù)輸入的機制。如表單。

(2)顯示業(yè)務(wù)數(shù)據(jù)。

1)列表方式

2)詳細方式Model組件作用:用于封裝與應(yīng)用程序的業(yè)務(wù)邏輯相關(guān)的數(shù)據(jù)以及對數(shù)據(jù)的處理方法。模型有對數(shù)據(jù)直接訪問的權(quán)利,模型不依賴與視圖和控制也就是他不關(guān)心如何被顯示和被操作。職責(zé):業(yè)務(wù)處理。主要功能:

(1)表達業(yè)務(wù)數(shù)據(jù):表達存儲在數(shù)據(jù)庫中的業(yè)務(wù)數(shù)據(jù)。(2)業(yè)務(wù)數(shù)據(jù)持久化:將業(yè)務(wù)數(shù)據(jù)保存到數(shù)據(jù)庫中。(3)業(yè)務(wù)處理方法:管理系統(tǒng)的核心功能是模擬業(yè)務(wù)代理,代替人工的處理模式,實現(xiàn)信息管理的高效率和低成本。8.3Control組件職責(zé):協(xié)調(diào)View和Mode組件,控制整個系統(tǒng)的流程,接收客戶端請求,并調(diào)用Model組件對其作出響應(yīng)。主要功能:(1)取得View提交的數(shù)據(jù)(2)驗證View數(shù)據(jù)的合法性(形式和業(yè)務(wù))(3)View數(shù)據(jù)的類型轉(zhuǎn)換(4)調(diào)用Model業(yè)務(wù)處理方法(5)保存Model業(yè)務(wù)數(shù)據(jù)給View組件(6)導(dǎo)航到指定View組件。JavaEE框架下的MVCJavaEE平臺MVC實現(xiàn)View:JSP+EL+JSTLControl:ServletModel:JavaBean8.5MVC模式分層結(jié)構(gòu)MVC模式分層結(jié)構(gòu)UIO:視圖層CO:控制層BO:業(yè)務(wù)層實現(xiàn)業(yè)務(wù)邏輯PO/DAO:持久層向數(shù)據(jù)庫實現(xiàn)數(shù)據(jù)持久化操作DTO/VO:傳輸層在各層之間傳遞數(shù)據(jù)時,依賴傳遞層實現(xiàn),需要實現(xiàn)序列化接口Serializable每層的設(shè)計思想面向接口設(shè)計原則,通過接口向上層暴露業(yè)務(wù)方法,每層由接口,接口實現(xiàn)類和工廠類組成。詳細的MVC分層架構(gòu)View設(shè)計HTMLJSPELJSTL控制類設(shè)計控制類由Servlet充當,具有Servlet中常見方法。Action控制類的設(shè)計

類命名:處理功能名稱+Action

包名:域名.項目名.模塊名.action如:com.city.oa.action.LoginAction,

VO/DTO類設(shè)計用于封裝表的記錄值,每個表1個類。類對應(yīng)表,對象對應(yīng)記錄,屬性對象字段。使用關(guān)聯(lián)關(guān)系表達類之間的對應(yīng)關(guān)系,與表的外鍵對應(yīng)。每個屬性一對get/Set方法。包:jectname.value類名:實體類名+”Value”

如:com.city.oa.value.UserValuecom.city.oa.value.POValuecom.city.oa.value.EmployeeValueBO類(BusinessObject)BO接口:定義BO業(yè)務(wù)功能命名:OOA實體名稱包名:ject.business

如:com.dashang.erp.business.UserBO實現(xiàn)類:實現(xiàn)BO接口的功能命名:OOA實體類Impl

包:ject.business.impl

如:com.dashang.erp.business.impl.UserImplBO工廠:命名:BusinessFactory

包:ject.business.factoryDAO類(DataAccessObject)設(shè)計DAO接口:定義CRUD方法命名:OOA實體類名稱+DAO

包:ject.daoDAO實現(xiàn)類命名:OOA實體類+DAOImpl

包:ject.dao.impl

如:com.dashang.erp.dao.impl.UserDAOImplDAO工廠命名:DAOFactory

包:ject.dao.factoryMVC模式Model1Model2MVC缺點視圖與控制器間的過于緊密的連接。視圖與控制器是相互分離,但確實聯(lián)系緊密的部件,視圖沒有控制器的存在,其應(yīng)用是很有限的,反之亦然,這樣就妨礙了他們的獨立重用。視圖對模型數(shù)據(jù)的低效率訪問。依據(jù)模型操作接口的不同,視圖可能需要多次調(diào)用才能獲得足夠的顯示數(shù)據(jù)。對未變化數(shù)據(jù)的不必要的頻繁訪問,也將損害操作性能。MVC的幾種實現(xiàn)StrutsSpringMVCSpringGuiceHibernateIBatis幾種常見的模式

J2EE?SOA?EAI?基于組件基于插件LayersFa?ade…人氣技術(shù)框架市場占有率

沒有繼承Struts1的血統(tǒng),而是繼承WebWork的血統(tǒng)

即:Struts2是在WebWork2的基礎(chǔ)上開發(fā)的

8.2strutsStruts2Struts1WebWorkStruts1的MVC結(jié)構(gòu)1struts1簡介2Webwork簡介Webwork是由OpenSymphony組織開發(fā)的基于MVC架構(gòu)模式的J2EEWeb框架。從2.0版本開始拆分為XWork和WebWorkXwork完全脫離Web層,提供了很多核心功能:前端攔截器(interceptor),表單驗證,數(shù)據(jù)類型轉(zhuǎn)換,強大的表達式語言(OGNL),IoC(控制反轉(zhuǎn))容器等。WebWork2建立在Xwork之上,處理HTTP的請求和響應(yīng)。WebWork解決了Struts1的ActionForm問題,可以使用普通的JavaBean對象,甚至Action本身來接受表單數(shù)據(jù)。其Action也沒有和ServletAPI耦合在一起,單元測試更容易。

3、struts2架構(gòu)剖析

體系結(jié)構(gòu)

調(diào)用流程請求首先通過Filterchain,Filter主要包括ActionContextCleanUp,它主要清理當前線程的ActionContext和Dispatcher;FilterDispatcher主要通過AcionMapper來決定需要調(diào)用哪個Action。

ActionMapper取得了ActionMapping后,在Dispatcher的serviceAction方法里創(chuàng)建ActionProxy,ActionProxy創(chuàng)建ActionInvocation,然后ActionInvocation調(diào)用Interceptors,執(zhí)行Action本身,創(chuàng)建Result并返回,當然,如果要在返回之前做些什么,可以實現(xiàn)PreResultListener。4struts2調(diào)用流程當Servlet容器接收到一個請求后,將請求交給web.xml文件中配置的過濾器FilterDispatcher,調(diào)用它的doFilter()方法。FilterDispatcher通過ActionMapper來決定這個Request需要調(diào)用哪個Action如果ActionMapper決定調(diào)用某個Action,F(xiàn)ilterDispatcher把請求的處理交給ActionProxy。ActionProxy根據(jù)ActionMapping和ConfigurationManager找到需要調(diào)用的Action類ActionProxy創(chuàng)建一個ActionInvocation的實例ActionInvocation調(diào)用真正的Action,當然這涉及到相關(guān)攔截器的調(diào)用Action執(zhí)行完畢,ActionInvocation創(chuàng)建Result并返回。8.3配置詳解配置文件包的配置名稱空間的配置攔截器配置action配置result配置

1配置文件web.xml:配置核心控制器FilterDispatcher,對struts框架進行初始化。perties:struts2的屬性配置文件struts.xml:struts2的核心配置文件,主要配置和管理開發(fā)人員編寫的action。struts-default.xml:struts2的基礎(chǔ)配置文件,會被自動的包含到struts.xml中struts-plugin.xml:就是由插件使用的配置文件,如果不開發(fā)插件的話,就無需編寫這個配置文件2包的配置package元素有一個必需的屬性name,指定包的名字,包的名字必需是唯一的package元素的extends屬性是可選的,允許一個或多個先前定義的包pageckage元素的abstract屬性是可選的,設(shè)為true,表明是抽象的。抽象的包不能有action定義,只能被其他包繼承。3名稱空間的配置struts2框架使用action的名字和它所在的空間來標識一個action。所以多個包可以映射到相同的名稱空間,不同的名稱空間中也可以使用同名的action。struts2會將一個請求分為namespace和action名字兩部分,如果從struts.xml中沒有找到namespace/action命名對,就會在默認的名稱空間(“”)中搜索相應(yīng)的action名。4攔截器配置如果你在一個action中定義了其它的攔截器引用,那么這個action將不再使用默認的攔截器。攔截器按照它們在攔截器棧中定義的順序執(zhí)行。攔截器都是在包中定義的,一個包中不能引用其他包中定義的攔截器,除非這兩個包是繼承關(guān)系。5action配置action取名時,默認在名字中是不能出現(xiàn)”/”的,要出現(xiàn)需在struts.xml中指定<constantname="struts.enable.SlashesInActionNames"value=“true"/>

action取名時,名字中盡量不要使用.和-如:create.user,my-action,否則會出現(xiàn)一些莫名奇妙的問題。Struts2根據(jù)action元素的method屬性查找方法時有兩種途徑:

(1)查找與method屬性值完全一致的方法

(2)查找doMethod()形式的方法5action配置可以使用default-action-ref元素來聲明默認的action。<packagename=""namespace="/"extends="struts-default">

<default-action-refname="errors"></default-action-ref>

<actionname="errors"><result>/errors.jsp</result></action>

</package>每一個包中都可以有它自己默認的action,但每一個名稱空間應(yīng)該只有一個。如果相同名稱空間的多個包中都申明了默認action,那么哪一個action才是默認的將無法保證。

5action配置動態(tài)方法調(diào)用:

(1).語法格式:actionName!methodName(2).會帶來安全隱患,惡意用戶會利用這一特性來執(zhí)行一些敏感方法。所以一般禁止使用。struts.xml文件中配置如下:

<constantname="struts.enable.DynamicMethodInvocation"value="false"/>

當只需要一個請求轉(zhuǎn)發(fā)時,可做如下操作:action配置中將class屬性省略,此時默認使用ActionSupport類。<actionname=“index”><result>/index.jsp</result></action>5act

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論