摘要:Struts是MVC模式的經(jīng)典實(shí)現(xiàn),它強(qiáng)制性地將Web應(yīng)用程序分割為模型、視圖和控制器三個組件,提高了系統(tǒng)的可維護(hù)性與可移植性,文章運(yùn)用原理說明與實(shí)例解析相結(jié)合的方法,對Struts的技術(shù)特性與應(yīng)用形式作了進(jìn)一步的探索與研究。
關(guān)鍵詞:Struts;MVC; 網(wǎng)絡(luò)購物系統(tǒng)
1 MVC設(shè)計(jì)模式
MVC是一種經(jīng)典的設(shè)計(jì)模式。它強(qiáng)制性地使應(yīng)用程序的輸入、處理和輸出分開,把應(yīng)用程序抽象為三個核心部件:Model(模型)、View(視圖)、Controller(控制器)。模型代表程序的核心功能,負(fù)責(zé)實(shí)現(xiàn)業(yè)務(wù)邏輯。視圖負(fù)責(zé)提供用戶輸入接口或展現(xiàn)業(yè)務(wù)處理的結(jié)果數(shù)據(jù),實(shí)現(xiàn)與用戶的交互??刂破髫?fù)責(zé)接受用戶請求,調(diào)用某個模型處理用戶請求,最后將結(jié)果送給特定視圖進(jìn)行顯示。MVC模式實(shí)現(xiàn)功能模塊與顯示模塊的分離,因此提高了應(yīng)用系統(tǒng)的可維護(hù)、可擴(kuò)展、可移植及組件的可復(fù)用性。三者之間的關(guān)系如圖1所示。
2 Struts對MVC模式的實(shí)現(xiàn)與工作流程
2.1 Struts基于MVC模式的組件結(jié)構(gòu)
Struts是由Apache開源軟件聯(lián)盟提供的一套用于構(gòu)建Java Web應(yīng)用程序的框架。它的目標(biāo)是將Web應(yīng)用程序分離為視圖層、控制層、模型層,也就是MVC模式。
視圖。它主要由JSP與ActionForm構(gòu)成,Struts定義專用的標(biāo)簽庫簡化了視圖組件的開發(fā),提高了開發(fā)效率。基于ActionForm的表單顯示、表單驗(yàn)證簡化了用戶界面的開發(fā)。
模型。模型代表了一個系統(tǒng)的業(yè)務(wù)數(shù)據(jù)和業(yè)務(wù)邏輯,并負(fù)責(zé)訪問和更新持久化數(shù)據(jù)。在Struts中,系統(tǒng)業(yè)務(wù)邏輯主要由JavaBean或EJB組件來體現(xiàn)。
控制器??刂破髦饕葾ctionServlet類和Action類來實(shí)現(xiàn)。ActionServlet類是Struts框架中的核心組件,所有的用戶請求都先由ActionServlet來處理,然后根據(jù)配置文件struts-config.xml的配置信息,把請求轉(zhuǎn)發(fā)給合適的Action對象。Action類是用戶請求和業(yè)務(wù)邏輯之間的橋梁,每個Action充當(dāng)著一項(xiàng)業(yè)務(wù)代理,同時(shí),Action類還負(fù)責(zé)更新模型的狀態(tài),并幫助控制應(yīng)用程序的流程。
2.2 Struts的工作流程
當(dāng)Actionservlet(控制器)接收到一個客戶請求時(shí),將執(zhí)行如下流程:
檢索和用戶請求匹配的ActionMaPPing實(shí)例,如果不存在,就返回用戶請求路徑無效的信息。
如果AstionForm實(shí)例不存在,就創(chuàng)建一個ActionForm對象,把客戶提交的表單數(shù)據(jù)封裝到ActionForm對象中。
根據(jù)配置信息決定是否需要表單驗(yàn)證,如果需要驗(yàn)證,就調(diào)用ActionForm的驗(yàn)證方法validate()。
如果ActionForm的validate()方法返回一個不包含任何ActionMessage的ActlonErrors集合對象或返回nun,就表示表單驗(yàn)證成功。
Actionservlet根據(jù)AstionMapping實(shí)例包含的映射信息決定將請求轉(zhuǎn)發(fā)給系統(tǒng)的哪個Action,如果相應(yīng)的Action實(shí)例不存在,就先創(chuàng)建這個實(shí)例,然后調(diào)用Aetion的execute()方法。
Action的execute()方法返回一個ActionForm對象,Actionservlet再把客戶請求轉(zhuǎn)發(fā)給ActionForward對象所指向的JSP組件。ActionForward對象指向的視圖組件生成動態(tài)網(wǎng)頁,返回給客戶。對于以上流程的第4,如果ActionForm的validate()方法返回一個包含一個或多個ActionMessage的ActionErrors對象,就表示表單驗(yàn)證失敗,此時(shí)Actionservlet將直接把請求轉(zhuǎn)發(fā)給包含用戶提交表單的JSP組件。在這種情況下,不會創(chuàng)建Action對象。Struts的體系結(jié)構(gòu)如圖2所示。
3基于Struts框架技術(shù)的網(wǎng)上購物系統(tǒng)的體系結(jié)構(gòu)
下文以一個名為ShoppingOnline的購物系統(tǒng)的應(yīng)用為例,介紹系統(tǒng)基于Struts技術(shù)的架構(gòu)設(shè)計(jì)與工作流程。
3.1系統(tǒng)架構(gòu)設(shè)計(jì)
用戶通過瀏覽器訪問該系統(tǒng),故系統(tǒng)的軟件架構(gòu)采用的是多層的B/S結(jié)構(gòu),利用Struts框架技術(shù)實(shí)現(xiàn)快速開發(fā)。用JSP、html組成實(shí)現(xiàn)View(視圖)組件,使用ActionServlet對象結(jié)合structs-config.xml文件配置充當(dāng)Controller(控制器),并將業(yè)務(wù)處理邏輯抽象成各種接口和實(shí)現(xiàn)類,再由不同的Action調(diào)用,這樣就組成了Model(模型)。系統(tǒng)的架構(gòu)設(shè)計(jì)如圖3所示。
3.2系統(tǒng)的工作流程
系統(tǒng)根據(jù)功能劃分,包含了顧客注冊登陸、商品檢索瀏覽、購物車、商品管理、訂單管理、會員管理與系統(tǒng)用戶管理八個主要模塊。
以顧客注冊模塊為例,當(dāng)用戶填寫注冊表單提交之后,register.jsp注冊表單的內(nèi)容由Struts自動封裝到MemberFormBean對象中,并遞交Validator進(jìn)行表單有效性驗(yàn)證,如果驗(yàn)證失敗則返回register.jsp,要求重新填寫表單直到通過驗(yàn)證,否則就將MemberFormBean對象送交給Memaction的reg()方法進(jìn)行處理,處理完成后將結(jié)果的提示信息帶回給register.jsp,并完成注冊。顧客注冊模塊的Struct實(shí)現(xiàn)如圖4所示。
參考文獻(xiàn)
[1]潘昊,陳兵,江艷玲. 基于Struts框架的電子政務(wù)應(yīng)用系統(tǒng)開發(fā)[J].軟件導(dǎo)刊,2008(2)
[2]劉斌Java Web整合開發(fā)[M].電子工業(yè)出版社,2007(11).
[3]戚欣,熊前興.基于MVC設(shè)計(jì)模式的電子商務(wù)WEB應(yīng)用框架[J].武漢理工大學(xué)學(xué)報(bào)(信息與管理工程版),2002(2).
[4]劉鋒,趙貴根,周明天,等.基于J2EE的電子政務(wù)工作流的研究與設(shè)計(jì)[J].計(jì)算機(jī)應(yīng)用研究,2005(2).
[5]韋加強(qiáng),潘蔭榮.基于J2EE平臺和MVC模型的電子政務(wù)系統(tǒng)的設(shè)計(jì)[J].信息技術(shù),2005(8).