摘要: 針對SSH框架存在的問題,運用J2EE各種成熟框架與技術對SSH框架進行集成和擴展,將改進后的SSH框架應用在籃球俱樂部項目的開發和維護中,降低了開發的復雜性,使開發變得簡便和靈活,提高了軟件開發和維護效率。
關鍵詞: SSH框架; J2EE技術; Web開發; 籃球俱樂部
中圖分類號:TP311 文獻標志碼:A 文章編號:1006-8228(2012)10-24-03
引言
目前,Java Web輕量級開發的主流技術是SSH(Struts+Spring+Hibernate)框架。但隨著軟件開發技術的快速發展,SSH框架表現出安全性、開發過程復雜、功能不夠齊全的問題,因此,對SSH框架進行補充和改進是必要的。
針對SSH框架存在的問題,運用各種成熟框架與技術對SSH框架進行集成和擴展,實踐證明,在項目的開發過程中應用改進后的SSH框架,使開發的效率顯著提高,系統的可靠性、可擴展性和可維護性等各種性能也明顯提升。
1 成熟框架和通用技術簡介
1.1 常用框架技術
1.1.1 SSH框架
SSH框架的系統從職責上分為四層:表示層、業務邏輯層、數據持久層和域模塊層,以幫助開發人員在短期內搭建結構清晰、可復用性好、維護方便的Web應用程序。其中使用Struts作為系統的整體基礎架構,負責MVC的分離,在Struts框架的模型部分,利用Hibernate框架對持久層提供支持,業務層用Spring支持。具體做法是:用面向對象的分析方法根據需求提出一些模型,將這些模型實現為基本的Java對象,然后編寫基本的DAO接口,并給出Hibernate的DAO實現,采用Hibernate架構實現的DAO類來實現Java類與數據庫之間的轉換和訪問,最后由Spring完成業務邏輯。SSH集成框架與技術結構如圖1所示。
Compass是基于Lucene之上的,是第一個實現Java的開源搜索引擎框架[1]。Compass封裝了對全文檢索引擎lucene的操作,并且提供了Spring/Hibernate的應用層框架,讓用戶可以不必深入了解lucene,輕松地在自己的Spring/Hibernate架構的Web應用當中集成全文檢索功能。Hibernate可直接操作數據庫,當數據發生改變時,可以通過Compass的OSEM對數據索引進行更新。
1.1.3 Spring MVC框架
Spring MVC框架采用前端控制模式(Front Controller),它是Spring MVC請求中樞,其核心是DispatcherServlet。Spring MVC的所有請求通過它轉發到不同的處理器(Colltroller)處理,處理完后返回一個Model And View對象。DispatcherServlet查詢一個或多個ViewResolver視圖解析器,找到Model And View對象指定的視圖對象,視圖對象負責渲染返回給客戶端。
1.1.4 SWF(Spring Web Flow)框架
Spring Web Flow是Spring框架提供的構建Web應用程序的全功能MVC模塊。使用Spring可插入的MVC架構,可以選擇是使用內置的Spring Web框架還是Struts這樣的Web框架。通過策略接口,Spring框架是高度可配置的,而且包含多種視圖技術,例如JavaServer Pages(JSP)技術、Velocity、Tiles、iText和POI。Spring MVC分離了控制器、模型對象、分派器以及處理程序對象的角色,這種分離讓它們更容易進行定制。因此,它的出現極大地提高了編程效率,尤其適合需要復雜用戶交互界面的Web應用程序[2]。
1.1.5 DWR框架
DWR(Direct Web Remoting)是一個開源項目,是基于Java的Ajax實現。它包含服務器端 Java 庫、一個DWR Servlet以及JavaScript庫。DWR的主要特點是能夠將服務器所寫的Java類直接轉化為Javascript中所引用的對象,簡化了Javascript中的轉化操作[3]。
1.2 通用技術介紹
1.2.1 Ajax技術
AJAX(A synchronous JavaScript and XML)實際上是幾項技術按一定的方式組合, 在共同的協作中發揮各自作用的技術[4]。Ajax具有改善B/S模式下交互、帶寬性能等優點。Ajax的核心是JavaScript對象XmlHttpRequest。另外,Ajax為SSH提供了一種高效的數據傳輸方式,其常用的數據組織方式有JSON(JavaScript Object Notation)。在Ajax的應用中,通過JSON組織傳輸大塊數據,優勢明顯。
1.2.2 表單及時驗證器
表單驗證器是表單的一種驗證方式,當表單提交時,通過它能提高接收數據的有效性,因此被廣泛地應用于各種Web應用程序中。表單驗證結合Ajax技術能發揮出實時高效的驗證功能。
1.2.3 任務動態調度(Quartz)
Quartz是Web應用開發中廣泛使用的任務調度解決方案,它提供的強大任務調度機制允許開發人員靈活地定義觸發器等調度事件表。另外,Quartz提供了可持久化的調度運行環境機制,在需要時可以保存并恢復調度現場。
1.2.4 事件編程
基于事件的編程是一種優秀的編程方法,是符合人類思考的和行為的一種方法。在以往的面向過程的編程(C語言)中,程序運行是面向過程的,也就是說是人去遷就機器,去適應機器,而事件編程是面向對象的編程方法,都是按對象來編程,面向事件編程更能體現事件驅動的特點,因為任何動作的進行都是在事件的驅動下進行。擴展框架中的事件編程主要通過Spring 內部提供的事件處理機制來實現。
1.2.5 郵件模板技術Velocity
發送郵件功能是現在企業級應用的最普遍的需求之一。通常HTML格式的郵件大部分的HTML代碼都是固定的,只有少部分是變動的,因此非常適合采用模板技術來解決,達到設計與數據分離。
Velocity是開源的、應用非常廣泛的郵件模板框架。其原理是用動態的數據替換模板的特殊標簽[5]。通過工具類VeloeityEngineUtils和VeloeityEngine,可以將Veloeity模板和數據整合后方便地返回郵件內容和標題。
1.2.6 控制安全權限
對于任何一個完整的應用系統,完善的認證和授權機制是不可缺少的。Spring Security就是這樣的一個安全框架,它能為J2EE企業應用提供強大而靈活的安全訪問控制解決。通過在Spring容器中配置一組Bean,充分利用Spring的IOC和AOP功能,提供聲明式安全訪問控制功能。
1.2.7 單元測試技術(Junit)
單元測試是在軟件開發過程中要進行的最低級別的測試活動,在單元測試活動中,軟件的獨立單元將在與程序的其他部分相隔離的情況下進行測試。JUnit是一個開放源代碼的優秀Java測試框架,可對表示層、業務層、數據存儲層進行單元測試,保證模塊的編制正確性。
2 SSH框架的改進
由于傳統SSH開發框架存在安全、開發繁瑣、應用不方便等問題,SSH框架改造的目標是提供一個設計靈活簡便、權限安全便于設計實現、各層易測試、各層及各種集成技術松耦合的企業應用框架。
2.1 SSH框架改進的目標
⑴ 松藕合:是指集成的各層與各種技術框架耦合性低,相互獨立,可以根據業務需要有選擇的應用。
⑵ 靈活簡便:是指集成框架采用統一的Spring管理方式,配置簡單、應用方便。為軟件開發中的常遇到問題提供了解決方案,如:頁面流技術、Ajax數據組織方式、頁面驗證器、郵件服務系統、后臺應用程序的任務調度和事件驅動框架等。
⑶ 權限安全易控:是指集成框架中全面采用Spring Security對權限和資源進行控制。
⑷ 可測試性:是指為各層提供了測試方案。
2.2 具體實現
⑴ 在數據存取層(Hibernate)增加了Compass存取數據。
⑵ 在MVC(Struts2)層,集成了Spring Web Flow開發頁面流程;集成了Spring MVC;集成了Spring JSON View,用于Ajax操作組織數據;集成了Spring Security控制安全權限;集成了Spring Test和Junit測試技術,為各層設計了單元測試方案。
⑶ 設計并實現了基于DWR的及時驗證器;設計并實現了任務動態調度器;引入了事件編程和郵件模板技術,并將這些技術集成到SSH框架中。圖2展示了SSH集成和擴展的技術與框架。
3 SSH擴展框架在某市俱樂部管理系統(BallOrganizer)的應用
3.1 項目背景
由于人們對物質的需求向精神需求擴展,推動了俱樂部的發展。如果將IT方面的管理經驗應用于俱樂部的管理,肯定會對俱樂部的管理和發展產生很大作用。BallAdmin項目就是在這種背景下產生的。
3.2 基本功能
BallOrganizer是一個籃球俱樂部管理軟件。申請人在申請通過后,在BallOrganizer就有了自己俱樂部管理空間,可以在自己的管理空間增加會員,增加隊伍,開展活動等。圖3為系統功能圖。
3.3 SSH擴展框架在系統中的應用
BallOrganizer的開發使用了SSH擴展框架。其中BallOrganizer的MVC層使用了Spring MVC,由于需求中沒有頁面流和復雜數據的組織,因此沒有使用Spring Web Flow和Spring JSON View。Spring實現對容器中的對象、事務和其他框架進行管理,Hibernate存取數據,Compass框架可檢索數據,Spring Security對權限安全進行管理控制,Easy Mock對各層進行單元測試。
另外,BallOrganizer在前臺頁面使用基于DWR及時驗證器驗證合法性,任務動態調度對郵件發送進行調度,郵件模板技術對所有郵件內容進行填充,事件編程方式對BallOrganizer靜態頁面變化進行處理。由于篇幅所限,以下僅就單元測試、Spring Security控制權限、Ajax和任務調度對SSH擴展框架在系統開發中的應用進行描述。
3.3.1 DAO單元測試的應用
DAO的模塊劃分與系統的功能模塊劃分完全一致,除去Email不需要DAO以外,其他模塊都有相對應的DAO支持。在實際開發過程中,DAO的許多方法例如增、刪、基本查詢都是類似的,可以抽象出一個所有DAO的父類DomainObjectDao。DomainObjectDao主要提供了更新實體、保存實體、根據實體類獲取所有的實體、根據guid獲取實體等。圖4為DAO繼承結構圖。
在DAO完成后,為了保證DAO的正確性,需要對DAO進行單元測試,以下程序實現BallDao對Ball類的具體測試。
3.3.2 Spring Security控制權限的應用
BallOragnizer具有前臺和后臺頁面,Ball具有前臺和后臺頁面,BallOragnizer可以有無數多個Ball,并且訪問它們的權限完全不同。因此對系統中對URL的管理好壞將直接影響系統成敗。
在BallOragnizer中,對于URL的管理引入了域名分級的思想,就是使用Ball的名稱跟在根URL后,用來標識這個Ball的URL。使用這種方式可以很好地組織系統中URL并且可以很方便地使用Spring Security來控制權限。表1展示了系統中URL管理。
3.3.3 Ajax應用
BallOragnizer中,一個Ball可以有多個團隊,并且這些團隊可以由用戶隨意進行拖放排序。這種功能的實現主要需要Ajax實時數據傳輸功能實現,需要將前臺搜集到的團隊序號傳到后臺并對相應的團隊序號進行修改。
3.3.4 任務調度的應用
BallOrganizer中使用了許多任務調度。任務調度的使用主要分為兩種動態安排任務,即任務動態調度和系統初始時設置的任務調度。任務動態調度使用主要是對Email發送進行任務動態調度。系統初始時設定的任務調度,主要用于為新注冊會員自動發送歡迎信件等。
3.3.5 Compass檢索框架的應用
Compass檢索框架在BallOrganizer中的主要功能是實現對實體對象的檢索和索引更新。與Spring對Hibernate的支持類似,Compass對Spring集成做了很好的封裝,并提供了CompassTemplate來簡化諸如對Session、Transaction、Exception等操作,使用此工具,可以有效提高檢索效率。例如以下代碼實現把實體對象Ball存儲到Compass索引:
4 結束語
傳統的SSH框架存在安全性差、應用不便等問題。本文根據現有成熟技術結合SSH框架集成了一個簡單靈活、權限安全控制簡便、容易測試和各種技術松耦合的開發框架。通過實例驗證表明,該擴展框架可使開發人員將關注點更多地集中到業務邏輯上,提高了軟件開發和維護效率。