Tomcat的系统架构与设计模式
《深入分析Java Web技术内幕》 笔记
11.1、Tomcat总体设计
11.1.1、Tomcat总体结构
Tomcat的总体结构
多个Connector和一个Container形成一个Service;
整个Tomcat的生命周期由Server控制
以Service作为“婚姻”
Connector主要负责对外交流,Container主要处理Connector接受的请求,主要处理内部事务,Service就相当于连接Connector和Container的结婚证
Service接口的方法列表
在接口中并没有规定一定要控制它下面的组件的生命周期,而是在Lifecycle的接口中控制
Service的接口的标准实现类是StandardService
不仅实现了Service接口,还实现了Lifecycle接口,还有用于实现事件监听方法
StandardService类结构图
以Server为“居”
提供一个接口让其他程序能够访问到这个Service集合,同时要维护它所包含的所有Service的生命周期,包括如何初始化、如何结束服务、如何找到别人要访问的Service
Server的类结构图
组件的生命线“Lifecycle”
Lifecycle接口的类结构图
11.1.2、Connector组件
主要负责接收浏览器发过来的TCP连接请求,创建一个Request和Response对象分别用于和请求端交换数据,然后会产生一个线程来处理这个请求并把产生的Request和Response对象传给处理这个请求的线程Container
Connector处理一次请求的顺序图
多线程的处理是Connector设计的核心
Connector的主要类图
11.1.3、Servlet容器Container
Container容器是典型的责任链的设计模式,由4个子容器组成,分别是Engine、Host、Context和Wrapper,这四个组件不是平行的,而是父子关系
容器的总体设计
四个容器的关系图
Container处理请求的过程
Engine和Host处理请求的时序图
Context和Wrapper的处理请求时序图
Engine容器
定义了一些基本的关联关系
Engine接口的类结构
Engine的标准实现类是StandardEngine
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都通过一个链传递请求