摘要:介紹了基于Struts框架的電子政務系統設計和實現過程,系統遵循J2EE規范和MVC設計模式,并且采用了可重用的設計思想和一些組件技術。實現跨平臺、低成本、開發高效快捷,可裁剪和移植性強等優點,解決了目前電子政務系統推廣普及的一些瓶頸問題,適用于電子政務系統建設項目的需求。
關鍵詞:電子政務;框架;Struts
中圖分類號:TP311文獻標識碼:A文章編號:1009-3044(2008)05-00ppp-0c
電子政務是指政府機構運用計算機技術和網絡技術,將其管理和服務的職能轉移到網絡上去,同時實現政府組織結構和工作流程的重組優化,超越時間/空間和部門分隔的限制,建成一個精簡,高效,廉潔,公正的政府運作模式調研表明,電子政務系統的目標是要建立政府信息化網絡,建成覆蓋機關各處室,各部門,基層各個單位的信息集成系統,實現行政機關的辦公現代化,開發基于Web方式的辦公信息系統。文中詳細介紹了在Web環境下的基于Struts框架如何應用于電子政務系統的開發實例
1 Web框架Struts
Struts是一個基于MVC模式的Web應用程序的框架[1]。它是Apache Software Foundation的一個開源項目。至今已被廣泛使用。MVC模式分成三個核心部件:模型(Model)、視圖(View)、控制器(Controller),它們各自處理自己的任務。其中Action Servlet類是控制器組件,它根據用戶請求,調用相應的Action類實例進行處理,然后選擇相應的JSP文件返回客戶端;ActionForm類是模型中的數據Bean類,用來表示從View組件中輸入的數據;Action類是模型中的邏輯Bean類,對它擴展后可以執行某一特定請求的業務邏輯組件Action之間的映射。此外Struts還包含了一個非常重要的配置文件struts-config.xml,它包括關于Web應用程序的Action Mapping信息、JDBC數據源信息、ActionForm Bean信息和全局發等。
用Struts框架可以將業務邏輯,控制和數據顯示功能模塊區分開來,應用程序功能劃分很清晰,開發人員可以分別集中開發業務邏輯模塊,程序控制模塊和數據顯示模塊,不必擔心使三者之間的耦合。Struts工作原理如圖1所示。

圖1 Struts工作原理圖
Struts提供了Control組件并且整合了其它技術來實現Model和View[2]。對于Model,Struts可以使用標準數據訪問技術,如JDBC和EJB,也可以使用第三方工具,如Hibernate,至于View,Struts支持JSP技術,支持JSTL和JSF,也可以使用Velocity模板,XSLT及其它表示系統。此外Struts提供了自定義的標記庫可以輔助JSP進行表示層的設計,通過這些自定義標記可以非常好的和系統的Model部分交互。Struts的核心組件有ActionServlet,Action,ActionForm,ActionMapping,ActionForword,TagLib以及配置文件等。我們用JSP技術結合Struts強大的TagLib來實現我們的表示層。
2 應用系統構建
采用基于MVC模式的Struts應用架構進行開發[3],適應需求的經常變更,能靈活進行業務邏輯開發。辦公自動化解決方案以辦公處理為基礎,充分考慮了行業發展中常規性的和可變性的因素,為企業提供了全方位的多層面的應用服務,滿足機關現有的應用需求,符合其辦事特征和表現方式。
采用基于J2EE的Web應用體系結構。基于三層的瀏覽器/服務器(B/S)體系結構。Web瀏覽器是集成所有信息服務的最終平臺。提供全動態、分布式的信息發布與處理機制,實現政務網站信息按部門和權限進行動態發布和更新。結構圖示意如下:

圖2 體系結構
2.1 用戶層和WEB服務層
用戶層是系統面向用戶的各種應用子程序,包括信息瀏覽、信息查詢、信息錄入子程序。用戶通過瀏覽器訪問管理信息系統。具有交互功能,進行填寫信息、提交請求的操作,請求結果返回在客戶端顯示。
WEB 服務層的功能是提供系統應用界面。系統的開發基礎是基于WEB技術,因為當今WEB技術以它的方便操作、界面可以讓用戶根據需要自行更改、功能強大等特點廣泛的被應用。通常情況下對于訪問者和系統管理人員來說,都可以通過瀏覽器來完成系統操作。
2.2 業務邏輯層
業務邏輯層主要是對用戶的請求進行判斷處理。當用戶發送數據請求后,首先會進入Web應用層,應用層對用戶請求數據進行加工處理并發送到業務邏輯層。通過邏輯層的驗證后,執行相應的業務操作,將用戶請求提交到數據庫,再由數據庫返回用戶需求的結果給Web應用層,再通過應用層直接將數據返回給用戶。
本系統的應用核心將采用J2EE分布式應用技術,它是一種跨平臺的開放結構,用于開發基于面向對象技術的客戶端/服務器應用程序。客戶端可以通過在對象上實現的接口訪問對象。針對系統可能出現多個操作并發,以及由于突發性的故障所造成的問題,系統會采用多層分布式應用。多層分布式應用采取事務方法來管理所有操作,保證所有事務要么被全部成功地提交,要么全部回滾到事務初始狀態。這樣可確保系統數據的穩定性和完整性。
2.3 數據庫層(應用后臺)
為了提高開發Web應用的效率,簡化Java數據庫應用的開發,我們采用數據庫組件的設計,使其能夠與Struts框架有機結合,以便利用Struts框架的健壯性和伸縮性達到組件的可重用性,降低數據庫應用與數據來源的相關性。
其設計的核心思想是簡化JDBC編程,封裝建立數據庫連接的步驟,通過修改屬性文件完成數據存取邏輯,從而達到設計目的。因此在系統中數據庫組件采用基于DAO模式[4],在實現中封裝注冊和載入JDBC驅動程序、建立連接類DBConnectionManager,對數據庫連接池進行安全封裝和控制管理,對一個或多個由屬性文件定義的數據庫連接池的訪問。
通過運行SQL語句及處理查詢結果集類DBOperation,實現數據庫的動態連接功能,添加上實際應用中常用的方法實現與數據源的交互。
在數據庫交互類AppInter中編寫與業務邏輯相關的SQL語句,然后調用DBOperation運行SQL語句及分頁控制PageControl處理查詢結果集,與數據源進行交互。
編寫AppAction類對Struts中的Action類的繼承和實現,接受來自頁面表單的參數,調用相應的業務邏輯類,并將得到的結果在ActionServlet控制類下傳給頁面展示。
3 Struts在應用中的改進
3.1 功能和頁面的安全控制
由于政務系統要有一個良好的安全性,我們程序設計中采用由一個類負責進行安全檢查,而不是在每個JSP頁面或Action類中都實現這個功能。通過使用processRales方法可提供頁面級別和功能級別的安全檢查,需要擴展RequestProcessor類,覆蓋其方法processRoles以進行檢查,其中使用HashMap存儲角色到頁面ID和功能ID的映射,可以采用JAAS框架在web. xml中加人安全的聲明的方法來實現功能權限上的訪問。
如果使用了Tiles,對于頁面級的安全控制可寫入在tiles的配置文件中,如下:
<definition name =“defl” path=\"/classicLay-out. jsp\" role=\" admin\">
<put name =“title\" value =”Tiles Example 1”/>
<put name =“header\" value=\"/common/header. jsp\"/>
<put name=“menu” value=\"/common/menu.jsp\"/>
<put name =“footer\" value=\"/common/footer, jsp\"/>
<put name=“body\" value=\"/bodyl .jsp” />
< /definition>
3.2 中文請求的處理問題
中文處理的問題在JSP/Servlet中由來已久,由于ActionServlet自動從HtmlForm中提取請求數據到FormBean,因此如果請求數據中包含中文,則FormBean中讀取到的都是亂碼。在上面的系統中,我們采用了Servlet2.3中新提供的filter特性來解決這個問題。我們采取的是編寫一個編碼轉換的類實現Filter接口,并且在web.xml文件中做相應的配置,就可以讓所有的request數據在被接收之前轉換為GB2312編碼。
4 結束語
Struts 是一種優秀的J2EE MVC框架方式。靈活應用它所提供的大量標簽庫,能大大提高Web 應用程序的開發效率。在頁面導航方面,通過一個配置文件即可把握整個系統各部分之間的聯系,這給后期維護帶來很大的便利。尤其是當另一批開發者接手該項目時,這種優勢體現得更加充分。就程序員而言,可以充分利用 Struts框架提供的各種使用類和標簽庫,簡化編碼工作,把更多的精力花在解決實際業務問題上。利用Struts 框架進行 Web 應用的開發也非常有利于人員分工和項目管理,同時系統的可維護性和可擴充性也得到提高。
參考文獻:
[1]開發專家之Sun ONE.JSP應用開發詳解[M].電子工業出版社,2005.
[2]孫衛琴.精通Struts:基于MVC的Java Web設計與開發[M].北京:電子工業出版社,2004.
[3]王長利,全厚德.基于數據庫的通信設備自動測試系統設計[J].微計算機信息,2005,1(1):69-71.
[4]孫葉楓,宋中山.JSP中基于連接池的數據庫訪問技術[J].計算機應用研究,2005,(6):80-82.
收稿日期:2007-12-25
作者簡介:唐金鵬(1975-),男,湖南長沙人,高級工程師,碩士,研究方向為:工作流管理,軟件框架技術;李玲琳(1974-),女,湖南長沙人,講師,碩士,主要研究方向為:軟件工程,工作流。