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