vlambda博客
学习文章列表

Tomcat的系统架构与设计模式

《深入分析Java Web技术内幕》 笔记


11.1、Tomcat总体设计

11.1.1、Tomcat总体结构

Tomcat的总体结构

多个Connector和一个Container形成一个Service;

整个Tomcat的生命周期由Server控制


  • 以Service作为“婚姻”

    Connector主要负责对外交流,Container主要处理Connector接受的请求,主要处理内部事务,Service就相当于连接Connector和Container的结婚证


Service接口的方法列表

Tomcat的系统架构与设计模式

在接口中并没有规定一定要控制它下面的组件的生命周期,而是在Lifecycle的接口中控制

Service的接口的标准实现类是StandardService

不仅实现了Service接口,还实现了Lifecycle接口,还有用于实现事件监听方法

StandardService类结构图

Tomcat的系统架构与设计模式


  • 以Server为“居”

    提供一个接口让其他程序能够访问到这个Service集合,同时要维护它所包含的所有Service的生命周期,包括如何初始化、如何结束服务、如何找到别人要访问的Service


Server的类结构图

Tomcat的系统架构与设计模式

  • 组件的生命线“Lifecycle”

Lifecycle接口的类结构图

Tomcat的系统架构与设计模式

11.1.2、Connector组件

主要负责接收浏览器发过来的TCP连接请求,创建一个Request和Response对象分别用于和请求端交换数据,然后会产生一个线程来处理这个请求并把产生的Request和Response对象传给处理这个请求的线程Container

Connector处理一次请求的顺序图

Tomcat的系统架构与设计模式

多线程的处理是Connector设计的核心

Connector的主要类图

Tomcat的系统架构与设计模式

11.1.3、Servlet容器Container

Container容器是典型的责任链的设计模式,由4个子容器组成,分别是Engine、Host、Context和Wrapper,这四个组件不是平行的,而是父子关系

  • 容器的总体设计

四个容器的关系图

Tomcat的系统架构与设计模式

Container处理请求的过程

Engine和Host处理请求的时序图

Tomcat的系统架构与设计模式

Context和Wrapper的处理请求时序图

Tomcat的系统架构与设计模式


  • Engine容器

    定义了一些基本的关联关系


Engine接口的类结构

Engine的标准实现类是StandardEngine

Tomcat的系统架构与设计模式


  • Host容器

    Host容器是Engine的子容器,一个Host在Engine中代表一个虚拟主机,这个虚拟主机作用就是运行多个应用,它负责安装和展开这些应用,并且标识这个应用以便能区分它们。它的子容器通道是Context,它除了关联子容器外,还保存一个主机应有的信息


与Host相关的类图


  • Context容器

    Context代表Servlet的Context,它具备了Servlet运行的基本环境。Contetx最重要的功能就是管理它里面的Servlet实例



  • Wrapper容器

    Wrapper代表一个Servlet,它负责管理一个Servlet,包括Servlet的装载、初始化、执行及紫云啊回收


ServletConfig与StandardWrapperFacade、StandardWrapper的关系

Servlet可以获得的信息都在StandardWrapperFacade里邓庄,这些信息又是在StandardWrapper对象中拿到,所以Servlet可以通过ServletConfig拿到有限的容器的信息

11.1.4、Tomcat中的其他组件

比如:安全组件security、日志组件logger、session、mbeans、naming等

11.2、Tomcat中的设计模式


  • 门面设计模式

    在Request和Response对象封装、从StandardWrapper到ServletConfig封装、从ApplicationContext到ServletContext封装



  • 观察者设计模式

    控制组件生命周期的Lifecycle,对Servlet实例的创建、Session的管理、Container



  • 命令设计模式

    Connector和Container组件之间有体现



  • 责任链设计模式

    Tomcat的容器设置就是责任链模式,从Engine到Host在到Context一直到Wrapper都通过一个链传递请求