WEB开发网
开发学院软件开发Java Tomcat 系统架构与设计模式,第 2 部分: 设计模式... 阅读

Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析

 2010-05-31 00:00:00 来源:WEB开发网   
核心提示: 下面看一下 Tomcat 是如何实现命令模式的,下面是 Tomcat 命令模式的结构图:图 4. Tomcat 命令模式的结构图查看原图(大图)Connector 作为抽象请求者,Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析(5),HttpConnector 作为具体请求者,H

下面看一下 Tomcat 是如何实现命令模式的,下面是 Tomcat 命令模式的结构图:

图 4. Tomcat 命令模式的结构图
Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析

查看原图(大图)

Connector 作为抽象请求者,HttpConnector 作为具体请求者。HttpProcessor 作为命令。Container 作为命令的抽象接受者,ContainerBase 作为具体的接受者。客户端就是应用服务器 Server 组件了。Server 首先创建命令请求者 HttpConnector 对象,然后创建命令 HttpProcessor 命令对象。再把命令对象交给命令接受者 ContainerBase 容器来处理命令。命令的最终是被 Tomcat 的 Container 执行的。命令可以以队列的方式进来,Container 也可以以不同的方式来处理请求,如 HTTP1.0 协议和 HTTP1.1 的处理方式就会不同。

责任链模式

Tomcat 中一个最容易发现的设计模式就是责任链模式,这个设计模式也是 Tomcat 中 Container 设计的基础,整个容器的就是通过一个链连接在一起,这个链一直将请求正确的传递给最终处理请求的那个 Servlet。

责任链模式的原理

责任链模式,就是很多对象有每个对象对其下家的引用而连接起来形成一条链,请求在这条链上传递,直到链上的某个对象处理此请求,或者每个对象都可以处理请求,并传给下一家,直到最终链上每个对象都处理完。这样可以不影响客户端而能够在链上增加任意的处理节点。

通常责任链模式包含下面几个角色:

Handler(抽象处理者):定义一个处理请求的接口

ConcreteHandler(具体处理者):处理请求的具体类,或者传给下家

Tomcat 中责任链模式示例

在 tomcat 中这种设计模式几乎被完整的使用,tomcat 的容器设置就是责任链模式,从 Engine 到 Host 再到 Context 一直到 Wrapper 都是通过一个链传递请求。

Tomcat 中责任链模式的类结构图如下:

图 5. Tomcat 责任链模式的结构图
Tomcat 系统架构与设计模式,第 2 部分: 设计模式分析

上图基本描述了四个子容器使用责任链模式的类结构图,对应的责任链模式的角色,Container 扮演抽象处理者角色,具体处理者由 StandardEngine 等子容器扮演。与标准的责任链不同的是,这里引入了 Pipeline 和 Valve 接口。他们有什么作用呢?

实际上 Pipeline 和 Valve 是扩展了这个链的功能,使得在链往下传递过程中,能够接受外界的干预。Pipeline 就是连接每个子容器的管子,里面传递的 Request 和 Response 对象好比管子里流的水,而 Valve 就是这个管子上开的一个个小口子,让你有机会能够接触到里面的水,做一些额外的事情。

为了防止水被引出来而不能流到下一个容器中,每一段管子最后总有一个节点保证它一定能流到下一个子容器,所以每个容器都有一个 StandardXXXValve。只要涉及到这种有链式是处理流程这是一个非常值得借鉴的模式。

上一页  1 2 3 4 5 

Tags:Tomcat 架构

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接