Tomcat请求过程
几个部件:
- Endpoint: tomcat接收socket链接的组件。
- Socket:请求的通道链接
- InputBuffer. InternalInputBuffer,AbstractInputBuffer:缓冲内存
- Request:请求对象
- MessageBytes: 请求对象的消息内容
- ByteChunk:
- Connection:Java层面的链接对象
- Servlet:处理请求的组件
- Response:请求处理后的返回
请求过程
- 请求的解析
- Endpoint接收socket链接。
- 从socket中获取数据并缓存到InputBuffer。BIO是InternalInputBuffer继承自AbstractInputBuffer
- 从InputBuffer中解析请求。将完整的请求协议和请求体封装到Request对象。
- Request中的messageByte进行标记。标记url,header,请求体等。
- 解析头,解析请求。
- 初始化请求头的一些参数:Connextion keepalive,Content-length等。包括请求体处理的InputFilter
- 将请求交给容器
- 请求的处理
- 容器将请求分发到具体的Servlet进行处理。
- Servlet处理请求利用Response进行响应。将返回的数据写入缓冲区,调用flush或者close时,把缓冲区的数据发送给socket.
- servlet处理完请求后,检查是否需要把响应数据发送给socket.
- 看请求体是否处理结束,是否还有剩余数据,如果有剩余数据,把这些数据处理掉。以便获取下个请求的数据。
- 回到第一步处理下一个请求。