??? 摘 要: Struts是目前面向Web系統(tǒng)開(kāi)發(fā)的一種成熟框架。介紹了框架及設(shè)計(jì)模式" title="設(shè)計(jì)模式">設(shè)計(jì)模式的基本思想,闡述了基于MVC模式的struts框架的體系結(jié)構(gòu)及主要組成組件,并基于struts框架開(kāi)發(fā)了高考網(wǎng)上報(bào)名系統(tǒng)" title="報(bào)名系統(tǒng)">報(bào)名系統(tǒng)。
??? 關(guān)鍵詞:軟件復(fù)用" title="復(fù)用">復(fù)用? 領(lǐng)域框架? Struts? Web應(yīng)用? 報(bào)名系統(tǒng)
?
??? 軟件復(fù)用可以縮短軟件的開(kāi)發(fā)周期,提高軟件的可靠性,降低軟件的開(kāi)發(fā)成本,因此軟件復(fù)用技術(shù)被認(rèn)為是解決軟件危機(jī)的有效途徑,成為軟件工程的研究熱點(diǎn)[1]。面向領(lǐng)域的復(fù)用是提高軟件復(fù)用水平的主要途徑,工業(yè)化的軟件復(fù)用已經(jīng)從通用類(lèi)庫(kù)進(jìn)化到了面向領(lǐng)域的應(yīng)用框架[2]。
??? Struts是目前Web開(kāi)發(fā)中比較成熟的一種框架,通過(guò)把Servlet、JSP、JavaBean、自定義標(biāo)簽和信息資源整合到一個(gè)統(tǒng)一的框架中,為Web開(kāi)發(fā)提供了具有高可配置性的MVC開(kāi)發(fā)模式。本文從軟件體系結(jié)構(gòu)的理論著手,利用現(xiàn)有的理論體系和技術(shù)框架指導(dǎo)應(yīng)用軟件開(kāi)發(fā)中的實(shí)際問(wèn)題,在MVC模式的指導(dǎo)下設(shè)計(jì)并實(shí)現(xiàn)了一個(gè)基于Struts框架的高考網(wǎng)上報(bào)名系統(tǒng)。實(shí)踐表明,采用這種方法開(kāi)發(fā)應(yīng)用軟件能擴(kuò)大軟件代碼的復(fù)用率,提高軟件代碼的復(fù)用質(zhì)量和開(kāi)發(fā)效率。
1 框架的概念
??? 軟件生產(chǎn)中的重用技術(shù)由來(lái)已久,從最早使用的函數(shù)庫(kù),到現(xiàn)在廣泛使用的類(lèi)庫(kù)、構(gòu)件庫(kù)" title="構(gòu)件庫(kù)">構(gòu)件庫(kù),但這些都只能復(fù)用小型的組件。隨著面向?qū)ο蠹夹g(shù)的出現(xiàn),研究人員開(kāi)發(fā)了一種能復(fù)用大型組件的技術(shù)——框架[2]。
1.1 框架與構(gòu)件
??? 一個(gè)框架是一個(gè)可復(fù)用的設(shè)計(jì)構(gòu)件,它規(guī)定了應(yīng)用的體系結(jié)構(gòu),闡明了整個(gè)設(shè)計(jì)、協(xié)作構(gòu)件之間的依賴關(guān)系、責(zé)任分配和控制流程,表現(xiàn)為一組抽象類(lèi)及其實(shí)例之間協(xié)作的方法,它為構(gòu)件復(fù)用提供了上下文(Context)關(guān)系,因此構(gòu)件庫(kù)的大規(guī)模重用也需要框架。構(gòu)件領(lǐng)域框架方法是構(gòu)件技術(shù)、軟件體系結(jié)構(gòu)研究和應(yīng)用軟件開(kāi)發(fā)三方面發(fā)展結(jié)合的產(chǎn)物。在很多情況下,框架通常以構(gòu)件庫(kù)的形式出現(xiàn),但構(gòu)件庫(kù)只是框架的一個(gè)重要部分??蚣艿年P(guān)鍵還在于框架內(nèi)對(duì)象間的交互模式和控制流模式??蚣転闃?gòu)件提供重用的環(huán)境,為構(gòu)件處理錯(cuò)誤、交換數(shù)據(jù)及激活操作提供了標(biāo)準(zhǔn)的方法。應(yīng)用框架強(qiáng)調(diào)的是軟件的設(shè)計(jì)重用性和系統(tǒng)的可擴(kuò)充性,以縮短大型應(yīng)用軟件系統(tǒng)的開(kāi)發(fā)周期,提高開(kāi)發(fā)質(zhì)量。與傳統(tǒng)的基于類(lèi)庫(kù)的面向?qū)ο笾赜眉夹g(shù)比較,應(yīng)用框架更注重于面向?qū)I(yè)領(lǐng)域的軟件重用。
1.2? 框架和設(shè)計(jì)模式
??? 框架、設(shè)計(jì)模式這兩個(gè)概念總?cè)菀妆换煜?,它們雖然相似,卻有著本質(zhì)的不同。設(shè)計(jì)模式是對(duì)在某種環(huán)境中反復(fù)出現(xiàn)的問(wèn)題以及解決該問(wèn)題的方案的描述,它比框架更抽象;框架可以用代碼表示,也能夠直接執(zhí)行或復(fù)用,而設(shè)計(jì)模式只有實(shí)例才能用代碼表示;設(shè)計(jì)模式是比框架更小的元素,一個(gè)框架中往往含有一個(gè)或多個(gè)設(shè)計(jì)模式;框架總是針對(duì)某一特定應(yīng)用領(lǐng)域,但同一模式卻可適用于各種應(yīng)用。簡(jiǎn)單地說(shuō),框架是軟件,而設(shè)計(jì)模式是軟件的知識(shí)。在軟件開(kāi)發(fā)過(guò)程中把框架和模式配合起來(lái)使用,可以極大地提高軟件的重用性。
2 面向Web應(yīng)用的Struts框架
??? Struts是一種基于MVC模式的開(kāi)放源代碼的應(yīng)用框架,它將應(yīng)用程序分解為業(yè)務(wù)邏輯、控制邏輯和表現(xiàn)邏輯,降低了各邏輯層之間的耦合度,提高了應(yīng)用程序的開(kāi)發(fā)速度及可維護(hù)性和可重用性。
2.1 MVC設(shè)計(jì)模式
??? 模型-視圖-控制器MVC(Modle-View-Controller)模式是Xerox PARC在二十世紀(jì)80年代為編程語(yǔ)言Smalltalk-80所設(shè)計(jì)的一種軟件設(shè)計(jì)模式,至今已被廣泛使用,并被推薦為Sun公司J2EE平臺(tái)的設(shè)計(jì)模式。MVC模式主要由三個(gè)部分組成:模型、視圖和控制器,其結(jié)構(gòu)如圖1所示。
?
??? 模型表示業(yè)務(wù)邏輯和業(yè)務(wù)規(guī)則等,模型能為多個(gè)視圖提供數(shù)據(jù),它是MVC的三個(gè)部件中處理任務(wù)最多的一個(gè)。它可以用JavaBean和EJB等組件技術(shù)來(lái)處理數(shù)據(jù)庫(kù)的訪問(wèn)。由于應(yīng)用于模型的代碼只需寫(xiě)一次就可以被多個(gè)視圖重用,所以減少了代碼的重復(fù)性。視圖是屏幕上的顯示,模型進(jìn)行操作之后,其結(jié)果就是通過(guò)視圖來(lái)顯示的。在視圖中其實(shí)沒(méi)有真正的處理發(fā)生,只是作為一種輸出數(shù)據(jù)并允許用戶操作的方式??刂破饔糜诠芾碛脩襞c視圖發(fā)生的交互。當(dāng)用戶想對(duì)模型進(jìn)行處理時(shí),它不能直接去執(zhí)行模型,而是通過(guò)控制器來(lái)間接地實(shí)現(xiàn)??刂破髂軓囊晥D中取值,然后將相應(yīng)的值傳送給模型進(jìn)行處理??刂破鹘邮沼脩舻妮斎氩⒄{(diào)用模型和視圖去完成用戶的需求。
2.2 Struts框架
??? Struts體系結(jié)構(gòu)實(shí)現(xiàn)了MVC設(shè)計(jì)模式的概念,它將Model、View和Controller分別映射到Web應(yīng)用中的組件,其結(jié)構(gòu)如圖2所示。
?
??? 在Struts框架中Controller功能由ActionServlet和ActionMapping對(duì)象構(gòu)成,核心是一個(gè)Servlet類(lèi)型的對(duì)象ActionServlet,它用來(lái)接收客戶端的請(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提供的ActionForm組件對(duì)象可以通過(guò)定義屬性描述客戶端表單" title="表單">表單數(shù)據(jù),開(kāi)發(fā)者可以從它派生子類(lèi)對(duì)象,并利用它和Struts提供的自定義標(biāo)記庫(kù)相結(jié)合,可以實(shí)現(xiàn)對(duì)客戶端的表單數(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)記庫(kù)可以非常容易地和系統(tǒng)的Model部分交互,通過(guò)使用這些自定義標(biāo)記庫(kù)創(chuàng)建的JSP表單,可以實(shí)現(xiàn)對(duì)Model部分中的ActionForm的映射,完成對(duì)用戶數(shù)據(jù)的封裝。
3 基于Struts框架的高考網(wǎng)上報(bào)名系統(tǒng)
??? 隨著各類(lèi)考試、招生業(yè)務(wù)過(guò)程信息化建設(shè)的不斷完善和深入,傳統(tǒng)的C/S架構(gòu)的報(bào)名系統(tǒng)已經(jīng)不能適應(yīng)日益變化的需求。各級(jí)報(bào)名招考系統(tǒng)都傾向于采用Web形式的系統(tǒng)應(yīng)用,在這種情況下,本文基于MVC設(shè)計(jì)模式的Struts框架開(kāi)發(fā)了廣東省普通高考網(wǎng)上報(bào)名系統(tǒng)。該架構(gòu)可簡(jiǎn)述為:為數(shù)據(jù)基本信息表創(chuàng)建數(shù)據(jù)模型(Model),封裝其所有屬性以及對(duì)屬性的Get和Set等方法,根據(jù)具體需求創(chuàng)建一系列Javabean的操作,用JSP來(lái)顯示Model的內(nèi)容,用控制器Web.xml來(lái)控制對(duì)定向和資源文件的讀取。該結(jié)構(gòu)使得系統(tǒng)具有良好的開(kāi)發(fā)效率、可伸縮性、靈活性和健壯性。
??? 網(wǎng)上報(bào)名系統(tǒng)用現(xiàn)代化的網(wǎng)絡(luò)手段實(shí)現(xiàn)了報(bào)考工作,方便了考生報(bào)名,減少了考生數(shù)據(jù)出錯(cuò)幾率,考生可登錄網(wǎng)站直接輸入報(bào)名表信息,并可隨時(shí)查詢和修改個(gè)人信息。同時(shí),系統(tǒng)也降低了各級(jí)考試招生部門(mén)的工作量,提高了工作效率,招辦可登錄網(wǎng)站對(duì)考生數(shù)據(jù)進(jìn)行統(tǒng)一管理,對(duì)高考報(bào)名全過(guò)程實(shí)現(xiàn)動(dòng)態(tài)實(shí)時(shí)監(jiān)控。系統(tǒng)功能模型如圖3所示。
?
??? (1)報(bào)名管理模塊:分為考生信息數(shù)據(jù)采集模塊和現(xiàn)場(chǎng)確認(rèn)模塊。考生信息數(shù)據(jù)采集模塊的使用者是考生,考生登錄網(wǎng)站后,修改密碼,填寫(xiě)個(gè)人簡(jiǎn)歷和家庭關(guān)系及報(bào)考科目信息。在報(bào)名期限內(nèi),考生可多次登錄網(wǎng)站查詢并修改自己的信息?,F(xiàn)場(chǎng)確認(rèn)模塊是各報(bào)名點(diǎn)(中學(xué))對(duì)考生所填信息進(jìn)行確認(rèn),且對(duì)考生進(jìn)行現(xiàn)場(chǎng)攝像,照片會(huì)即時(shí)上傳至省招辦的數(shù)據(jù)庫(kù)。通過(guò)報(bào)名管理模塊,基本上保證了考生信息(包括相片)的準(zhǔn)確入庫(kù)。
??? (2)系統(tǒng)管理模塊:主要實(shí)現(xiàn)各級(jí)管理員( 省級(jí),市級(jí),縣(區(qū))級(jí))按不同權(quán)限靈活方便地管理系統(tǒng),分配相應(yīng)用戶權(quán)限以及進(jìn)行一些系統(tǒng)數(shù)據(jù)處理功能,如用戶管理、數(shù)據(jù)上報(bào)、考生信息檢查、信息的導(dǎo)入/ 導(dǎo)出、日志維護(hù)、報(bào)名點(diǎn)數(shù)據(jù)維護(hù)等。
??? (3)數(shù)據(jù)統(tǒng)計(jì)模塊:主要實(shí)現(xiàn)招辦對(duì)各類(lèi)考生數(shù)據(jù)的統(tǒng)計(jì)分析,如考生人數(shù)、各科目報(bào)考人數(shù)、報(bào)考科目組合、考生實(shí)時(shí)報(bào)名和特殊考試類(lèi)型考生等數(shù)據(jù)的統(tǒng)計(jì)分析。
??? (4)數(shù)據(jù)打印模塊:主要實(shí)現(xiàn)各類(lèi)報(bào)表的打印,如登記表、準(zhǔn)考證、考生名冊(cè)、體檢表等。
??? 框架能使應(yīng)用程序的開(kāi)發(fā)簡(jiǎn)單,價(jià)格低廉,但是開(kāi)發(fā)框架不是一件容易的事。它是一個(gè)需要領(lǐng)域和設(shè)計(jì)經(jīng)驗(yàn)的反復(fù)過(guò)程。設(shè)計(jì)模式可以簡(jiǎn)化這個(gè)過(guò)程,因?yàn)樗峁┝藢?duì)過(guò)去經(jīng)驗(yàn)的抽象。
??? MVC模式本身就是一個(gè)非常復(fù)雜的系統(tǒng),所以在采用MVC開(kāi)發(fā)Web應(yīng)用時(shí), 如果自行建立一個(gè)基于MVC 模式的框架, 需要很大的開(kāi)發(fā)成本, 選擇一個(gè)現(xiàn)成的MVC框架會(huì)帶來(lái)事半功倍的效果,Struts框架不失為一個(gè)很好的選擇。本文基于Struts框架,實(shí)現(xiàn)了符合要求的高考網(wǎng)上報(bào)名系統(tǒng), 系統(tǒng)已成功地應(yīng)用于廣東省2005、2006年的高考網(wǎng)上報(bào)名。
參考文獻(xiàn)
[1] GAMMA E,HELM R,JOHNSON R, et al.Design patterns: elements of reusable object-oriented software[M].Boston:??Addison Wesley, 1995.
[2] ?李秀芳,張福增,賈世祥.軟件復(fù)用與Framework框架技術(shù)[J].科學(xué)技術(shù)與工程,2006,6(1):80-83.
[3] ?陳傳波,唐咸峰.領(lǐng)域框架的設(shè)計(jì)[J].計(jì)算機(jī)工程與科學(xué),2002,24(6):1-3.
[4] ?閆斐,王亞弟,韓繼紅. 基于Struts架構(gòu)的J2EE應(yīng)用軟件的設(shè)計(jì)與開(kāi)發(fā)[J].微計(jì)算機(jī)信息,2006,22(30):227-229.
[5] ?官全龍,姚國(guó)祥.基于Struts的應(yīng)用架構(gòu)的研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2005,26(12):3225-3227.