張建軍,劉虎,倪芳英,吉勇祥
(湖南師范大學(xué)工學(xué)院,中國 長沙 410081)
隨著互聯(lián)網(wǎng)與Web應(yīng)用編程技術(shù)的快速發(fā)展,Web應(yīng)用平臺(tái)不僅要具有以前簡單的信息發(fā)布功能,而且更要具備動(dòng)態(tài)、實(shí)時(shí)處理大量交互信息的功能,且這種處理大量交互信息的功能還在網(wǎng)絡(luò)技術(shù)的不斷發(fā)展與普及的過程中,不斷變化、擴(kuò)展與提高.那么,如何能高效、方便開發(fā)出應(yīng)用靈活、功能強(qiáng)大、開發(fā)過程簡單快捷的Web應(yīng)用平臺(tái)也就成了大家關(guān)注的課題[1].
當(dāng)前流行的Struts+Spring+Hibernate(下面簡稱SSH)架構(gòu),為高效、方便開發(fā)出應(yīng)用靈活、功能強(qiáng)大的Web應(yīng)用平臺(tái)提供了完整的、輕量級(jí)J2EE軟件開發(fā)模型,經(jīng)常用于構(gòu)建高質(zhì)量的Web應(yīng)用.但是,開發(fā)Web應(yīng)用平臺(tái)除了要考慮應(yīng)用平臺(tái)的功能強(qiáng)大、系統(tǒng)的健壯和穩(wěn)定等這些性能指標(biāo)外,還要把服務(wù)器與用戶之間的快速交互作為衡量Web應(yīng)用平臺(tái)動(dòng)態(tài)、實(shí)時(shí)處理交互信息的重要指標(biāo)來考慮.AJax就是為了解決“與用戶快速交互”這一問題提出的方法與思路,而ExtJS正是實(shí)現(xiàn)AJax的一種技術(shù),它主要用于構(gòu)建前端用戶界面,從而實(shí)現(xiàn)與后臺(tái)技術(shù)無關(guān)的前端AJax技術(shù)框架,能夠?qū)崿F(xiàn)系統(tǒng)與用戶的快速交互[2-5].本文以開發(fā)“基于條形碼的設(shè)備管理系統(tǒng)”為背景,通過研究應(yīng)用SSH與ExtJS的整合架構(gòu)開發(fā)Web應(yīng)用平臺(tái)的實(shí)現(xiàn)方法,構(gòu)建了一個(gè)靈活、易于擴(kuò)展、易于維護(hù)的多層Web應(yīng)用平臺(tái).同時(shí),這種基于SSH與ExtJS 整合架構(gòu)將顯示、業(yè)務(wù)運(yùn)算、數(shù)據(jù)庫等功能完全分離,從而實(shí)現(xiàn)了系統(tǒng)的低耦合性和良好的可維護(hù)性.
目前,JAVA中MVC的常用開發(fā)方式主要有以下幾種:Jsp+Servlet+JavaBean(EJB), Jsp+JavaBean(Controller)+ JavaBean(EJB)(Model), Jsp+ Struts+ JavaBean(EJB), SSH (Struts + Spring + Hibernate)[6-9].SSH架構(gòu)整合Spring、Struts和Hibernate這三項(xiàng)當(dāng)前流行的Java Web開源框架技術(shù),利用它可以構(gòu)建出靈活、易于擴(kuò)展、易于維護(hù)的多層Web應(yīng)用程序. SSH架構(gòu)在結(jié)構(gòu)上采用分層原理,從整體上可以分為4層如圖1所示.
圖1 SSH架構(gòu)示意圖 圖2 ExtJS+Spring+Hibernate架構(gòu)示意圖
Spring是為解決企業(yè)應(yīng)用開發(fā)復(fù)雜性而由Rod Hohnson創(chuàng)建的、支持Inversion of Control(IOC控制反轉(zhuǎn))和Aspect Oriented Programming(AOP面向切面編程)、輕量級(jí)的、開源的容器框架.通過利用IOC技術(shù),可以方便地解除程序間的過度耦合、簡化開發(fā);通過利用對AOP編程技術(shù)的豐富支持,分離應(yīng)用業(yè)務(wù)邏輯與系統(tǒng)服務(wù),提高系統(tǒng)內(nèi)聚性;同時(shí)通過提供對Struts、Hibenate等框架的支持,方便集成其他優(yōu)秀框架[10].
Struts由the Apache Software Foundation(Apache軟件基金會(huì))提供的、免費(fèi)開源的、可創(chuàng)建Java Web應(yīng)用解決方案的Web層應(yīng)用框架,用來幫助開發(fā)者高效創(chuàng)建基于MVC模式的J2EE Web應(yīng)用.它提供3個(gè)主要部件:用于映射URL的請求句柄、傳遞控制的響應(yīng)句柄及用于交互的標(biāo)簽庫.Struts框架也能夠與SOAP與AJax等技術(shù)進(jìn)行良好兼容[11].
Hibernate是基于Java語言下對象關(guān)系映射的、工作在持久層的、解決方案與開源框架.其設(shè)計(jì)宗旨是將軟件開發(fā)人員從大量相同的數(shù)據(jù)持久層相關(guān)編程工作中解放出來.它支持封裝、多態(tài)等面向?qū)ο缶幊烫匦?,并不需要為持久類提供基類或接口從而?shí)現(xiàn)“透明”持久,同時(shí)支持Hibernate Query Language (HQL)、Java Persistence Query Language (JPAQL)、SQL等查詢語言,提供高效查詢支持[12-13].
ExtJS是由Scencha公司提供的、可在任一瀏覽器上構(gòu)建豐富應(yīng)用的Java腳本框架.它為用戶利用MVC模式創(chuàng)建Web應(yīng)用提供了很好的數(shù)據(jù)包支持,提供諸如:圖表、網(wǎng)格、樹、菜單等大量的、流行的UI插件(即使用戶需要的插件不在核心插件庫中,也可以在Scencha提供的網(wǎng)絡(luò)社區(qū)資源中找到)及定期維護(hù)的、豐富的學(xué)習(xí)資源(如API使用文檔等),以滿足不同階層用戶的應(yīng)用需求.ExtJS提供的圖表幾乎支持任何Java腳本與框架,并可在流行操作系統(tǒng)上的任一款瀏覽器上進(jìn)行完美顯示.ExtJS的最新版本為4.0,在原有基礎(chǔ)上新增了350多個(gè)API及50多個(gè)新類,并在提供的SDK工具包中提供了代碼優(yōu)化功能,以幫助開發(fā)者優(yōu)化Java腳本實(shí)現(xiàn)對瀏覽器的更好支持[14].
ExtJS+SSH新架構(gòu)保留了Spring+Hibemate的組合,從表示層、控制層和業(yè)務(wù)邏輯層入手,使用ExtJS實(shí)現(xiàn)Struts框架中的頁面表示,架構(gòu)整合的基本原理如圖2所示.
基于條形碼的設(shè)備管理Web平臺(tái)是利用ExtJS+SSH整合架構(gòu)來實(shí)現(xiàn)的管理信息平臺(tái).該系統(tǒng)包括:系統(tǒng)管理、客戶管理、設(shè)備管理、銷售管理、統(tǒng)計(jì)管理、公司文檔及備份管理等功能模塊.系統(tǒng)登陸后的界面如圖3所示.
圖3 設(shè)備管理Web平臺(tái)登陸界面
考慮到傳統(tǒng)JSP編程在數(shù)據(jù)提交時(shí)可能會(huì)攜帶有表單,表單中的Action屬性會(huì)暴露自己服務(wù)器的請求方式和參數(shù),外部用戶可以模擬服務(wù)器請求而獲得內(nèi)部信息或內(nèi)部操作權(quán)限.為此,我們采用了ExtJS框架技術(shù).所有頁面由JS完成和自己所編寫的JS過濾器相結(jié)合,在過濾器中對用戶進(jìn)行驗(yàn)證,若是系統(tǒng)用戶才能加載JS腳本,否則將會(huì)調(diào)轉(zhuǎn)至登錄頁面;因此外部用戶無法竊取本系統(tǒng)的JS代碼,這樣做提高了頁面信息的保密性.頁面采用的JS引入方式如〈script type=“text/javascript” src=“〈%=basePath %〉 js/user.js? uid={user.emplNo}”〉 uid為攜帶的用戶ID.JS.使用ExtJS框架技術(shù)的頁面代碼如清單1所示.
Hibernate的配置包括兩個(gè)方面:一方面是ORM的配置,一方面是hiberante.cfg.xm的配置.ORM(Object References Mapping)對象關(guān)系映射,由于hibernate 操作的是對象而不是數(shù)據(jù)庫中的記錄與字段,所以必須要配置一個(gè)對象與數(shù)據(jù)庫表的一一對應(yīng)關(guān)系.這樣做了以后,開發(fā)者只需要了解對象與對象之間的關(guān)系,無需了解數(shù)據(jù)庫里是什么表,什么字段.而且這樣做隔離了開發(fā)代碼與數(shù)據(jù)庫的耦合,提高了開發(fā)平臺(tái)的移植性.配置代碼如清單2所示.
事務(wù)在計(jì)算機(jī)術(shù)語中是指訪問并可能更新數(shù)據(jù)庫中各種數(shù)據(jù)項(xiàng)的一個(gè)程序執(zhí)行單元(unit).事務(wù)應(yīng)該具有4個(gè)屬性:原子性、一致性、隔離性、持續(xù)性[15].所以我們在執(zhí)行一組復(fù)雜的數(shù)據(jù)庫操作時(shí)應(yīng)該給其配置事務(wù),這樣可以保證數(shù)據(jù)的完整性、也避免了多線程同時(shí)操作數(shù)據(jù)庫而帶來的讀贓數(shù)據(jù)問題,并且也簡化了這樣的企業(yè)級(jí)別分布式應(yīng)用的構(gòu)造.為spring事務(wù)的配置如清單3所示.
本文通過研究基于MVC模式的三層結(jié)構(gòu)體系,以流行的Web開發(fā)技術(shù)—SSH構(gòu)架為基礎(chǔ),利用ExtJS框架技術(shù),提出了基于ExtJS框架與SSH的整合構(gòu)架,并以此為基礎(chǔ)設(shè)計(jì)、實(shí)現(xiàn)了基于條形碼的設(shè)備管理Web平臺(tái).系統(tǒng)由于采用了SSH開源型框架,從而降低了系統(tǒng)開發(fā)成本、提高代碼的利用率和系統(tǒng)的擴(kuò)展性;并通過采用ExtJS框架技術(shù),提高了與用戶的交互速度,加強(qiáng)了系統(tǒng)的安全性.
參考文獻(xiàn):
[1] 李成嚴(yán),馮慧靈.基于開源技術(shù)的Web應(yīng)用架構(gòu)研究[J].計(jì)算機(jī)技術(shù)與發(fā)展, 2009,19(8):27-30.
[2] 袁華強(qiáng),王亞強(qiáng),朱 君.利用J2EE輕量級(jí)框架構(gòu)建Web應(yīng)用研究[J].計(jì)算機(jī)工程與設(shè)計(jì), 2007,28(1):22-25.
[3] 王寶龍,李子揚(yáng),李曉輝.基于SSH框架的DWR技術(shù)的減災(zāi)衛(wèi)星運(yùn)行管理[J].計(jì)算機(jī)工程與設(shè)計(jì), 2010,31(23):5096-5099.
[4] DWR-easy ajax for java [EB/OL]. http://directwebremoting.org/dwr/index.html, 2012-09-10.
[5] AJAX. A new approach to Web applications[EB/OL]. http://www.adaptivepath.com/ideas/, 2012-09-08.
[6] 蔡俊亞.一種基于服務(wù)構(gòu)件模型的自適應(yīng)方法[J].湖南師范大學(xué)自然科學(xué)學(xué)報(bào), 2011,34(1):47-51.
[7] 翁興旺,宋燕輝.WCDMA網(wǎng)絡(luò)工程中的容量提升策略[J].湖南師范大學(xué)自然科學(xué)學(xué)報(bào), 2010,33(2):13-17.
[8] HE L J, YI L, LIU L C. Loosely coupled and reu-sable MVC model web paging design[J].Comput Eng Appl, 2007,43(15):95-97.
[9] JOHN RITTINGHOUSE, JAMES RANSOME. Cloud computing:implementation,management, and security[M]. USA, Florida: CRC Press, 2009.
[10] Sprinng[EB/OL]. http://wenku.baidu.com/view/84fee207eff9aef8941e06cf.html, 2012-09-20.
[11] Apache Struts.http://struts.apache.org/index.html, 2012-10-16.
[12] Why Hibernate. http://www.hibernate.org/about/why-hibernate, 2012-10-12.
[13] 張鵬偉,陳景霞,張文平,等.基于ExtJS和SSH的Web應(yīng)用架構(gòu)的研究與實(shí)現(xiàn)[J].陜西科技大學(xué)學(xué)報(bào), 2010,28(6):111-115.
[14] Sencha.ExtJS overview[EB/OL].http://www.sencha.com/products/extjs/, 2012-10-16.
[15] Crazycat.Ibatis Transaction[EB/OL]. http://www.iteye.com/wiki/blog/550491, 2012-03-03.