一、Tomcat的整体架构
- 一个Tomcat只有一个server,server服务器有多个service。
- service 由多个connector 和一个container 组成。
- connector 是请求接收器,负责接收请求和把socket转化为request及response转化。
二、connector是如何处理请求的?
-
不同协议的请求有不同的ProtocolHandler处理,ProtocolHandler由endpoint,processor,Adapter 组成。
-
Endpoint 接收请求,处理底层的socket网络请求,交由Hander接口处理。
-
Handler 调用Processor将socket请求封装成request,.
-
最后由Adapter 适配对应的Servlet容器进行处理请求。
-
AsyncTimeout 处理异步超时的请求。
-
Container 负责具体的请求处理和返回请求结果。
三、Container 架构分析:
- 架构图:
- engine: engine 表示管理器,管理多个站点,一个service只有一个engine。
- Host: 站点,虚拟主机。可以配置多个。
- Context: 代表tomcat下运行的一套程序,比如 doc,Root.Root 默认是主应用程序。即访问时默认的访问。
- Wrapper: 封装Servlet。
- 那么container是如何通过这四个容器进行处理请求的呢?
- 责任链模式:Pipeline-Value 管道的责任链模式。
-
每个Pipeline都有一个基础的Value,而且是在管道的最后一个执行,这个Value叫做BaseValue,BaseValue是不可删除的;
在上层容器的管道的BaseValue中会调用下层容器的管道。
-
那么请求就是一层层的从上到下进行处理,每层只处理自己处理的事情。
-
处理完成后就可以返回response给Connector,由Connector返回给客户端。
参考:https://zhuanlan.zhihu.com/p/35398064