当前位置:文档之家› 跟我学软件系统表示层的模块设计中所涉及的J2EE核心设计模式——前端控制器模式

跟我学软件系统表示层的模块设计中所涉及的J2EE核心设计模式——前端控制器模式

跟我学软件系统表示层的模块设计中所涉及的J2EE核心设计模式——前端控制器模式
跟我学软件系统表示层的模块设计中所涉及的J2EE核心设计模式——前端控制器模式

1.1跟我学软件系统表示层的模块设计中所涉及的J2EE核心设计模式——前端控制器模式

1.1.1前端控制器模式

1、前端控制器模式

(1)对所有的请求进行统一处理

这个模式中,所有的请求都被传送到一个对象中。这个主要的对象将处理所有的请求,决定其后的业务控制器组件。

(2)集中管理请求

对于把视图显示以及其他功能实现集中到一个主要的对象中,将使修改变得很容易,对应用的修改,可以在所有视图中反映出来

2、为什么要采用前控制器

(1)集中式控制模块

它的出现主要是由于表示层通常需要控制和协调来自不同用户的多个请求,而这种控制机制又根据不同的需要,可能会集中式控制或分散式控制。换句话说,就是应用系统需要对于表示层的请求提供一个集中式控制模块,以提供各种系统服务,包括内容提取、视图管理和浏览。

(2)为什么要提供集中式控制模块

如果系统中没有这种集中式控制模块或控制机制,每个不同的系统服务都需要进行单独的视图处理,这样代码的重复性就会提高,致使系统开发代价提高;同时,如果没有一个固定模块管理视图之间的浏览机制,致使其浏览功能下放于每个不同的视图中,最终必将使得系统的可维护性受到破坏;

(3)Struts中的实现

Struts中的ActionServlet即为前控制器组件。

3、前控制器模式和截取过滤器的不同

(1)过滤器

由于在实际项目开发中一般都会有多个截取过滤器以实现不同的应用请求的过滤处理,从而形成一个链。但这样阶梯的处理容易造成低效率,因为判断链的方式需要花费时间。

(2)前控制器

而前控制器一般为Servlet程序,前端控制器模式的应用环境可以是分布式的处理环境,多个控制器分布式地来处理不同的控制要求。这种分布式控制机制是由WEB的配置文件web.xml来实现的。

当有客户端请求时,容器都要读取web.xml配置文件中的以便判断用户对资源的访问权限,并对某些类型的用户分发到对应的控制器来处理;

4、全局和局部前控制器模式

虽然前控制器模式推荐对于全部的请求使用统一处理(Struts中的ActionServlet则采用全局前控制器模式),但是它也没有限制在一个系统中只能具有一个控制器,在系统中的每个层次都可以具有多个控制器,并且映射至不同的系统服务。

5、前控制器的类图和序列图

(1)前控制器的类图

(2)前控制器的序列图

6、可以实现控制器的方法

(1)基于Servlet前控制器----Struts框架中的ActionServlet即为该方案

这种方法建议使用servlet来实现一个控制器,尽管在语法上相差无几,但是它比使用JSP来实现要优越一些;因为控制器所进行的请求处理,多数都是与程序运行和控制流动相关的,这些处理工作虽然与显示模式相关,但是实际上是逻辑独立的,所以它们更适合在servlet中实现,而不是JSP技术中;使用这种方法也存在一些弱点,比如说servlet无法使用JSP运行环境的资源,如请求参数等,但是这个弱点也不是不能解决的,我们可以在servlet中建立相关的句柄来访问同样的资源,当然其代码会变得繁琐一点。

(2)用过滤器实现前控制器----本项目采用该方案

过滤器提供了与用户请求的中心处理相类似的功能,也就是说,控制器的一些功能可以由过滤器来实现,这种方案的过滤器主要负责处理请求的截取和解释,而不是请求的处理和响应的生成;通常可以为应用系统提供一个核心控制点,以处理所有的系统服务和程序逻辑,核心控制也就表明了所有的请求都可以简单地被跟踪和记录,从而方便各种服务功能的实施;

当然,它也存在一些缺点,一个核心控制点的小问题可能会引发系统的崩溃,但在应用系统的实际开发中,这并不是个问题,因为通常我们都会在同一个层面上实现多个控制器,从而避免了这个缺陷;在控制器中,开发人员可以很方便地实现一个检查安全机制的组件,从而可以在最外层屏蔽对系统的恶意访问,另外使用控制器也会提高系统模块的可重用性,尤其在控制器同时使用帮助类的时候。

(3)基于JSP的前控制器---一般不推荐采用

这种方法建议使用JSP页面实现控制器,尽管语法上相同,但是Servlet方案要比其优越一些;因为控制器所处理的逻辑一般都不是有关显示模式的,所以在JSP页面中实现控制器似乎有点风马牛不相及;使用这种方法也不利于开发团队的角色和职责的分配,即软件开发人员需要在负责显示逻辑的JSP页面中修改请求处理的代码,通常,这种工作都是相当复杂的,尤其考虑整个JSP页面的编程、编译、测试和调试错误。

7、前控制器的应用要点

1)这个模式对于需要在多个含有动态数据的页面之间进行复杂导航的系统来说,是很

有效的。

2)这个模式对于要在所有页面中都包含模板,转换等的应用来说,也是很有效的。

3)由于视图的选择集中在前端控制器上,因此,视图的导航变得更加容易理解和便于

配置。

4)视图重用和变更会更加容易。

5)视图之间的复杂交互,使得控制器变得复杂。从而,当应用发展的时候,控制器将

变得难以维护。不过,大部分情况下可以用XML映射来解决。

相关主题
文本预览
相关文档 最新文档