基于MVC模式的角色访问控制系统设计

时间:2022-02-19 01:41:12

基于MVC模式的角色访问控制系统设计

摘要:为了解决角色访问控制系统的实用性,对该系统采用了基于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

权限管理系统的解决方案致力于推动服务行业的信息化建设,满足广大商业用户专业、高可靠、大流量的业务需求。基于MVC模式的设计正是在这样的理念指导下,以客户实际应用需求为导向开发的。该系统的建设以实用性和扩展性为根本原则,既要满足业务需求,又要考虑将来的发展需要,因此采用先进的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完全是面向对象的,查询的是持久对象,而不是数据库的记录。可以用它来支持多态、继承、关联等关系。

在应用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]./,2004.

[5] 陈天河.Hibernate项目开发宝典[M].北京:电子工业出版社,2006,167-201.

[6] 陈明秋,李雨风.整合Struts和Hibernate开发向导[M].北京:电子工业出版社 2005.

[7] 任文娟,王华,鞠宏伟,等.基于Struts和Hibernate框架的Web应用的设计与实现[J].微计算机信息,2006,22(9-3):184-187.

上一篇:中缀及后缀算术表达式在运算中的应用研究 下一篇:高校办公自动化课程教学方法的研究与实践