李 丹,劉麗華
(河北軟件職業(yè)技術(shù)學(xué)院,河北 保定 071000)
隨著社會(huì)經(jīng)濟(jì)的不斷發(fā)展,人們?cè)絹?lái)越關(guān)注統(tǒng)計(jì)數(shù)據(jù),而統(tǒng)計(jì)數(shù)據(jù)的采集方式和渠道直接影響到統(tǒng)計(jì)數(shù)據(jù)的質(zhì)量。傳統(tǒng)的數(shù)據(jù)采集方式是由基層統(tǒng)計(jì)機(jī)構(gòu)收集統(tǒng)計(jì)數(shù)據(jù),錄入計(jì)算機(jī)并層層上報(bào)到國(guó)家統(tǒng)計(jì)局。隨著入統(tǒng)單位的增加和統(tǒng)計(jì)報(bào)表的增多,基層統(tǒng)計(jì)機(jī)構(gòu)的工作量將不斷增大,原有的統(tǒng)計(jì)方式不能滿足日益增長(zhǎng)的統(tǒng)計(jì)工作的需要。隨著網(wǎng)絡(luò)環(huán)境的不斷改善和Web應(yīng)用技術(shù)的發(fā)展,一種新的統(tǒng)計(jì)數(shù)據(jù)采集方式——網(wǎng)上直報(bào)系統(tǒng)應(yīng)運(yùn)而生。網(wǎng)上直報(bào)系統(tǒng)就是指通過(guò)Web方式進(jìn)行數(shù)據(jù)采集,實(shí)現(xiàn)數(shù)據(jù)共享,從而保證數(shù)據(jù)的準(zhǔn)確性和及時(shí)性。
本文提出了一個(gè)J2EE平臺(tái)下基于Struts和Hibernate框架技術(shù)的B/S模式的網(wǎng)上直報(bào)系統(tǒng),本系統(tǒng)提供了一個(gè)靈活、規(guī)范的數(shù)據(jù)采集處理平臺(tái)。相對(duì)于原有的數(shù)據(jù)報(bào)送方式而言,本系統(tǒng)具有以下特點(diǎn):(1)數(shù)據(jù)通過(guò)Web界面上報(bào),并加入了數(shù)據(jù)的規(guī)范性和合法性檢查,提高了數(shù)據(jù)的準(zhǔn)確性和規(guī)范性;(2)數(shù)據(jù)直接進(jìn)入統(tǒng)計(jì)局計(jì)算機(jī)中心數(shù)據(jù)庫(kù),減少了中間流轉(zhuǎn)環(huán)節(jié),提高了數(shù)據(jù)上報(bào)的速度。
Struts是Apache開(kāi)源軟件聯(lián)盟提供的一套用于構(gòu)建基于 MVC(Model-View-Controller)設(shè)計(jì)模式的Java Web應(yīng)用程序的框架。MVC是一種被廣泛采用的設(shè)計(jì)模型,設(shè)計(jì)目的是增加代碼的重用率,減少數(shù)據(jù)表達(dá)、數(shù)據(jù)描述和應(yīng)用操作的耦合度。
MVC設(shè)計(jì)模式由三個(gè)核心模塊組成:模型(Model)、視圖(View)和控制器(Controller)。模型主要負(fù)責(zé)管理用戶數(shù)據(jù),并實(shí)現(xiàn)訪問(wèn)和修改數(shù)據(jù)的業(yè)務(wù)邏輯,模型數(shù)據(jù)可被多個(gè)視圖共享,模型是MVC的核心;視圖是用戶界面,它不進(jìn)行業(yè)務(wù)邏輯處理,負(fù)責(zé)從模型獲取數(shù)據(jù)并顯示,將接收的用戶輸入數(shù)據(jù)交給控制器;控制器是一個(gè)分發(fā)器,它接收用戶的請(qǐng)求和數(shù)據(jù),并調(diào)用相應(yīng)的模型和視圖去完成用戶的需求。Struts是實(shí)現(xiàn)MVC模式的通用框架,其框架組件模型如圖1所示。
圖1 Struts框架組件模型
從圖1可以看出,Struts框架的核心組件是中央控制器ActionServlet,客戶端的所有請(qǐng)求都由ActionServlet進(jìn)行處理。Action是子控制器,它是客戶請(qǐng)求和業(yè)務(wù)邏輯操作之間的橋梁,負(fù)責(zé)調(diào)用相應(yīng)的模型完成業(yè)務(wù)邏輯。Action在Struts-config.xml文件中定義,當(dāng)ActionServlet接收到客戶端的請(qǐng)求后,會(huì)到Struts-config.xml文件中查找相應(yīng)的Action來(lái)執(zhí)行。視圖是通過(guò)一組JSP程序?qū)崿F(xiàn)的。除了基本的JSTL標(biāo)記外,Struts還定義了大量的標(biāo)記來(lái)支持用戶的開(kāi)發(fā)。Struts框架中的模型沒(méi)有明確的定義,通常采用EJB或其他對(duì)象關(guān)系映射工具來(lái)實(shí)現(xiàn)模型組件對(duì)數(shù)據(jù)庫(kù)的訪問(wèn)。
Hibernate是目前最為流行的對(duì)象關(guān)系映射(Object Relation Mapping,ORM)框架,是一種完成從對(duì)象模型到關(guān)系模型的映射技術(shù),即把應(yīng)用程序中的對(duì)象數(shù)據(jù)持久化到關(guān)系數(shù)據(jù)庫(kù)表的一種技術(shù)。Hibernate對(duì)JDBC API進(jìn)行了封裝,負(fù)責(zé)Java對(duì)象的持久化。Hibernate的主要工作就是將對(duì)象數(shù)據(jù)保存到關(guān)系數(shù)據(jù)庫(kù)表中,以及將關(guān)系數(shù)據(jù)庫(kù)表中的數(shù)據(jù)讀取到對(duì)象中。它封裝了所有數(shù)據(jù)訪問(wèn)細(xì)節(jié),減少了開(kāi)發(fā)過(guò)程中處理數(shù)據(jù)的時(shí)間,使程序與數(shù)據(jù)庫(kù)的交互變得更容易。本系統(tǒng)使用Hibernate來(lái)管理Struts的模型部分,其框架如圖2所示。
圖2 Hibernate結(jié)構(gòu)圖
網(wǎng)上直報(bào)系統(tǒng)實(shí)現(xiàn)數(shù)據(jù)在線報(bào)送功能:系統(tǒng)在用戶身份認(rèn)證之后,提供給用戶一個(gè)數(shù)據(jù)錄入界面,在相應(yīng)的報(bào)表頁(yè)面中輸入數(shù)據(jù),完成填報(bào),審核無(wú)誤后在線上報(bào)數(shù)據(jù),保存到服務(wù)器數(shù)據(jù)庫(kù)中。本系統(tǒng)功能分為兩大模塊:數(shù)據(jù)報(bào)送和系統(tǒng)管理。
數(shù)據(jù)報(bào)送包括數(shù)據(jù)填寫(xiě)、數(shù)據(jù)在線審核、歷史數(shù)據(jù)查詢、補(bǔ)錄。其中,數(shù)據(jù)填寫(xiě)完成報(bào)表數(shù)據(jù)的在線填寫(xiě)功能;數(shù)據(jù)在線審核完成對(duì)數(shù)據(jù)的合法性、有效性、關(guān)系平衡性等方面的審核,防止非法數(shù)據(jù)入庫(kù);歷史數(shù)據(jù)查詢完成數(shù)據(jù)的查看,報(bào)表數(shù)據(jù)的顯示和打??;補(bǔ)錄完成補(bǔ)錄漏報(bào)的過(guò)期報(bào)表。
系統(tǒng)管理包括用戶管理、數(shù)據(jù)管理、報(bào)表管理。其中,用戶管理用于實(shí)現(xiàn)用戶的添加、權(quán)限和角色分配等管理工作;數(shù)據(jù)管理主要完成報(bào)表數(shù)據(jù)的增加、修改、刪除以及數(shù)據(jù)的備份與恢復(fù)、匯總及報(bào)表輸出和打印等工作;報(bào)表管理用于實(shí)現(xiàn)報(bào)表定義、報(bào)表任務(wù)的下發(fā)及催報(bào)等管理工作。
本系統(tǒng)是基于J2EE平臺(tái)上的Struts和Hibernate框架,采用多層B/S架構(gòu)模式,分為視圖、控制器、模型、持久化和數(shù)據(jù)庫(kù)五個(gè)層次。層次間遵循自頂向下的依賴關(guān)系,上層依賴下層,而下層應(yīng)盡量減少對(duì)上層的依賴,各層次之間的通信是通過(guò)接口進(jìn)行的。
(1)視圖層和控制器層
本系統(tǒng)視圖層和控制器層使用Struts框架實(shí)現(xiàn)。視圖由HTML和JSP頁(yè)面組成,其數(shù)據(jù)表示由Actionform完成。視圖層接收用戶的HTTP請(qǐng)求,通過(guò)控制器來(lái)進(jìn)行業(yè)務(wù)請(qǐng)求的匹配調(diào)用和轉(zhuǎn)發(fā),并根據(jù)業(yè)務(wù)邏輯動(dòng)態(tài)地組織JSP頁(yè)面內(nèi)容輸出到客戶端瀏覽器??刂破鲗佑汕岸丝刂破鰽ction-Servlet和子控制器Action組成,ActionServlet處理用戶請(qǐng)求,然后利用Struts-config.xml中配置的ActionMapping對(duì)象把請(qǐng)求映射到Action對(duì)象進(jìn)行處理。
(2)模型層
模型層主要進(jìn)行業(yè)務(wù)邏輯處理,是整個(gè)系統(tǒng)的邏輯業(yè)務(wù)核心部分。模型層實(shí)際上又可細(xì)分為數(shù)據(jù)服務(wù)層(Service)和數(shù)據(jù)訪問(wèn)層(Data Access Object,DAO)。DAO層的設(shè)計(jì)是為了降低耦合性,實(shí)現(xiàn)業(yè)務(wù)邏輯與數(shù)據(jù)庫(kù)訪問(wèn)分離,進(jìn)行數(shù)據(jù)庫(kù)操作的封裝。
(3)持久化層和數(shù)據(jù)庫(kù)層
數(shù)據(jù)持久化層由Hibernate構(gòu)成,實(shí)現(xiàn)實(shí)體域?qū)ο蟮某志没?。Hibernate負(fù)責(zé)從數(shù)據(jù)源中獲得數(shù)據(jù),然后生成持久對(duì)象(persistence objects,PO),每個(gè)PO對(duì)應(yīng)于數(shù)據(jù)庫(kù)的一張關(guān)系表,再把PO傳給業(yè)務(wù)邏輯層。數(shù)據(jù)庫(kù)采用Oracle10g。
面向接口編程是指將程序的具體實(shí)現(xiàn)方法與其訪問(wèn)規(guī)范分離開(kāi)來(lái),各個(gè)類(lèi)之間的交互通過(guò)接口來(lái)完成。在分層架構(gòu)中,每個(gè)層次不直接向其上層提供服務(wù),而是定義一組接口,僅向上層暴露其接口功能,上層對(duì)于下層僅僅是接口依賴,而不是依賴具體類(lèi)。當(dāng)下層需要改變時(shí),只要接口及接口功能不變,則上層不用做任何修改,從而降低模塊的耦合度,提高系統(tǒng)功能的擴(kuò)展性和復(fù)用性,提高開(kāi)發(fā)效率。
Hibernate框架位于數(shù)據(jù)的持久層中,通過(guò)使用DAO設(shè)計(jì)模型來(lái)完成實(shí)體類(lèi)的CRUD操作。DAO的實(shí)現(xiàn)包括DAO接口的定義和DAO接口的實(shí)現(xiàn)類(lèi)兩部分,通過(guò)Hibernate API實(shí)現(xiàn)DAO接口中定義的所有抽象方法。如果持久化機(jī)制發(fā)生變化,只要DAO接口不變,只需創(chuàng)建新的DAO實(shí)現(xiàn)類(lèi),而上層的業(yè)務(wù)邏輯代碼無(wú)需修改。
分層設(shè)計(jì)模型和面向接口編程所帶來(lái)的好處是:系統(tǒng)的核心業(yè)務(wù)邏輯的服務(wù)類(lèi)都有對(duì)應(yīng)的接口及其實(shí)現(xiàn)類(lèi),當(dāng)實(shí)現(xiàn)類(lèi)發(fā)生改變時(shí),對(duì)于上層業(yè)務(wù)邏輯來(lái)說(shuō)是透明的,業(yè)務(wù)邏輯代碼無(wú)需修改。
必須建立一種網(wǎng)上信任機(jī)制來(lái)保證Internet上數(shù)據(jù)傳輸?shù)陌踩?、保密性。目前使用較廣的是數(shù)字證書(shū),數(shù)字證書(shū)是一種電子文檔,它提供了在Internet上身份驗(yàn)證的方式。本系統(tǒng)采用數(shù)字證書(shū)加密技術(shù),每個(gè)上報(bào)單位以自己的用戶名和密碼為依據(jù),生成一個(gè)數(shù)字證書(shū)文件。數(shù)字證書(shū)作為用戶唯一的身份標(biāo)識(shí),使上報(bào)數(shù)據(jù)的傳輸更為安全可靠。
本文將Struts與Hibernate框架技術(shù)相結(jié)合,應(yīng)用于網(wǎng)上直報(bào)系統(tǒng),提高了系統(tǒng)的開(kāi)發(fā)效率和系統(tǒng)的性能。通過(guò)網(wǎng)上直報(bào)系統(tǒng),提高了統(tǒng)計(jì)工作的效率。
[1]陸勇,畢建鋼.基于WEB的網(wǎng)上直報(bào)系統(tǒng)的設(shè)計(jì)與實(shí)現(xiàn)[J].計(jì)算機(jī)應(yīng)用與軟件,2006,25(8).
[2]李超,朱巧明.基于Struts和Hibernate架構(gòu)的招生管理系統(tǒng)的設(shè)計(jì)[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(5).
[3]邱哲,王俊標(biāo)等.StrutsWeb設(shè)計(jì)與開(kāi)發(fā)大全[M].北京:清華大學(xué)出版社,2006.
[4]蔡雪燾.Hibernate開(kāi)發(fā)與整合應(yīng)用大全[M].北京:清華大學(xué)出版社,2006.