Tomcat的系统架构与模式设计分析.docxVIP

  • 1
  • 0
  • 约2.41万字
  • 约 25页
  • 2023-08-06 发布于上海
  • 举报
Tomcat 的系统架构与设计模式 (君山 ,11/20/2009 ) 如有错误之处请指出( junshan@) 一、Tomcat 总体设计前言:从标题看上去很大,Tomcat 很复杂,不是一篇文章就能说清楚的,就算我想说恐怕我也说不清楚,我主要是想知道 Tomcat 如何分发请求的,如何处理多用户同时请求的,还有他的容器是如何工作的。这也是一个 一、 Tomcat 总体设计 这里所说的 Tomcat 是以 Tomcat5 为基础,也兼顾最新的 Tomcat6。Tomcat 基本的设计思路还是有连贯性的。 1. Tomcat 1. Tomcat 总体结构 Tomcat 的结构复杂,但是 Tomcat 也非常的模块化,找到了 Tomcat 最主要的模块其实 Tomcat 就能被你抓住“七寸”了。下面是 Tomcat 的总体结构图: Server Server 服 务 器 Service 服 务 Service 服 务 Service 服务Connector核心组件 Container核心组件 Connector Connector Connector Container Jasper Naming Session Loging JMX 图 1.Tomcat 的总体结构 从上图中可以看出 Tomcat 的心脏是两个组件:Connector 和 Container,关于这两个组件将在后面详细介绍。C onnector 组件是可以被替换,这样可以提供给服务器设计者更多的选择,因为这个组件是如此重要,不仅跟服务器的设计者本身,而且和不同的应用场景十分相关,所以一个Container 可以选择对应多个 Connector。多个 Connect or 和一个 Container 就形成了一个 Service,Service 的概念大家都很熟悉了,有了 Service 就可以对外提供服务了, 但是 Service 还要一个生存的环境,必须要有人能够给她生命、掌握其生死大权,那就非Server 莫属了。所以整个T omcat 的生命周期由 Server 控制。 1.1 1.1 以 Service 作为“ 婚姻” 我们将 Tomcat 中 Connector、Container 和其他一些组件作为一个整体比作一对情侣的话,Connector 主要负责对外交流,可以比作为 Boy,Container 主要处理 Connector 接受的请求,主要是处理内部事务,可以比作为Girl。那么这个 Service 就是连接这对男女的结婚证了。是Service 将他们连接在一起,共同组成一个家庭。 说白了,Service 只是在 Connector 和 Container 外面多包一层,把他们组装在一起,向外面提供服务,一个Ser vice 可以设置多个 Connector,但是只能有一个 Container 容器。这个 Service 接口的类图如下: 图 2. Service 类图 从 Service 接口中定义的方法中可以看出,它主要是为了关联Connector 和 Container,同时会初始化它下面的其他组件,注意接口中它并没有规定他一定要控制了它下面的组件的生命周期。所有组件的生命周期在一个Lifecyc le 的接口中控制,这里用到了一个重要的设计模式,关于这个接口将在后面介绍。 Tomcat 中 Service 接口的标准实现类是StandardService 它不仅实现了 Service 借口同时还实现了Lifecycle 以可以控制它下面的组件的生命周期。StandardService 类结构图如下: 图 3 StandardService 的类结构图 从上图中可以看出除了 Service 接口的方法的实现以及控制组件生命周期的Lifecycle 接口的实现,还有几个方法是用于在事件监听的方法的实现,不仅是这个Service 组件,Tomcat 中其他组件也同样有这几个方法,这也是一个典型的设计模式,将在后面介绍。 下面看一下 StandardService 中主要的几个方法实现的代码,下面是 setContainer(Container)和 addConnector(Con nector)方法的源码: public void setContainer(Container container) { Container oldContainer = this.container; if ((oldContainer != null) (oldContainer instanceof Engine)) ((Engine) oldContainer).setService(null); this.contain

文档评论(0)

1亿VIP精品文档

相关文档