




下載本文檔
版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、Struts框架及其在Web開(kāi)發(fā)中的應(yīng)用 摘要 Struts是當(dāng)前Web應(yīng)用開(kāi)發(fā)中最為流行的框架之一。本文簡(jiǎn)要介紹了MVC(Model/View/Controller)設(shè)計(jì)模式和Struts框架的體系結(jié)構(gòu),然后結(jié)合一個(gè)實(shí)例,講述了Struts實(shí)現(xiàn)MVC模式的Web應(yīng)用的過(guò)程。結(jié)果顯示Struts能夠大
2、大提高開(kāi)發(fā)效率,同時(shí)提高系統(tǒng)的可維護(hù)性和擴(kuò)充性。 關(guān)鍵詞 MVC模式;框架;Struts;Web應(yīng)用 0 引言 傳統(tǒng)的Web應(yīng)用開(kāi)發(fā)工具(ASP、JSP)將頁(yè)面顯示、商業(yè)邏輯和數(shù)據(jù)處理大部分都集中在頁(yè)面代碼中,Web應(yīng)用擴(kuò)展維護(hù)比較困難,也不利于開(kāi)發(fā)人員分工協(xié)作,在大型WEB應(yīng)用開(kāi)發(fā)中愈發(fā)顯得力不從心。MVC(Model-View-Controller)設(shè)計(jì)模式將頁(yè)面顯示、商業(yè)邏輯和數(shù)據(jù)處理相分離,最大限度的降低系統(tǒng)各部分之間的耦合性,從而增強(qiáng)系統(tǒng)的可擴(kuò)展維護(hù)性,提高代碼重用率,使系統(tǒng)的
3、層次結(jié)構(gòu)更加清晰,易于分工協(xié)作。而Struts是一個(gè)為開(kāi)發(fā)基于MVC模式的應(yīng)用架構(gòu)的開(kāi)源框架。1 Struts框架的體系結(jié)構(gòu)1.1 MVC設(shè)計(jì)模式 MVC設(shè)計(jì)模式是一種“分治”的思想,它使應(yīng)用程序的輸入、處理和輸出分開(kāi),把應(yīng)用程序分成三個(gè)核心模塊:模型(Model)、視圖(View)和控制器(Controller)。Model用來(lái)儲(chǔ)存應(yīng)用程序的數(shù)據(jù)以及訪問(wèn)、維護(hù)這些數(shù)據(jù)的業(yè)務(wù)邏輯,View建立終端用戶的表示層,Controller是模型與視圖的接口,其作用是獲取并處理HTTP請(qǐng)求,并調(diào)用相關(guān)的業(yè)務(wù)模型中的方法對(duì)請(qǐng)求進(jìn)行處理,然后將對(duì)象
4、模型層次處理后的結(jié)果返回到View。可見(jiàn)MVC設(shè)計(jì)模式的主要優(yōu)點(diǎn)是實(shí)現(xiàn)了業(yè)務(wù)邏輯和顯示邏輯的分離,提高了系統(tǒng)的可維護(hù)性、可擴(kuò)展性、可移植性和組件的復(fù)用性。1.2 Struts框架 Struts是基于MVC的Web應(yīng)用框架,由一組相互協(xié)作的類、Serlvet以及JSP TagLib組成。在Struts框架中,模型由實(shí)現(xiàn)業(yè)務(wù)邏輯的JavaBean或EJB組件構(gòu)成,控制器由ActionServlet和Action來(lái)實(shí)現(xiàn),視圖由一組JSP文件構(gòu)成。Struts框架的體系結(jié)構(gòu)如圖1所示。下面分別從模型、視圖、控制來(lái)看看struts的體系結(jié)構(gòu)。 &
5、#160; 視圖:主要是通過(guò)JSP技術(shù)生成頁(yè)面完成視圖,利用Struts提供的自定義標(biāo)記庫(kù)編寫用戶界面把應(yīng)用邏輯和顯示邏輯分離。Struts框架通過(guò)這些自定義標(biāo)記建立了View和Model之間的聯(lián)系,可以實(shí)現(xiàn)和Model部分中的ActionForm的映像,完成對(duì)用戶數(shù)據(jù)的封裝。圖1 Struts體系結(jié)構(gòu) 控制器:作用是從客戶端接受請(qǐng)求,并選擇執(zhí)行相應(yīng)的業(yè)務(wù)邏輯,然后把響應(yīng)結(jié)果送回到客戶端。在Struts中,控制器由ActionServlet和ActionMapping對(duì)象構(gòu)成,核心是一個(gè)Servlet類型的對(duì)象Action
6、Servlet,它用來(lái)接受客戶端的請(qǐng)求并分發(fā)到相應(yīng)的動(dòng)作類(Action類的子類)。ActionServlet包括一組基于配置的ActionMapping對(duì)象,每個(gè)ActionMapping對(duì)象實(shí)現(xiàn)了一個(gè)請(qǐng)求到一個(gè)具體的Model部分中Action對(duì)象之間的映射。 模型:在Struts中,Model可以分為系統(tǒng)的內(nèi)部狀態(tài)和改變系統(tǒng)狀態(tài)的行為(業(yè)務(wù)邏輯)兩部分。系統(tǒng)的內(nèi)部狀態(tài)常由一組JavaBean表示,業(yè)務(wù)邏輯由Action和ActionForm的類對(duì)象處理。Action對(duì)象封裝了具體的處理邏輯,調(diào)用業(yè)務(wù)邏輯模塊,并且把響應(yīng)提交給合適的View以產(chǎn)生響應(yīng)業(yè)務(wù)對(duì)象更新應(yīng)用
7、程序的狀態(tài)。ActionForm可以派生子類對(duì)象,通過(guò)結(jié)合自定義標(biāo)記庫(kù)以實(shí)現(xiàn)對(duì)客戶端的表單數(shù)據(jù)的良好封裝和支持。Action對(duì)象可以直接對(duì)ActionForm進(jìn)行讀寫,而不再需要和request,response對(duì)象進(jìn)行數(shù)據(jù)交互。通過(guò)ActionForm對(duì)象實(shí)現(xiàn)了對(duì)View和Model之間交互的支持。 Struts-config.xml:用于建立Controller和Model之間的關(guān)系,將各部分緊密聯(lián)系在一起。它描述了Controller所使用的把請(qǐng)求對(duì)應(yīng)到具體處理的法則,同時(shí)它還描述了客戶提供的數(shù)據(jù)與ActionForm組件的對(duì)應(yīng)映射關(guān)系。1
8、.3 Sturts的工作流程 對(duì)于采用Struts框架的Web應(yīng)用,在Web應(yīng)用啟動(dòng)時(shí)就會(huì)加載并初始化ActionServlet,從struts-config.xml文件中讀取配置信息,把他們存放到各種配置對(duì)象中。其具體工作流程如下: 客戶端(Client)通過(guò)本地瀏覽器(Browser)向服務(wù)器發(fā)出一個(gè)請(qǐng)求(HTTP Request)。 控制器(Controller)接收請(qǐng)求,即ActionServlet實(shí)現(xiàn)控制工作。它在struts-config.xml文件中尋找請(qǐng)求的U
9、RL,找到對(duì)應(yīng)的Action。 Action類執(zhí)行建立在模型組件基礎(chǔ)上的業(yè)務(wù)邏輯,模型組件是和應(yīng)用程序關(guān)聯(lián)的。 一旦Action類處理完業(yè)務(wù)邏輯,它把控制權(quán)返回給ActionServlet,Action類提供一個(gè)鍵值作為返回的一部分,它指明了處理的結(jié)果AcLionServlet使用這個(gè)鍵值來(lái)決定在什么視圖中顯示Action的類處理結(jié)果。 當(dāng)ActionServlet把Action類的處理結(jié)果傳送到指定的視圖中,請(qǐng)求的過(guò)程也就完成了。2 Web開(kāi)發(fā)中的應(yīng)用
10、; 以一個(gè)Web考試系統(tǒng)中的考生注冊(cè)子系統(tǒng)為例,說(shuō)明Struts在Web程序開(kāi)發(fā)中的應(yīng)用。考生在注冊(cè)頁(yè)面上輸入考生名、密碼等相關(guān)信息,若注冊(cè)成功,控制將轉(zhuǎn)向一個(gè)顯示注冊(cè)成功的頁(yè)面,否則控制將轉(zhuǎn)向一個(gè)顯示失敗的頁(yè)面。 項(xiàng)目建立 struts可運(yùn)行在多種Web服務(wù)器上,這里使用同樣出自Jakarta項(xiàng)目的Web服務(wù)器Tomcat。首先展開(kāi)struts的壓縮文件到Tomcat的主目錄webapps下,接著在目錄webapps下新建目錄testWeb,將webappsStruts-example下的WEB-INF目錄拷
11、貝到test目錄下,然后將testWEB-INF下的src和classes目錄以及struts-coufig.xml文件中內(nèi)容清空。開(kāi)發(fā)時(shí),將JSP文件放在testWeb目錄下,Java源文件放在testWebWEB-INFsrc下,編譯后的類文件放在testWebWEB-INFclasses下。 實(shí)現(xiàn)視圖功能的用戶界面的設(shè)計(jì) JSP具有定制標(biāo)記和包含Web組件的能力,可以實(shí)現(xiàn)定制的組件、容器和布局管理器,從而實(shí)現(xiàn)可擴(kuò)展的、可重用的和可維護(hù)的Web應(yīng)用界面。Struts中,JSP頁(yè)面中利用Struts框架提供的taglib
12、標(biāo)記庫(kù)的標(biāo)記(如Struts bean,html,logic,template標(biāo)記),能夠大大提高開(kāi)發(fā)效率。在該系統(tǒng)中,其注冊(cè)頁(yè)面reguserinfo.jsp概要如下:<%page contentType=”text/html;charset=UTF-8” language=”java”%><% taglib uri="/WEB-INF/struts-bean.tld" prefix="bean"%> /引用Struts bean標(biāo)記<% taglib uri="/WEB-INF/struts-html.tld&
13、quot; prefix="html"%> /引用Struts html標(biāo)記<html:html locale="true"><head><title>RegisterUser</title></ head><body bgcolor="#FFFF"><html:errors/><html:form action="reguser.do" focus="userID" ><table bo
14、rder="0" width="100%"><tr> <th align="right" >UserName:</th><td align="left"><html: text property="userID" size="20" maxlength="20"/> </td></tr><tr> <th align="right"
15、 >Password:</th><td align="left"><html: password maxlength="20" size="20" property=
16、"password" /></td></tr> <tr> </tr><tr> <td align="right" > <html: submit property="submit" value="submit" /></td><td algin="left"><html: reset /> </td></tr></table></
17、html:form></body></html:html> 實(shí)現(xiàn)模型功能的組件設(shè)計(jì) 構(gòu)建模型部分的組件是工作重點(diǎn),它包含了整個(gè)應(yīng)用程序的業(yè)務(wù)邏輯。此系統(tǒng)設(shè)計(jì)的組件為: 系統(tǒng)狀態(tài)組件(FormBean),即實(shí)體模型類,它繼承自ActionForm類,用來(lái)存放表單數(shù)據(jù),與注冊(cè)頁(yè)面的表單對(duì)應(yīng)的數(shù)據(jù)bean為:import org.apache.struts.action.*;/引用Struts類包public class UserForm extends Acti
18、onForm private String userID= null; private String password= null; public String getUserID()return userID; public void setUserID(String userID)this.userld= userID; public String getPassword()return password; public void setPassword(String password)this. password=passwor
19、d; 指令類組件(ActionBean),它擴(kuò)展了Action類,主要是用來(lái)控制應(yīng)用程序的流程,當(dāng)注冊(cè)考生按“submit”按鈕后,來(lái)自用戶的請(qǐng)求被Servlet(Controller)送到指令類組件RegUserAction,指令類調(diào)用相應(yīng)的業(yè)務(wù)邏輯進(jìn)行處理,然后把請(qǐng)求轉(zhuǎn)發(fā)給相關(guān)的JSP,其程序概要為:;import org.apache.struts.action.*; public class RegUserAction extends Action public ActionForward perform(ActionMapping &
20、#160; mapping, ActionForm form, HttpServletRequest req, HttpServletResponse response) boolean flag; String username=req.getParameter(“UserID”);String password=req.getParameter(“password”); /獲取其他注冊(cè)信息,并根據(jù)注冊(cè)信息,做相應(yīng)的數(shù)據(jù)庫(kù)操作,返回是否注冊(cè)成功標(biāo)志flag if (flag)tryUserDirectory.getIn
21、stance().setUser(UserID, password);return mapping.findForward(“success”);catch(UserDirectoryException e) return mapping.findForward(“failure”);return mapping.findForward(“failure”); /注冊(cè)成功后轉(zhuǎn)發(fā)給相應(yīng)的jsp文件其中UserDirectory是一個(gè)helper類,記錄UserID和password 到一個(gè)標(biāo)準(zhǔn)的屬性文件之中。 實(shí)現(xiàn)控制器功能的指令
22、0; Struts框架的核心是控制器類ActionServlet,不需要重新設(shè)計(jì)而直接使用。ActionServlet的核心是struts-config.xml配置文件,它包含了應(yīng)用程序的整個(gè)邏輯流程。在考生注冊(cè)信息過(guò)程中,用reguserinfo.jsp實(shí)現(xiàn)注冊(cè)頁(yè)面;用UserForm(擴(kuò)展了ActionForm)封裝了表單數(shù)據(jù);用RegUserAction(擴(kuò)展了Action)實(shí)現(xiàn)了考生注冊(cè)信息(業(yè)務(wù)邏輯)并控制了應(yīng)用程序流程;而在struts-config.xml配置文件里實(shí)現(xiàn)了注冊(cè)頁(yè)面(reguserinfo.jsp)、數(shù)據(jù)bean(UserForm)、邏輯bean (RegUserAction)之間的聯(lián)系,其配置信息為:;<struts-config><form-beans> <form-bean name="userForm" type=" UserForm"/></form-beans>
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 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ì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 2025-2030年中國(guó)美白凈化潔面膏項(xiàng)目投資可行性研究分析報(bào)告
- 2025-2030年中國(guó)半導(dǎo)體線項(xiàng)目投資可行性研究分析報(bào)告
- 2025-2030年中國(guó)繞線機(jī)測(cè)試儀行業(yè)深度研究分析報(bào)告
- 2025-2030年中國(guó)厚漿型面漆項(xiàng)目投資可行性研究分析報(bào)告
- 商鋪房源出售合同協(xié)議
- 園林苗木供貨合同協(xié)議
- 外賣加盟店合同協(xié)議
- 外用工勞動(dòng)合同協(xié)議
- 園服供應(yīng)商合同協(xié)議
- 培訓(xùn)模特簽約合同協(xié)議
- 印章封存登記表
- 社會(huì)工作者之初級(jí)社會(huì)工作實(shí)務(wù)模擬試題及答案A4打印
- 工作交接表excel模板
- 滾筒式柑橘分選機(jī)的設(shè)計(jì)
- 孟母三遷成語(yǔ)故事
- 瓦斯發(fā)電方案
- Q-CR 807-2020 隧道噴射混凝土用液體無(wú)堿速凝劑
- 民間非營(yíng)利組織會(huì)計(jì)制度分解
- GB/T 20564.2-2017汽車用高強(qiáng)度冷連軋鋼板及鋼帶第2部分:雙相鋼
- GB/T 13914-2013沖壓件尺寸公差
- GB/T 11349.3-1992機(jī)械導(dǎo)納的試驗(yàn)確定沖擊激勵(lì)法
評(píng)論
0/150
提交評(píng)論