tomcat+spring mvc 原理(三):tomcat网络请求的监控与处理1
前言:
tomcat + spring mvc 原理(一):tomcat原理综述总结了tomcat的整体运作原理、静态容器架构和容器配置,tomcat + spring mvc 原理(二):tomcat容器的初始加载与启动详细介绍了tomcat动态容器初始化和启动过程。本文主要介绍tomcat网络请求的监控与处理逻辑。
利用tomcat + spring mvc架构体系构建服务器,很重要的一个部分就是网络请求的监控、接收、解包、封包、请求传递等功能的实现,这样在建服务器时就只需要关注业务参数的传入和处理,而不用关心网络协议等和业务无关的细节。 一般服务的问题都出现在请求和应答处理的过程,一旦是因为框架内部导致的问题,这时候充分了解tomcat+spring mvc的请求处理逻辑就很重要了。
请求处理的准备
网络请求相关的处理集中在Connector容器中。由原理一中介绍的总体容器架构可知,Connector是被包含在Service容器中,而且Connector容器的配置也是包含在Service的配置中:
<Service name="Catalina">
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<Connector port="8443" protocol="org.apache.coyote.http11.Http11NioProtocol"
maxThreads="150" SSLEnabled="true">
<SSLHostConfig>
<Certificate certificateKeystoreFile="conf/localhost-rsa.jks"
type="RSA" />
</SSLHostConfig>
</Connector>
<Connector port="8443" protocol="org.apache.coyote.http11.Http11AprProtocol"
maxThreads="150" SSLEnabled="true" >
<UpgradeProtocol className="org.apache.coyote.http2.Http2Protocol" />
<SSLHostConfig>
<Certificate certificateKeyFile="conf/localhost-rsa-key.pem"
certificateFile="conf/localhost-rsa-cert.pem"
certificateChainFile="conf/localhost-rsa-chain.pem"
type="RSA" />
</SSLHostConfig>
</Connector>
......
</Service>
以上是我从原理(一)介绍的tomcat的默认配置文件server.xml中捞出来的配置。可以看到,<Connector>标签是包含在标签中的<Service>中的,一个Service可以有多个Connector,可以配置线程池来处理请求。tomcat在启动过程中依据这个配置创建Service和Connector,