摘要:為了解決角色訪問控制系統的實用性,對該系統采用了基于MVC模式的J2EE技術進行分析與設計。在這個架構中,采用Struts架構來實現視圖層、業務層和控制層的分離,采用Hibernate架構來實現數據持久層,從而得到一個擴展性強、耦合低、易維護的系統解決方案。
關鍵詞: MVC模式;角色訪問控制;Struts架構;Hibernate架構
中圖分類號:TP393文獻標識碼:A文章編號:1009-3044(2009)32-8939-02
Design of MVC Model Based Role Based Access Control Management System
YOU Qi, ZHANG Guang-yun, GUI Gai-hua
(Guangdong Institute of Science and Technology, Zhuhai 519090, China)
Abstract: To address the role based access control system availability, system analysis and design using the MVC model based on J2EE technology. In this architecture, using Struts framework to implement the view layer, business layer and control layer separation, using Hibernate framework to achieve data persistence layer, and thus obtain an extension of strong coupling low, easy to maintain system solutions.
Key Words: MVC model; role based access; struts architecture; hibernate architecture
權限管理系統的解決方案致力于推動服務行業的信息化建設,滿足廣大商業用戶專業、高可靠、大流量的業務需求?;贛VC模式的設計正是在這樣的理念指導下,以客戶實際應用需求為導向開發的。該系統的建設以實用性和擴展性為根本原則,既要滿足業務需求,又要考慮將來的發展需要,因此采用先進的J2EE技術架構是這次開發的首選架構??紤]到系統開發完成后,系統將面臨著各企業的業務需求的變化而變化,為了開發和后期維護的方便,應選擇一個合理的開發模式,采用目前流行并成熟的MVC模式可以使視圖、模型、控制器的耦合性降低,便于系統的開發和后期的維護。
1 技術結構設計
1.1 MVC模式
JSP Model2不是一項革命性的新模式,其實它是來自于Smalltalk語言研發過程中出現的MVC模式。在大多數情況下,Java程序員趨向于可完全互換使用這兩個名詞。MVC[1]是Model-View-Controller的簡稱,即模式-視圖-控制器。MVC是Xerox PARC在20世紀80年代為編程語言Smalltalk-80發明的一種軟件設計模式,至今已被廣泛應用,最近幾年被推薦為Sun公司J2EE平臺的設計模式,受到越來越多的Web開發者的歡迎。MVC把應用程序分成三個核心模塊:模型、視圖和控制器。許多現代開發環境,包括Java的Swing,都使用MVC架構作為他們框架的基礎。
圖1顯示了三個模塊各自功能和他們之間的互相關系。
MVC設計模式給我們的開發帶來很多益處。首先,多個視圖可以共享一個模型。模型響應用戶請求并返回響應數據,試圖負責格式化數據并把他們呈現給用戶,業務邏輯和表示層分離,同一個模型可以被不同的視圖重用,大大提高了代碼的可重用性。其次,模型是自包含的,與控制器和視圖保持相對獨立,所以可以方便的改變應用程序的數據層和業務規則。由于MVC的三個模塊相互獨立,改變其中一個不會影響其他兩個,所以依據這種設計思想能夠構造出來良好的松耦合的構件。此外控制器提高了應用程序的靈活性和可配置性。
使用MVC需要精心的計劃,由于它的內部原理比較復雜,所以需要花費一些時間去理解它。將MVC運用到應用程序中,會帶來額外的工作量,增加應用的復雜性,所以MVC不適合小型應用程序。但對于開發存在大量用戶界面,并且業務邏輯復雜的大型應用程序,MVC將會使軟件在健壯性、代碼重用和結構方而上一個新的臺階。盡管在最初構建MVC框架時會花費一定的工作量,但從長遠角度看,它會大大提高后期軟件開發效率和降低維護成本。
對于開發Web應用,要從頭設計并開發出一個可靠、穩定的框架并不是一件容易的事。幸運的是,隨著Web開發技術的日趨成熟,在Web開發領域中出現了一些現成的優秀的框架,開發者可以直接使用它們。本系統中就使用了Struts作為前端開發框架和Hibernate作為數據映射框架。
1.2 Struts技術概述
Struts框架是典型的基于MVC模式應用架構的框架,Struts分別對這三個類提供了實現組件,本系統對這三個類所采用的實現組件分別JavaBean、Jsp、Servlet,Struts系統結構如圖2所示。
Struts技術[2]主要是被使用在MVC模式的M(表示層)上,Struts框架的處理流程很清晰地反映了MVC模式的優勢。利用Struts技術來設計表示層最大的特點就是將大量的邏輯放在配置文件中,而不是程序中,以免日后業務需求有所變更時必改動程序。首先,按照Servlet標準,所有的Servlet必須在Web配置文件Web.xml中聲明,因此,ActionServlet也必須在Web.xml 中描述。當用戶向服務器端提交請求時,信息首先發送到控制器ActionServlet。由控制器ActionServlet處理客戶請求, 然后利用Struts-config.xml中配置的ActionMapping對象把請求映射到Action處理器對象進行處理;Struts的Module部分由Action和Actionform組成。Action處理器對象訪問ActionForm中的數據,處理和響應客戶請求,它還調用后臺的Bean組件,這些組件中封裝了具體的業務邏輯。Action處理器對象根據處理結果通知控制器,控制器進行下一步處理;Struts應用中的View部分是通過JSP技術實現的。Struts提供了自定義的標記庫可以使用,通過這些自定義標記可以非常好地和系統的Model部分交互,通過使用這些自定義標記創建的JSP表單,可以實現和Model 部分中的ActionForm的映射,完成對用戶數據的封裝。
Struts中引入了多模塊配置的概念,允許將單個Struts應用劃分成幾個模塊,每個模塊有自己的Struts配置文件、JSP頁面、Action等。因此通過為每個應用模塊創建獨立的Struts配置文件,并在Web部署描述符Web.xml文件中統一管理,可以在團隊中有效地進行并行開發。
1.3 Hibernate技術概述
Hibernate[3]是Java平臺上的一種全功能的、開放源代碼的OR映射框架。它是一個面向Java環境的對象/關系數據庫(Object/Relational Mapping (ORM))映射工具[4],它對JDBC進行了輕量級的對象封裝,使得Java程序員可以使用面向對象編程思想來操作關系數據庫。Hibernate的目標是對于開發者通常的數據持久化相關的編程任務。
Hibernate不僅管理Java類到數據庫表的映射(包括Java數據類型到SQL數據類型的映射),還提供數據查詢和獲取數據的方法,可以大幅度減少開發時人工使用SQL和JDBC處理數據的時間。相對于使用JDBC和SQL來手工操作數據庫,使用Hibernate,可以大大減少操作數據庫的工作量。
Hibernate擁有一種功能非常強大的查詢語言(HQL,Hibernate Query Language)這種語言與SQL非常相似,便于開發人員掌握。更重要的是,HQL完全是面向對象的,查詢的是持久對象,而不是數據庫的記錄??梢杂盟鼇碇С侄鄳B、繼承、關聯等關系。
在應用Hibernate框架時,首先編寫O/R映射描述文件,完成對象、關系數據庫之間的映射。持久對象可以根據映射文件生成,然后編寫業務邏輯類。這些JavaBean實現了具體的業務邏輯,也封裝了對Hibernate的訪問。
如圖3Hibernate體系結構所示[5],應用程序通過Hibernate與數據庫發生關系,對數據進行操作。而Hibernate自身通過properties和類的映射文件(mapping.xml)將類映射到數據庫的行。從而,應用程序可以通過持久化的對象類直接訪問數據庫,而不是必須使用JDBC和SQL進行數據的操作。
1.4 Hibernate和Struts綜合應用的體系結構
Struts和Hibernate這兩個框架結合起來很完美地進行系統的開發和設計,Struts+Hibernate體系結構[6-7]如圖4所示。
控制器:由Struts的ActionServlet和ActionMapping來完成。ActionServlet接受所有來自客戶端的請求,根據系統的配置文件(Struts-config.xml)來路由其他的Action對象。每個ActionMapping實現一個請求到一個具體的Action之間的映射。
模型:由Action Form, Action, Java類和Hibernate來完成。Struts為模型部分提供TAction和ActionForm對象。Action獲取從ActionServlet傳來的ActionForm取出ActionForm中的相關信息,并調用業務邏輯模塊的接口,并把響應提交到合適的視圖組件。業務邏輯模塊就是實現業務邏輯的Java類及供Action調用的接口。這些Java類通過Hibernate穿過持久層映射到具體的數據庫表。ActionForm組件對象實現對客戶端表單數據的良好封裝,實現視圖層和模型層之問的相互支持。
視圖:視圖部分是通過JSP技術來實現的。Struts提供了自定義的標記庫,通過這些自定義標記可以非常好地和系統的模型部分交互。通過使用這些自定義標記創建的JSP表單,可以實現和模型部分中ActionForm的映射,完成對用戶數據的封裝,靈活運用TagLib可以大大提高開發效率。
參考文獻:
[1] 孫衛琴,精通Struts:基于MVC的Java Web設計與開發[M],北京:電子工業出版社,2004:9-11.
[2] James Goodwill.Mastering Jakarta Struts[M].Indiana:Wiley Publishing,2002:4-5,62-75.
[3] 夏聽,Hibernate開發指南[M].北京:電子工業出版社,2004.
[4] Hibernate:Object/Relation Mapping and Objiect Persistence for Java[EB/OL].http://hibernate.bluemars.net/,2004.
[5] 陳天河.Hibernate項目開發寶典[M].北京:電子工業出版社,2006,167-201.
[6] 陳明秋,李雨風.整合Struts和Hibernate開發向導[M].北京:電子工業出版社 2005.
[7] 任文娟,王華,鞠宏偉,等.基于Struts和Hibernate框架的Web應用的設計與實現[J].微計算機信息,2006,22(9-3):184-187.