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