这个题目命的其实是很大的,写的时候照旧很忐忑的,但我尽大概把这个进程描写清楚。因为这是读过源码今后写的总结,在写的进程中大概会忽略一些前提条件,假如有哪些较量突兀就呈现,或欠好领略的处所可以给我提 Issue,我会尽快增补修订相关内容。
许多对象在时序图中浮现的已经很是清楚了,没有须要再一步一步的作先容,所以本文以图为主,然后对部门内容加以简朴表明。
PlantUML
源文件:
本文对 Tomcat 的先容以 Tomcat-9.0.0.M22
为尺度。
Tomcat-9.0.0.M22
是 Tomcat 今朝最新的版本,但尚未宣布,它实现了 Servlet4.0
及 JSP2.3
并提供了许多新特性,需要 1.8 及以上的 JDK 支持等等,详情请查阅 Tomcat-9.0-doc
Overview
Bootstrap
作为 Tomcat 对外界的启动类,在 $CATALINA_BASE/bin
目次下,它通过反射建设 Catalina
的实例并对其举办初始化及启动。Catalina
理会 $CATALINA_BASE/conf/server.xml
文件并建设 StandardServer
、StandardService
、StandardEngine
、StandardHost
等StandardServer
代表的是整个 Servlet 容器,他包括一个或多个 StandardService
StandardService
包括一个或多个 Connector
,和一个 Engine
,Connector
和 Engine
都是在理会 conf/server.xml
文件时建设的,Engine
在 Tomcat 的尺度实现是 StandardEngine
MapperListener
实现了 LifecycleListener
和 ContainerListener
接口用于监听容器事件和生命周期事件。该监听器实例监听所有的容器,包罗 StandardEngine
、StandardHost
、StandardContext
、StandardWrapper
,当容器有变换时,注册容器到 Mapper
。Mapper
维护了 URL 到容器的映射干系。当请求到来时会按照 Mapper
中的映射信息抉择将请求映射到哪一个 Host
、Context
、Wrapper
。Http11NioProtocol
用于处理惩罚 HTTP/1.1 的请求NioEndpoint
是毗连的端点,在请求处理惩罚流程中该类是焦点类,会重点先容。CoyoteAdapter
用于将请求从 Connctor 交给 Container 处理惩罚。使 Connctor 和 Container 解耦。StandardEngine
代表的是 Servlet 引擎,用于处理惩罚 Connector
接管的 Request。包括一个或多个 Host
(虚拟主机), Host
的尺度实现是 StandardHost
。StandardHost
代表的是虚拟主机,用于陈设该虚拟主机上的应用措施。凡是包括多个 Context
(Context 在 Tomcat 中代表应用措施)。Context
在 Tomcat 中的尺度实现是 StandardContext
。StandardContext
代表一个独立的应用措施,凡是包括多个 Wrapper
,一个 Wrapper
容器封装了一个 Servlet,Wrapper
的尺度实现是 StandardWrapper
。StandardPipeline
组件代表一个流水线,与 Valve
(阀)团结,用于处理惩罚请求。 StandardPipeline
中含有多个 Valve
, 当需要处理惩罚请求时,会逐一挪用 Valve
的 invoke
要领对 Request 和 Response 举办处理惩罚。出格的,个中有一个非凡的 Valve
叫 basicValve
,每一个尺度容器都有一个指定的 BasicValve
,他们做的是最焦点的事情。
StandardEngine
的是 StandardEngineValve
,他用来将 Request 映射到指定的 Host
;StandardHost
的是 StandardHostValve
, 他用来将 Request 映射到指定的 Context
;StandardContext
的是 StandardContextValve
,它用来将 Request 映射到指定的 Wrapper
;StandardWrapper
的是 StandardWrapperValve
,他用来加载 Rquest 所指定的 Servlet,并挪用 Servlet 的 Service
要领。Tomcat init