tomcat之连接器

Catalina 中有两个主要的模块:连接器和容器

连接器:httpConnector:创建一个服务器套接字,获取到http请求,accept方法创建socket,创建HttpProcessor 实例,把socket接受的数据作为入参传给HttpProcessor.process

HttpProcessor 类的 process 方法接受前来的 HTTP 请求的套接字,会做下面的事情:

创建一个 HttpRequest 对象。

创建一个 HttpResponse 对象。

解析 HTTP 请求的第一行和头部,并放到 HttpRequest 对象。

解 析 HttpRequest 和 HttpResponse 对 象 到 一 个 ServletProcessor 或 者 StaticResourceProcessor,

ServletProcessor调用被请求的servlet的service

默认连接器:逻辑类似,连接器是通过调用接口 org.apache.catalina.Container 的 invoke 方法来传递 request 和 response 对象的,invoke实例化servlet,调用servlet的service方法

持久连接是 HTTP1.1 的默认连接方式,长连接通过块编码指定长度(),也可content-length(知道内容长度情况下)

HttpConnector 维护一个 HttpProcessor 的实例池,setContainer 是用来关联连接器和容器用的。HttpProcessor解析请求行和头部,并填充请求对象,接着调用Container容器的 invoke 方法的。

请求流程

1.http请求到tomcat。

2.tomcat的HttpConnector实例化创建一个serverSocket监听。HttpConnector实例化会关联Container 容器,同时HttpConnector 维护一个 HttpProcessor 的实例池。

3.接收到连接调用accept方法,创建socket。

4.创建的socket接受到请求,把请求套接字转换为request和reponse封装,从维护的HttpProcessor实例池获取HttpProcessor,解析request请求行和头部,并填充请求对象。

5.HttpProcessor调用Container容器的 invoke方法,实例化servlet,调用servlet的service方法

你可能感兴趣的:(tomcat之连接器)