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