架构图
核心功能
Tomcat是Apache开源的轻量级Java ServletServlet容器,其中一个Server(Tomcat实例)可以管理多个Service(服务),一个Service包含多个Connector和一个Engine,负责管理请求到应用的整个流程。
Tomcat要实现的两个核心功能:
- 处理Socket连接,负责网络字节流与Request、Response请求的封装与拆解
- 加载和管理Servlet,处理具体的Request请求
因此Tomcat设计了两个核心组件------连接器(Connector)和容器(Container),连接器负责接受、返回请求,容器负责内部处理。
组件
Server
Tomcat
实例,可以管理多个Service
(服务)
Service
一个Service
包含多个Connector
和一个Engine
,负责管理请求到应用的整个流程
Connector
在一个Service
中,多个Connector
负责不同协议的请求(Http
,Https
等)
Coyote
是Tomcat
连接器框架,封装了底层的网络通信(Socket请求及响应处理),为Catalina
容器提供了统一接口,使Catalina
容器 与具体的请求协议及IO操作 完全解耦。
Engine
Tomcat
核心处理模块,处理来自Connector
的请求,并传递到合适的Host
和Context
Host
表示一个虚拟主机,可以在同一个 Tomcat
实例中配置多个虚拟主机。
Context
表示一个 Web 应用程序,是最小的 Web 应用处理单元。
Wrapper
表示一个Servlet,Wrapper 作为容器中的最底层,不能包含子容器。
Tomcat请求流程
客户端请求
|
V
Coyote (连接器)
|-- 监听端口 (Endpoint)
|-- 解析协议 (ProtocolHandler)
|-- 转化为 Request 和 Response 对象
V
Catalina (Servlet 容器)
|-- 转换为 HttpServletRequest 和 HttpServletResponse
|-- 找到目标 Servlet (通过 Engine -> Host -> Context -> Wrapper)
|-- 调用 Servlet 的 service() 方法
V
返回响应
|-- 生成响应数据
|-- 通过 Coyote 的 Processor 写入输出流
V
客户端接收响应
http://localhost:8080/app1
| | | |
| | | └── Context(路径)
| | └── Port(端口)
| └── Host(主机)
└── Connector(协议)