李 丹,劉麗華
(河北軟件職業技術學院,河北 保定 071000)
隨著社會經濟的不斷發展,人們越來越關注統計數據,而統計數據的采集方式和渠道直接影響到統計數據的質量。傳統的數據采集方式是由基層統計機構收集統計數據,錄入計算機并層層上報到國家統計局。隨著入統單位的增加和統計報表的增多,基層統計機構的工作量將不斷增大,原有的統計方式不能滿足日益增長的統計工作的需要。隨著網絡環境的不斷改善和Web應用技術的發展,一種新的統計數據采集方式——網上直報系統應運而生。網上直報系統就是指通過Web方式進行數據采集,實現數據共享,從而保證數據的準確性和及時性。
本文提出了一個J2EE平臺下基于Struts和Hibernate框架技術的B/S模式的網上直報系統,本系統提供了一個靈活、規范的數據采集處理平臺。相對于原有的數據報送方式而言,本系統具有以下特點:(1)數據通過Web界面上報,并加入了數據的規范性和合法性檢查,提高了數據的準確性和規范性;(2)數據直接進入統計局計算機中心數據庫,減少了中間流轉環節,提高了數據上報的速度。
Struts是Apache開源軟件聯盟提供的一套用于構建基于 MVC(Model-View-Controller)設計模式的Java Web應用程序的框架。MVC是一種被廣泛采用的設計模型,設計目的是增加代碼的重用率,減少數據表達、數據描述和應用操作的耦合度。
MVC設計模式由三個核心模塊組成:模型(Model)、視圖(View)和控制器(Controller)。模型主要負責管理用戶數據,并實現訪問和修改數據的業務邏輯,模型數據可被多個視圖共享,模型是MVC的核心;視圖是用戶界面,它不進行業務邏輯處理,負責從模型獲取數據并顯示,將接收的用戶輸入數據交給控制器;控制器是一個分發器,它接收用戶的請求和數據,并調用相應的模型和視圖去完成用戶的需求。Struts是實現MVC模式的通用框架,其框架組件模型如圖1所示。

圖1 Struts框架組件模型
從圖1可以看出,Struts框架的核心組件是中央控制器ActionServlet,客戶端的所有請求都由ActionServlet進行處理。Action是子控制器,它是客戶請求和業務邏輯操作之間的橋梁,負責調用相應的模型完成業務邏輯。Action在Struts-config.xml文件中定義,當ActionServlet接收到客戶端的請求后,會到Struts-config.xml文件中查找相應的Action來執行。視圖是通過一組JSP程序實現的。除了基本的JSTL標記外,Struts還定義了大量的標記來支持用戶的開發。Struts框架中的模型沒有明確的定義,通常采用EJB或其他對象關系映射工具來實現模型組件對數據庫的訪問。
Hibernate是目前最為流行的對象關系映射(Object Relation Mapping,ORM)框架,是一種完成從對象模型到關系模型的映射技術,即把應用程序中的對象數據持久化到關系數據庫表的一種技術。Hibernate對JDBC API進行了封裝,負責Java對象的持久化。Hibernate的主要工作就是將對象數據保存到關系數據庫表中,以及將關系數據庫表中的數據讀取到對象中。它封裝了所有數據訪問細節,減少了開發過程中處理數據的時間,使程序與數據庫的交互變得更容易。本系統使用Hibernate來管理Struts的模型部分,其框架如圖2所示。

圖2 Hibernate結構圖
網上直報系統實現數據在線報送功能:系統在用戶身份認證之后,提供給用戶一個數據錄入界面,在相應的報表頁面中輸入數據,完成填報,審核無誤后在線上報數據,保存到服務器數據庫中。本系統功能分為兩大模塊:數據報送和系統管理。
數據報送包括數據填寫、數據在線審核、歷史數據查詢、補錄。其中,數據填寫完成報表數據的在線填寫功能;數據在線審核完成對數據的合法性、有效性、關系平衡性等方面的審核,防止非法數據入庫;歷史數據查詢完成數據的查看,報表數據的顯示和打印;補錄完成補錄漏報的過期報表。
系統管理包括用戶管理、數據管理、報表管理。其中,用戶管理用于實現用戶的添加、權限和角色分配等管理工作;數據管理主要完成報表數據的增加、修改、刪除以及數據的備份與恢復、匯總及報表輸出和打印等工作;報表管理用于實現報表定義、報表任務的下發及催報等管理工作。
本系統是基于J2EE平臺上的Struts和Hibernate框架,采用多層B/S架構模式,分為視圖、控制器、模型、持久化和數據庫五個層次。層次間遵循自頂向下的依賴關系,上層依賴下層,而下層應盡量減少對上層的依賴,各層次之間的通信是通過接口進行的。
(1)視圖層和控制器層
本系統視圖層和控制器層使用Struts框架實現。視圖由HTML和JSP頁面組成,其數據表示由Actionform完成。視圖層接收用戶的HTTP請求,通過控制器來進行業務請求的匹配調用和轉發,并根據業務邏輯動態地組織JSP頁面內容輸出到客戶端瀏覽器。控制器層由前端控制器Action-Servlet和子控制器Action組成,ActionServlet處理用戶請求,然后利用Struts-config.xml中配置的ActionMapping對象把請求映射到Action對象進行處理。
(2)模型層
模型層主要進行業務邏輯處理,是整個系統的邏輯業務核心部分。模型層實際上又可細分為數據服務層(Service)和數據訪問層(Data Access Object,DAO)。DAO層的設計是為了降低耦合性,實現業務邏輯與數據庫訪問分離,進行數據庫操作的封裝。
(3)持久化層和數據庫層
數據持久化層由Hibernate構成,實現實體域對象的持久化。Hibernate負責從數據源中獲得數據,然后生成持久對象(persistence objects,PO),每個PO對應于數據庫的一張關系表,再把PO傳給業務邏輯層。數據庫采用Oracle10g。
面向接口編程是指將程序的具體實現方法與其訪問規范分離開來,各個類之間的交互通過接口來完成。在分層架構中,每個層次不直接向其上層提供服務,而是定義一組接口,僅向上層暴露其接口功能,上層對于下層僅僅是接口依賴,而不是依賴具體類。當下層需要改變時,只要接口及接口功能不變,則上層不用做任何修改,從而降低模塊的耦合度,提高系統功能的擴展性和復用性,提高開發效率。
Hibernate框架位于數據的持久層中,通過使用DAO設計模型來完成實體類的CRUD操作。DAO的實現包括DAO接口的定義和DAO接口的實現類兩部分,通過Hibernate API實現DAO接口中定義的所有抽象方法。如果持久化機制發生變化,只要DAO接口不變,只需創建新的DAO實現類,而上層的業務邏輯代碼無需修改。
分層設計模型和面向接口編程所帶來的好處是:系統的核心業務邏輯的服務類都有對應的接口及其實現類,當實現類發生改變時,對于上層業務邏輯來說是透明的,業務邏輯代碼無需修改。
必須建立一種網上信任機制來保證Internet上數據傳輸的安全性、保密性。目前使用較廣的是數字證書,數字證書是一種電子文檔,它提供了在Internet上身份驗證的方式。本系統采用數字證書加密技術,每個上報單位以自己的用戶名和密碼為依據,生成一個數字證書文件。數字證書作為用戶唯一的身份標識,使上報數據的傳輸更為安全可靠。
本文將Struts與Hibernate框架技術相結合,應用于網上直報系統,提高了系統的開發效率和系統的性能。通過網上直報系統,提高了統計工作的效率。
[1]陸勇,畢建鋼.基于WEB的網上直報系統的設計與實現[J].計算機應用與軟件,2006,25(8).
[2]李超,朱巧明.基于Struts和Hibernate架構的招生管理系統的設計[J].計算機工程與設計,2008,29(5).
[3]邱哲,王俊標等.StrutsWeb設計與開發大全[M].北京:清華大學出版社,2006.
[4]蔡雪燾.Hibernate開發與整合應用大全[M].北京:清華大學出版社,2006.