一、整体架构
1. Server:表示整个tomcat 容器(服务器)
2. Service:将一个或多个 connector 和一个engine(顶层Container) 绑定,Server 子容器。
3. Connector:负责与客户端的通信,常用的有 Http Connector 负责与客户端的 http 通信。
4. Container:是一个接口,Engine > Host > Context > Wrapper 都是具体的容器。
二、容器
Engine > Host > Context > Wrapper
1. Engine: service 处理请求的管道,从connector 接收请求,处理后,将响应再发给对应的 connector 。conector 再返回给客户端。代表整个servlet 引擎;
2. Host:代表引擎中的虚拟主机(可以有多个),Engine的子容器。
3. Context:Servlet Context,通常代表一个web应用,父容器是 Host,一个 Host 可以有多个context,每个context 用一个单独的路径区分。
4. Wrapper: 管理 Servlet 生命周期, 方便在调用servlet 时做相关的拦截过滤操作,不允许有子容器。所有的容器都有 pipeLine
三、核心接口
1. Lifecycle 接口
Connector Container(Engine>Host(war包web.xml)>Context<(server.xml)>Wrapper)
Service(StandardService)
2. Server 接口
3. Connector 接口
protocalHandler (Http11NioProtocol)
Endpoint (NioEndpoint)
4. Container 接口
5. Pipeline 接口
所有的 Container 都有一个 Pipeline 属性, pipeline 定义了container 调用 invoke 方法时要执行的一个集合序列,并且序列中的最后一个需要做出 response。
三、初始化、启动流程
弄清了整体架构和核心接口后,初始化和启动流程也是按照类/接口的组合关系进行的。
四、请求处理流程
一个典型的http 请求的处理流程如下:
我们 debug 一个springboot 项目也能够看到: