王權(quán) 吳玫 王海暉
摘 ?;要: 針對傳統(tǒng)民政辦公系統(tǒng)結(jié)構(gòu)復(fù)雜,不易維護(hù)和不易擴(kuò)展的情況,提出了一種基于ExtJS+SSH(Struts2、Spring和Hibernate)架構(gòu)的民政服務(wù)信息系統(tǒng)。按照J(rèn)avaEE的分層思想,通過Struts2框架實(shí)現(xiàn)了MVC模式,將用戶界面、業(yè)務(wù)處理和數(shù)據(jù)訪問三者分離,利用Spring框架統(tǒng)一管理系統(tǒng)對象以降低系統(tǒng)的耦合性,采用Hibernate框架實(shí)現(xiàn)業(yè)務(wù)數(shù)據(jù)的持久化以降低開發(fā)難度。實(shí)驗(yàn)結(jié)果表明,基于ExtJS和SSH架構(gòu)的系統(tǒng)具有易維護(hù)、可擴(kuò)展和運(yùn)行穩(wěn)定的特性。
關(guān)鍵詞: 民政服務(wù); 信息系統(tǒng); ExtJS; SSH
中圖分類號:TP317.1 ?; ?; ?; ?; ?;文獻(xiàn)標(biāo)志碼:A 文章編號:1006-8228(2014)12-38-04
Design of civil service information system and its implementation based on
ExtJS and SSH frameworks
Wang Quan1, Wu Mei1,2, Wang Haihui1,2
(1. School of computer science and engineering, Wuhan Institute of Technology, Wuhan, Hubei 430200, China;
2. Hubei Provincial Key Laboratory of Intelligent of Intelligent Robot, Wuhan Institute of Technology)
Abstract: The traditional home service information system is a complex system which is difficult to maintain and expand. A system for this situation is proposed in this paper, which is based on ExtJS and SSH frameworks. According to hierarchical thinking of Java EE, the MVC model is implemented by Struts2, which has separated the user interface, business process and data storage. The system's object is unified by Spring to reduce the coupling of the system. Hibernate is utilized to realize the data persistence, which reduces the difficulty of software development. The experimental results show that the system has easy-maintainability, easy-expandability and stability.
Key words: the civil service; information system; ExtJS; SSH
0 引言
2001年全國民政信息化建設(shè)工作會議首次提出加強(qiáng)民政信息化建設(shè),并對具體實(shí)施提出了“便民工程”和“數(shù)字民政工程”[1]。為了滿足民政業(yè)務(wù)工作決策科學(xué)化、管理規(guī)范化、服務(wù)網(wǎng)絡(luò)化、手段現(xiàn)代化和民政信息資源的共建共享的需求,各地民政部門都迫切需要構(gòu)建現(xiàn)代化的民政服務(wù)信息系統(tǒng)。民政服務(wù)信息系統(tǒng)的開發(fā)符合了民政信息化建設(shè)的要求,能提升民政工作的效率,提高民政工作的質(zhì)量,加強(qiáng)民政工作的規(guī)范性,清晰業(yè)務(wù)辦理的責(zé)任,便利人民群眾。目前已有地區(qū)開發(fā)了民政信息系統(tǒng),如文獻(xiàn)[8]采用B/S結(jié)構(gòu)和XML數(shù)據(jù)交換技術(shù)來實(shí)現(xiàn)民政辦公系統(tǒng),文獻(xiàn)[9]使用iBatis框架構(gòu)建民政信息系統(tǒng)的數(shù)據(jù)庫技術(shù)。在實(shí)現(xiàn)數(shù)據(jù)持久層時,Hibernate和iBatis最大的不同就是Hibernate不用手動編寫sql語句,在整個系統(tǒng)開發(fā)過程中都是面向?qū)ο蟮?,而iBatis則需要開發(fā)者手動編寫sql語句,這增加了軟件開發(fā)難度。
1 引入ExtJS+SSH框架的意義
1.1 ExtJS的優(yōu)點(diǎn)
ExtJS框架特點(diǎn)是能夠美化界面以提高用戶體驗(yàn)。ExtJS是一個基于YUI技術(shù),由JavaScript編寫的與后臺技術(shù)無關(guān)的AJAX框架,主要用于顯示層,即構(gòu)建用戶界面,且能夠輕易構(gòu)建出界面美觀、功能豐富和靈活多變的前臺頁面[2-4]。ExtJS的虛擬桌面技術(shù)提高了用戶的使用體驗(yàn)。ExtJS還有以下幾個優(yōu)點(diǎn)[5-7]。
⑴ 跨瀏覽器支持。ExtJS對底層的JavaScript代碼進(jìn)行了跨瀏覽器支持,這種支持可以幫助開發(fā)者在構(gòu)建Web程序時不用考慮用戶所使用的瀏覽器類型。
⑵ 面向?qū)ο?。ExtJS采用面向?qū)ο蠛徒M件化的思想,使用ExtJS開發(fā)的應(yīng)用具有很好的系統(tǒng)擴(kuò)展性和可維護(hù)性。
⑶ 性能好,速度快。相對于其他的UI,ExtJS的性能非常好,速度快。在加載時支持動態(tài)加載機(jī)制,可以很大程度地提高JavaScript文件的加載效率。
1.2 SSH架構(gòu)的優(yōu)勢
Struts2框架實(shí)現(xiàn)MVC(Model, View, Controller)模式[10],MVC模式能夠提高程序組件的重用性和清晰程序結(jié)構(gòu)[11-12]。Spring框架通過IoC(控制反轉(zhuǎn))和AOP(面向方面編程)兩種技術(shù),來實(shí)現(xiàn)對程序中的對象關(guān)系、事務(wù)、權(quán)限和日志的統(tǒng)一管理[13]。Hibernate框架完成系統(tǒng)數(shù)據(jù)持久化的工作,通過Hibernate可以提高民政服務(wù)信息系統(tǒng)對底層數(shù)據(jù)庫兼容性,能在不修改后臺代碼的情況下實(shí)現(xiàn)數(shù)據(jù)庫系統(tǒng)的更換[14]。
2 系統(tǒng)設(shè)計
2.1 系統(tǒng)總體設(shè)計
民政服務(wù)信息系統(tǒng)包括三個子系統(tǒng),分別是民政內(nèi)部辦公系統(tǒng)、社會服務(wù)平臺和社會家園網(wǎng)。三個子系統(tǒng)協(xié)作示意圖如圖1所示。圖1中實(shí)線表示業(yè)務(wù)申報,虛線表示審核結(jié)果回復(fù),數(shù)字表示民政業(yè)務(wù)類型(1表示社區(qū)申報的業(yè)務(wù),2表示社區(qū)家園網(wǎng)直接申報的業(yè)務(wù),3表示通過社區(qū)家園網(wǎng)向社區(qū)申報并且最終由社區(qū)提交到民政局的業(yè)務(wù))。智慧社區(qū)服務(wù)平臺是由社區(qū)的辦公人員使用,主要完成社區(qū)基本情況登記與查詢,民政業(yè)務(wù)上傳與下達(dá)。民政內(nèi)部辦公系統(tǒng)是提供給民政局辦公人員使用的,民政局辦公人員通過該系統(tǒng)能夠?qū)徟鐓^(qū)上報的申請和管理的民政業(yè)務(wù)信息。社區(qū)家園網(wǎng)是一個論壇,為群眾提供一個咨詢、辦事和交流的平臺,不需要進(jìn)行證件真實(shí)性審核的業(yè)務(wù)都通過社區(qū)家園網(wǎng)申報。
[民政內(nèi)部
辦公系統(tǒng)] [社區(qū)服務(wù)平臺] [社區(qū)家
園網(wǎng)] [1或3][1或3] [2][2] [3][3]
圖1 ?;三個子系統(tǒng)協(xié)作示意圖
2.2 架構(gòu)設(shè)計
民政服務(wù)信息系統(tǒng)采用ExtJS和JSP實(shí)現(xiàn)前臺頁面,通過Struts2、Spring和Hibernate實(shí)現(xiàn)后臺業(yè)務(wù)處理,并通過ExtJS和SSH整合搭建一個實(shí)現(xiàn)了MVC設(shè)計模式的系統(tǒng)架構(gòu)。
ExtJS+SSH架構(gòu)中ExtJS實(shí)現(xiàn)了從用戶界面向后臺提交請求。控制層使用Struts2來實(shí)現(xiàn)MVC模式。業(yè)務(wù)邏輯層細(xì)化為Service層和DAO層,通過Spring來管理Service和DAO之間的耦合關(guān)系。數(shù)據(jù)持久層使用Hibernate框架。實(shí)現(xiàn)時為了提高系統(tǒng)的擴(kuò)展性,Service層和DAO層使用抽象接口,將具體的實(shí)現(xiàn)類和接口分離,并通過Spring指定Service接口和DAO接口的具體實(shí)現(xiàn)類,在需求變化后,只需更改Spring的配置文件就可以適應(yīng)新的需求,符合“開閉原則”。系統(tǒng)架構(gòu)圖如圖2所示??刂茖油ㄟ^Struts2的servlet來完成,Action層由Struts2中的自定義action類實(shí)現(xiàn)。Action層中的對象使用Struts-Spring插件管理,而Service層和Dao層及相應(yīng)實(shí)現(xiàn)層的對象統(tǒng)一由Spring管理。表現(xiàn)層通過JSP和ExtJS實(shí)現(xiàn)。
[控制層][Action層][Struts2框架] [客戶端
(瀏覽器)][表現(xiàn)層][Ext JS框架] [Service層][Service
實(shí)現(xiàn)層][Dao層] [Dao實(shí)現(xiàn)層\&;][Domain層\&;][Hibernate框架] [Spring框架相關(guān)] [業(yè)務(wù)數(shù)據(jù)]
圖2 ?;民政服務(wù)信息系統(tǒng)的系統(tǒng)架構(gòu)
2.3 功能設(shè)計
2.3.1 民政內(nèi)部辦公系統(tǒng)的設(shè)計
民政內(nèi)部辦公系統(tǒng)按組織機(jī)構(gòu)來劃分功能模塊,主要包括區(qū)劃地名科、社會福利與社會事務(wù)科、最低生活保障局、民間組織管理科、救災(zāi)救濟(jì)科、局辦公室和人事科。根據(jù)通用信息系統(tǒng)的需求,添加了權(quán)限管理和登錄管理。由于每個模塊都有相應(yīng)的政策法規(guī),將政策法規(guī)提取出來作為一個模塊,局長監(jiān)督模塊體現(xiàn)了民政服務(wù)信息系統(tǒng)比手動辦公的優(yōu)勢,局長通過該系統(tǒng)就可以了解下屬的工作情況而不會打擾到下屬辦公。民政內(nèi)部辦公系統(tǒng)的功能結(jié)構(gòu)圖如圖3所示。由于篇幅所限,圖3中的第三級模塊只列出具有代表性的功能模塊,并對部分有代表性的第二級模塊功能作了說明。
[民政內(nèi)部辦公系統(tǒng)][社會福利與社會事務(wù)科][最低生活保障局][區(qū)劃地名科][老齡工作委員會][民間組織管理科][救災(zāi)救濟(jì)科][優(yōu)撫安置科][局辦公室][人事科][局長監(jiān)督][權(quán)限管理][政策法規(guī)][登錄管理][兒童收養(yǎng)管理][社會福利機(jī)構(gòu)管理][地名普查基本信息管理][老齡證審批][百歲老人審核][災(zāi)害數(shù)據(jù)統(tǒng)計][日常災(zāi)害預(yù)防管理][用戶管理][角色管理][政策法規(guī)管理][注銷]
圖3 ?;民政內(nèi)部辦公系統(tǒng)的功能結(jié)構(gòu)圖
區(qū)劃地名科的功能是對地名普查等基本信息進(jìn)行管理,主要包括:地名更改審批和行政區(qū)劃,自然村和建筑物等地名信息的查詢/添加/刪除/修改和歷史信息查詢。
社會福利與社會事務(wù)科是對兒童收養(yǎng)、社會福利機(jī)構(gòu)、婚姻登記、殯葬及墓地和社會救助的管理。審批類業(yè)務(wù)主要包括兒童收養(yǎng)審批和社會福利機(jī)構(gòu)審批,管理類業(yè)務(wù)主要是對兒童收養(yǎng)信息、婚姻登記信息、社會救助信息和殯葬及墓地信息的添加/刪除/修改。
民間組織管理科的主要功能是民間組織的審核、民間組織信息管理和民間組織年檢。
民政內(nèi)部辦公系統(tǒng)具有權(quán)限驗(yàn)證的功能,用戶登錄后只能處理本科室的業(yè)務(wù)。
2.3.2 社區(qū)服務(wù)平臺的設(shè)計
社區(qū)服務(wù)平臺是以業(yè)務(wù)功能來劃分模塊的,將社區(qū)的辦公作為辦公系統(tǒng)模塊,其他模塊都是對業(yè)務(wù)數(shù)據(jù)進(jìn)行管理。社區(qū)服務(wù)平臺的功能模塊還有社區(qū)基本信息、社區(qū)組織、社會救助、社區(qū)服務(wù)、災(zāi)害數(shù)據(jù)管理和社區(qū)居委會管理。社區(qū)服務(wù)平臺的功能結(jié)構(gòu)圖如圖4所示。圖4中的三級模塊都是二級模塊的核心功能,其他功能由于篇幅所限暫未列出。社區(qū)服務(wù)平臺的主要功能模塊分析如下。
社區(qū)基本信息、社區(qū)組織、社會救助、社區(qū)服務(wù)都屬于信息管理模塊,主要功能是對相應(yīng)信息進(jìn)行查詢。
災(zāi)害數(shù)據(jù)管理的主要功能是提交災(zāi)害數(shù)據(jù)到民政局和對該社區(qū)的災(zāi)害數(shù)據(jù)進(jìn)行管理。
[社區(qū)服務(wù)平臺][社區(qū)基本信息][社區(qū)居委會管理][社區(qū)組織][災(zāi)害數(shù)據(jù)管理][社會救助][辦公系統(tǒng)][社區(qū)服務(wù)][登錄管理][居委會印章使用登記][社區(qū)居委會工作記錄][申報系統(tǒng)][公示][災(zāi)害數(shù)據(jù)統(tǒng)計][日常災(zāi)害預(yù)防管理][災(zāi)害求助申請][社區(qū)民間組織]
圖4 ?;社區(qū)服務(wù)平臺的功能結(jié)構(gòu)圖
2.3.3 社區(qū)家園網(wǎng)的設(shè)計
社區(qū)家園網(wǎng)的實(shí)質(zhì)是論壇,社區(qū)家園網(wǎng)實(shí)現(xiàn)時使用一個開源的論壇框架,然后添加一個二級模塊民政業(yè)務(wù)來完成所有在社區(qū)家園網(wǎng)提交的民政業(yè)務(wù)。社區(qū)家園網(wǎng)的功能結(jié)構(gòu)圖如圖5所示。由于篇幅所限,圖5中的民政業(yè)務(wù)模塊的部分功能模塊未列出。
[社區(qū)家園網(wǎng)][用戶管理][論壇功能][民政業(yè)務(wù)][登錄][注冊][注銷][民間組織年檢]
圖5 ?;社區(qū)家園網(wǎng)的功能結(jié)構(gòu)圖
3 系統(tǒng)的關(guān)鍵技術(shù)
民政服務(wù)信息系統(tǒng)是以Struts2為實(shí)現(xiàn)架構(gòu)的基礎(chǔ),通過Spring來整合相應(yīng)的框架。Struts2和Spring整合來完成對Action的管理,Spring和Hibernate整合來實(shí)現(xiàn)持久化的工作。ExtJS作為Struts2的視圖的實(shí)現(xiàn)。
3.1 系統(tǒng)核心配置文件的實(shí)現(xiàn)
民政服務(wù)信息系統(tǒng)在web.xml中定義Struts2和Spring的配置文件路徑。該系統(tǒng)中Struts2的Action對象由Struts-Spring插件來管理,該插件需要在web.xml中配置相應(yīng)的監(jiān)聽器。web.xml文件核心內(nèi)容如下:
<;param-name>;contextConfigLocation<;/param-name>;
<;!-- Spring框架的配置文件列表-->;
<;param-value>;/WEB-INF/xml/daoContext.xml,
/WEB-INF/xml/applicationContext.xml,
/WEB-INF/xml/daoContext_wang.xml,
/WEB-INF/xml/applicationContext_wang.xml
<;/param-value>;……
<;!—Spring插件的監(jiān)聽器配置-->;
<;listener-class>;org.springframework.web.context.
ContextLoaderListener<;/listener-class>;……
<;!-- 整合Struts2框架的配置代碼,Struts2核心攔截器-->;
<;filter-class>;org.apache.struts2.dispatcher.ng.filter.
StrutsPrepareAndExecuteFilter<;/filter-class>;……
<;!-- 定義該web項(xiàng)目url映射關(guān)系-->;
<;filter-name>;struts2<;/filter-name>;
<;url-pattern>;/*<;/url-pattern>;……
3.2 Spring和Hibernate整合的實(shí)現(xiàn)
Hibernate完成系統(tǒng)業(yè)務(wù)數(shù)據(jù)持久化的操作,提供了save、delete、update等方法,在DAO層只需調(diào)用這些方法就可以存儲業(yè)務(wù)數(shù)據(jù)。Spring對Hibernate支持非常完善,在Spring的配置文件daoContext.xml中配置一個id為dataSource的bean和一個sessionFactory的bean, 在程序中使用注入的sessionFactory對象來實(shí)例化Spring框架提供的HibernateTemplate模板,DAO通過HibernateTemplate來調(diào)用持久化方法進(jìn)行業(yè)務(wù)數(shù)據(jù)存儲。daoContext.xml的dataSource和sessionFactory的配置如下:
<;bean id="dataSource" class="com.mchange.v2.c3p0
.ComboPooledDataSource">;
<;property name="jdbcUrl" value="jdbc:mysql://
localhost:3306/test"/>;
……
<;/bean>;
<;bean id="sessionFactory" class="org.springframework
.orm.hibernate3.LocalSessionFactoryBean">;
<;property name="dataSource" ref="dataSource"/>;
<;property name="hibernateProperties">;
<;!--定義根據(jù)具體應(yīng)用的數(shù)據(jù)庫定義數(shù)據(jù)庫方言-->;
<;value>;hibernate.dialect=org.hibernate.dialect
.MySQLInnoDBDialect
……
<;/value>;
<;/property>;
<;!--定義Hibernate實(shí)體類映射文件的位置-->;
<;!--可以通過掃描到一個路徑中的所有*.hbm.xml文件,多人協(xié)作開發(fā)-->;
<;property name="mappingLocations">;
<;list>;<;value>;classpath:/org/community/wangquan/domain/
*.hbm.xml<;/value>;<;/list>;
<;/property>;
<;/bean>;
3.3 整合ExtJS的實(shí)現(xiàn)
ExtJS框架只需要在JSP頁面導(dǎo)入ExtJS的核心JS文件和CSS樣式,就可以在自定義JS文件中使用ExtJS提供的頁面組件和表單組件,而不必使用HTML標(biāo)簽來編寫Web界面。在主界面的JSP中整合ExtJS的代碼如下:
<;link rel="stylesheet" type="text/css"
<;!--導(dǎo)入ExtJS的CSS樣式文件-->;
href="js/extjs/resources/css/ext-all.css" />;
<;link rel="stylesheet" type="text/css" href="js/css/desktop.css"/>;
……
<;!--導(dǎo)入ExtJS核心JS文件-->;
ext-all-debug.js">;<;/script>;
ext-lang-zh_CN.js">;<;/script>;
4 結(jié)束語
該系統(tǒng)因采用ExtJS+SSH多框架技術(shù),提升了系統(tǒng)用戶的體驗(yàn),降低了業(yè)務(wù)邏輯層和其他各層的耦合關(guān)系,提高了系統(tǒng)的重用性,降低了后期維護(hù)成本,系統(tǒng)更加靈活和開放。在中小型企業(yè)和對軟件擴(kuò)展性和可維護(hù)性要求高且低成本投入的部門,使用該框架技術(shù)開發(fā)的信息管理系統(tǒng)具有很好的應(yīng)用前景。該系統(tǒng)在權(quán)限管理方面還沒有一個統(tǒng)一的標(biāo)準(zhǔn),必須手動實(shí)現(xiàn)權(quán)限管理,我們將在以后項(xiàng)目中進(jìn)行改進(jìn),設(shè)計出一種通用權(quán)限的管理框架。
參考文獻(xiàn):
[1] 舒順林.建設(shè)數(shù)字民政--來自全國民政信息化建設(shè)工作會議的報告[J].
中國民政,2001.7:18
[2] 張鵬偉,陳景霞,張文平等.基于ExtJS和SSH的Web應(yīng)用架構(gòu)的研
究與實(shí)現(xiàn)[J].陜西科技大學(xué)學(xué)報(自然科學(xué)版),2010.28(6):111-115
[3] 尼俊紅,張麗,張淼等.基于Ajax和MVC的電力通信告警系統(tǒng)的設(shè)計
實(shí)現(xiàn)[J].計算機(jī)應(yīng)用與軟件,2013.30(8):226-227
[4] 羅金華.基于EXT的Java網(wǎng)絡(luò)管理系統(tǒng)研究與實(shí)現(xiàn)[J].微計算機(jī)應(yīng)
用,2011.32(9):68-76
[5] 鞠鳳娟,吳志峰.EXT技術(shù)在Web界面設(shè)計與實(shí)現(xiàn)中的應(yīng)用研究[J].
計算機(jī)與現(xiàn)代化,2008.3(11):102-105
[6] 盧冶,徐明,蘇勇.一個基于Ext-JS技術(shù)的污水管理信息平臺的設(shè)計
與實(shí)現(xiàn)[J].計算機(jī)應(yīng)用與軟件,2013.30(9):241-244
[7] 鄧偉成,范軼翔,夏翔等.ExtJs框架下Grid組件的擴(kuò)展及應(yīng)用[J].計算
機(jī)應(yīng)用,2012.32(Z1):80-82
[8] 江岷山,牛德雄.基于B/S結(jié)構(gòu)的民政辦公系統(tǒng)的設(shè)計與實(shí)現(xiàn)[J].網(wǎng)
絡(luò)安全技術(shù)與應(yīng)用,2007.9:75-76
[9] 趙培樂,張維,李釗.基于民政信息化系統(tǒng)建設(shè)談信息系統(tǒng)[J].中國管
理信息化,2010.13(20):62-65
[10] 張瑞紅.基于多層架構(gòu)的個人信息空間管理系統(tǒng)的研究[J].科技通
報,2013.29(4):103-105
[11] 張原,張昭,劉蕊.基于MVC設(shè)計模式的虛擬實(shí)驗(yàn)平臺模塊化設(shè)計[J].
計算機(jī)工程與科學(xué),2013.35(8):125-129
[12] 張建軍,劉虎.基于ExtJS的J2EE輕量級框架的研究與應(yīng)用[J].計算
機(jī)應(yīng)用與軟件,2014.31(4):73-76
[13] 張宇,王映輝,張翔南.基于Spring的MVC框架設(shè)計與實(shí)現(xiàn)[J].計算
機(jī)工程,2010.36(4):59-62
[14] 張俐,張維璽.Facade模式在數(shù)據(jù)持久層中的應(yīng)用[J].計算機(jī)工程與
科學(xué),2011.33(10):105-110