




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Java教程 基于MVC模式的Struts框架研究與應(yīng)用(1)2007年09月09日 星期日 下午 07:01摘要: Struts框架具有組件的模塊化,靈活性和重用性的優(yōu)點(diǎn),同時(shí)簡(jiǎn)化了基于MVC的web應(yīng)用程序的開(kāi)發(fā)。本文討論了Struts框架實(shí)現(xiàn)MVC模式的原理與方法,給出了一個(gè)具體的應(yīng)用實(shí)例。分布式企業(yè)應(yīng)用軟件結(jié)構(gòu)復(fù)雜、涉及多種技術(shù),對(duì)設(shè)計(jì)開(kāi)發(fā)人員提出了很高的要求。在此情況下,運(yùn)用設(shè)計(jì)模式可復(fù)用的設(shè)計(jì)方案進(jìn)行軟件的設(shè)計(jì)開(kāi)發(fā)十分必要。MVC模式已被證明是一種成功的軟件設(shè)計(jì)模式,本文主要討論了一種實(shí)現(xiàn)MVC模式的應(yīng)用框架Struts,并通過(guò)一個(gè)實(shí)例展示了Struts框架實(shí)現(xiàn)MVC模式的方法。M
2、VC設(shè)計(jì)模式MVC(Modle-View-Controller,模型-視圖-控制器)模式是Xerox PARC在20世紀(jì)80年代為編程語(yǔ)言Smalltalk-80所設(shè)計(jì)的一種軟件設(shè)計(jì)模式,至今已被廣泛使用,并被推薦為Sun公司J2EE平臺(tái)的設(shè)計(jì)模式,其為開(kāi)發(fā)交互式應(yīng)用系統(tǒng)提供了一個(gè)優(yōu)秀的設(shè)計(jì)模式,受到越來(lái)越多開(kāi)發(fā)者的歡迎。MVC模式主要由3個(gè)部分組成:模型、視圖和控制器,其結(jié)構(gòu)如圖1所示。圖1 MVC模式框架模型表示業(yè)務(wù)邏輯和業(yè)務(wù)規(guī)則等,在MVC的三個(gè)部件中擁有最多的處理任務(wù)。它可以用JavaBean和EJB等組件技術(shù)來(lái)處理數(shù)據(jù)庫(kù)的訪問(wèn)。模型能為多個(gè)視圖提供數(shù)據(jù)。由于應(yīng)用于模型的代碼只需寫(xiě)一次
3、就可以被多個(gè)視圖重用,所以減少了代碼的重復(fù)性。視圖是屏幕上的顯示。模型進(jìn)行操作之后,其結(jié)果就是通過(guò)視圖來(lái)顯示的。在視圖中其實(shí)沒(méi)有真正的處理發(fā)生,只是作為一種輸出數(shù)據(jù)并允許用戶(hù)操作的方式??刂破饔糜诠芾碛脩?hù)與視圖發(fā)生的交互。一旦用戶(hù)想對(duì)模型進(jìn)行處理時(shí),它不能直接去執(zhí)行模型,而是通過(guò)控制器來(lái)間接地實(shí)現(xiàn)。控制器能從視圖中取值,然后將相應(yīng)的值傳給模型進(jìn)行處理。控制器接受用戶(hù)的輸入并調(diào)用模型和視圖去完成用戶(hù)的需求。由上述可知,MVC模式的處理過(guò)程是:首先由控制器接收用戶(hù)的請(qǐng)求,并決定應(yīng)該調(diào)用哪個(gè)模型來(lái)進(jìn)行處理,然后模型用業(yè)務(wù)邏輯來(lái)處理用戶(hù)的請(qǐng)求并返回?cái)?shù)據(jù),最后控制器用相應(yīng)的視圖返回?cái)?shù)據(jù),并通過(guò)表達(dá)層呈現(xiàn)
4、給用戶(hù)。MVC本身就是一個(gè)非常復(fù)雜的系統(tǒng),所以采用MVC實(shí)現(xiàn)Web應(yīng)用時(shí),最好選一個(gè)現(xiàn)成的MVC框架,在此之下進(jìn)行開(kāi)發(fā),從而取得事半功倍的效果?,F(xiàn)在有很多可供使用的MVC框架,由于Struts有完整的文檔并且相對(duì)來(lái)講比較簡(jiǎn)單,所以用它開(kāi)發(fā)MVC系統(tǒng)還是比較方便地。Struts框架Struts是Apache組織的一個(gè)開(kāi)放源碼項(xiàng)目。Struts是一個(gè)比較好的MVC框架,提供了對(duì)開(kāi)發(fā)MVC系統(tǒng)的底層支持,它采用的主要技術(shù)是Servlet,JSP和Custom tag library。其基本構(gòu)成如圖2所示。圖2 Struts框架圖由圖2可以看出,在Struts框架中Controller功能由Actio
5、nServlet和ActionMapping對(duì)象構(gòu)成,核心是一個(gè)Servlet類(lèi)型的對(duì)象ActionServlet,它用來(lái)接受客戶(hù)端的請(qǐng)求。ActionServlet包括一組基于配置的ActionMapping對(duì)象,每個(gè)ActionMapping對(duì)象實(shí)現(xiàn)了一個(gè)請(qǐng)求到一個(gè)具體的Model部分中Action處理器對(duì)象之間的映射。Model部分由Action和ActionForm對(duì)象構(gòu)成。所有的Action處理器對(duì)象都是開(kāi)發(fā)者從Struts的Action類(lèi)派生的子類(lèi)。Action處理器對(duì)象封裝了具體的處理邏輯,調(diào)用業(yè)務(wù)邏輯模塊,并且把響應(yīng)提交到合適的View組件以產(chǎn)生響應(yīng)。Struts提供的Acti
6、onForm組件對(duì)象可以通過(guò)定義屬性描述客戶(hù)端表單數(shù)據(jù)。開(kāi)發(fā)者可以從它派生子類(lèi)對(duì)象,利用它和Struts提供的自定義標(biāo)記庫(kù)結(jié)合可以實(shí)現(xiàn)對(duì)客戶(hù)端的表單數(shù)據(jù)的良好封裝和支持,Action處理器對(duì)象可以直接對(duì)它進(jìn)行讀寫(xiě),而不再需要和request、response對(duì)象進(jìn)行數(shù)據(jù)交互。通過(guò)ActionForm組件對(duì)象實(shí)現(xiàn)了對(duì)View和Model之間交互的支持。View部分是通過(guò)JSP技術(shù)實(shí)現(xiàn)的。Struts提供了自定義的標(biāo)記庫(kù),通過(guò)這些自定義標(biāo)記可以非常好地和系統(tǒng)的Model部分交互,通過(guò)使用這些自定義標(biāo)記創(chuàng)建的JSP表單,可以實(shí)現(xiàn)和Model部分中的ActionForm的映射,完成對(duì)用戶(hù)數(shù)據(jù)的封裝?;?/p>
7、于MVC模式的Struts框架的應(yīng)用下面通過(guò)一個(gè)具體實(shí)例說(shuō)明如何應(yīng)用Struts框架構(gòu)建應(yīng)用程序。該實(shí)例是一個(gè)全面預(yù)算管理系統(tǒng)中的預(yù)算資料模塊,包括資料錄入、資料查詢(xún)、資料修改和資料刪除四個(gè)功能,用于完成預(yù)算資料的錄入、查詢(xún)、修改及刪除。具體在使用Struts框架時(shí),對(duì)應(yīng)各個(gè)部分的開(kāi)發(fā)工作主要包括:1、構(gòu)建視圖在Struts框架中,視圖的實(shí)現(xiàn)主要采用JSP技術(shù),但與傳統(tǒng)的JSP相比有兩個(gè)顯著的不同。首先,在Struts下使用JSP開(kāi)發(fā)視圖,在頁(yè)面中沒(méi)有包含任何的腳本程序,只是單純的完成數(shù)據(jù)傳送以及接收和顯示返回的數(shù)據(jù)。對(duì)數(shù)據(jù)的處理以及頁(yè)面的跳轉(zhuǎn)都在業(yè)務(wù)層中來(lái)實(shí)現(xiàn)。這樣做實(shí)現(xiàn)了業(yè)務(wù)邏輯和表示邏輯
8、的完全分離,提高了一個(gè)應(yīng)用程序的性能和可擴(kuò)展性,并有利于程序的復(fù)用。第二,Struts框架提供了一組可擴(kuò)展的自定義標(biāo)記庫(kù),主要包括: Bean標(biāo)記、 Logic標(biāo)記、HTML標(biāo)記和模板標(biāo)記。通過(guò)使用標(biāo)記,可以簡(jiǎn)化創(chuàng)建用戶(hù)界面的過(guò)程,并且更好地實(shí)現(xiàn)數(shù)據(jù)的封裝。通過(guò)使用這些自定義標(biāo)記創(chuàng)建的JSP表單,可以實(shí)現(xiàn)和業(yè)務(wù)層中的ActionForm的映射,非常好地和系統(tǒng)的業(yè)務(wù)邏輯部分交互。下面給出資料錄入頁(yè)面的部分實(shí)現(xiàn)代碼:% page contentType="text/html; charset=GBK" % taglib uri="/WEB-INF/struts-htm
9、l.tld" prefix="html" % taglib uri="/WEB-INF/struts-bean.tld" prefix="bean" % taglib uri="/WEB-INF/struts-logic.tld" prefix="logic" %htmlheadtitle前期準(zhǔn)備資料錄入/titlelink rel="stylesheet" type="text/css" href="./images/mobile.c
10、ss"/headbody bgcolor="#ffffff"html:form action="/information/budgetinfoadd" enctype="multipart/form-data"table width="95%" border="1" cellspacing="1" cellpadding="2" bordercolor="#CBE7F8" align="center"tr
11、bgcolor="#F2F9FD"td width="20%"類(lèi)型:/tdtdhtml:select property="infoType" styleClass="input2"html:options collection="TypeList" property="id" labelProperty="typeName"/Java教程 基于MVC模式的Struts框架研究與應(yīng)用(2)2007年09月09日 星期日 下午 07:02/html:selec
12、t/td/tr/table/html:form/body/html程序中首先引入了HTML、Bean和Logic標(biāo)記庫(kù),然后用action指出調(diào)用的Action組件的絕對(duì)路徑,標(biāo)記html:form和/html:form封裝了表單數(shù)據(jù),在業(yè)務(wù)層中用相應(yīng)的ActionForm組件可以將輸入的數(shù)據(jù)全部得到。可以看出在視圖中沒(méi)有進(jìn)行任何的業(yè)務(wù)邏輯的處理,其主要作用是給出客戶(hù)端顯示的信息和處理結(jié)果,以及請(qǐng)求的轉(zhuǎn)發(fā),它是和用戶(hù)交互的接口。2、構(gòu)建模型模型采用JavaBean和EJB組件,設(shè)計(jì)和實(shí)現(xiàn)系統(tǒng)的業(yè)務(wù)邏輯。根據(jù)不同的請(qǐng)求從Action派生具體Action處理對(duì)象,完成“做什么”的任務(wù)來(lái)調(diào)用由Bea
13、n構(gòu)成的業(yè)務(wù)組件,創(chuàng)建由ActionForm 的派生類(lèi)實(shí)現(xiàn)對(duì)客戶(hù)端表單數(shù)據(jù)的封裝。下面以BudgetInfoAddForm這個(gè)ActionForm Bean進(jìn)行說(shuō)明:public final class BudgetInfoAddForm extends ActionForm private String infoType;private String title;private String content;private FormFile infoFile;這里表示BudgetInfoAddForm繼承于ActionForm,在這個(gè)Bean中定義了視圖中所要顯示數(shù)據(jù)信息的參數(shù),包括info
14、Type,資料分類(lèi);title,資料標(biāo)題;content,資料內(nèi)容;infoFile, 資料文件。同時(shí)在BudgetInfoAddForm中提供了設(shè)定和訪問(wèn)這些參數(shù)的方法:public String getInfoType()public void setInfoType(String infoType)public String getTitle()public void setTitle(String title)public String getContent()public void setContent(String content)public FormFile getInfoFi
15、le()public void setInfoFile(FormFile infoFile)public void reset(ActionMapping mapping, HttpServletRequest request) title = null;content = null;infoFile = null;3、構(gòu)建控制器在Struts應(yīng)用框架中,中心控制器(ActionServlet)是由Struts框架本身所提供,開(kāi)發(fā)人員一般無(wú)須對(duì)該ActionServlet進(jìn)行再次開(kāi)發(fā);負(fù)責(zé)具體業(yè)務(wù)處理的Action類(lèi)則是開(kāi)發(fā)者開(kāi)發(fā)實(shí)現(xiàn)的重點(diǎn),在這些Action對(duì)象中會(huì)進(jìn)行所有的業(yè)務(wù)操作,處理完畢,由Struts的ActionServlet轉(zhuǎn)向到j(luò)sp頁(yè)面,將處理結(jié)果返回給客戶(hù)端。在預(yù)算資料模塊中,實(shí)現(xiàn)了四個(gè)Action:BudgetInfoAddAction,用于資料錄入; BudgetInfoContentAction,用于資料查詢(xún); BudgetInfoUpdateAction,用于資料修改;BudgetInfoDelAction,用于資料刪除。4、建立配置文件Struts框架中有兩個(gè)配置文件web.xml和struts-c
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 中石油系統(tǒng)培訓(xùn)課件
- py hon爬蟲(chóng)畢業(yè)論文
- 幼兒園一日常規(guī)培養(yǎng)的論文
- 基礎(chǔ)教育外語(yǔ)教學(xué)研究期刊官網(wǎng)
- 成人教育畢業(yè)生登記表范本
- 門(mén)窗研發(fā)培訓(xùn)課件下載
- 重度顱腦損傷術(shù)后護(hù)理
- 專(zhuān)科培訓(xùn)后的職業(yè)發(fā)展與提升
- 鐘山鎮(zhèn)小學(xué)通訊員培訓(xùn)
- 財(cái)務(wù)稅務(wù)培訓(xùn)
- 藥物配伍禁忌查詢(xún)表
- 水 泵 安 裝 記 錄
- 大健康產(chǎn)業(yè)商業(yè)計(jì)劃書(shū)
- GB∕T 7528-2019 橡膠和塑料軟管及軟管組合件 術(shù)語(yǔ)
- 常州市機(jī)械行業(yè)安管考試題庫(kù)
- 門(mén)店日常衛(wèi)生檢查表
- FANUC機(jī)器人R-2000iA機(jī)械單元維護(hù)手冊(cè)
- 槽邊排風(fēng)罩的設(shè)計(jì)計(jì)算
- 中國(guó)當(dāng)代文學(xué)專(zhuān)題-國(guó)家開(kāi)放大學(xué)2022年1月期末考試復(fù)習(xí)資料-漢語(yǔ)言本科復(fù)習(xí)資料
- 機(jī)動(dòng)車(chē)維修經(jīng)營(yíng)備案表
- 超星爾雅學(xué)習(xí)通《國(guó)際金融》2020章節(jié)測(cè)試含答案(上)
評(píng)論
0/150
提交評(píng)論