tomcat源码浅析(一)之 架构

版权声明:本文为博主原创文章,未经博主允许不得转载。 https://blog.csdn.net/a040600145/article/details/68921793

     tomcat代码看似很庞大,但从结构上看却很清晰和简单,它主要由一堆组件组成,如Server、Service、Connector等,并基于JMX管理这些组件,另外实现以上接口的组件也实现了代表生存期的接口Lifecycle,使其组件履行固定的生存期,在其整个生存期的过程中通过事件侦听LifecycleEvent实现扩展。

    1.类图

    1.1核心类图如下所示:

    1.2详细类图如下所示:


 2.各组件介绍

    Catalina:与开始/关闭shell脚本交互的主类,因此如果要研究启动和关闭的过程,就从这个类开始看起。

    Server:是 整个Tomcat组件的容器,包含一个或多个Service。

    Service:Service是包含Connector和Container的集合,Service用适当的Connector接收用户的请求,再发给相应的Container来处理。

    Connector:实现某一协议的连接器,如默认的有实现HTTP、HTTPS、AJP协议的。

    Container:可以理解为处理某类型请求的容器,处理的方式一般为把处理请求的处理器包装为Valve对象,并按一定顺序放入类型为Pipeline的管道里。Container有多种子类型:Engine、Host、Context和Wrapper,这几种子类型Container依次包含,处理不同粒度的请求。另外Container里包含一些基础服务,如Loader、Manager和Realm。

     Engine:Engine包含Host和Context,接到请求后仍给相应的Host在相应的Context里处理。

     Host:就是我们所理解的虚拟主机。

     Context:就是我们所部属的具体Web应用的上下文,每个请求都在是相应的上下文里处理的。

     Wrapper:Wrapper是针对每个Servlet的Container,每个Servlet都有相应的Wrapper来管理。

    可以看出Server、Service、Connector、Container、Engine、Host、Context和Wrapper这些核心组件的作用范围是逐层递减,并逐层包含。

    下面就是些被Container所用的基础组件:

    Loader:是被Container用来载入各种所需的Class。

    Manager:是被Container用来管理Session池。

    Realm:是用来处理安全里授权与认证。

3.事件侦听

    各个组件在其生命期中会有各种各样行为,而这些行为都有触发相应的事件,Tomcat就是通过侦听这些时间达到对这些行为进行扩展的目的。

4.基于JMX

   tomcat会为每个组件进行注册过程,通过Registry管理起来,而Registry是基于JMX来实现的。

5.各个组件会有一个backgroundProcess方法。在容器start时backgroundProcessorDelay>0会启动一个线程ContainerBackgroundProcessor来定时调用子类和Loader,Manager,Realm,Cluster的backgroundProcess来更新。频率为backgroundProcessorDelay * 1000ms。backgroundProcessorDelay默认是10。

6.初始化过程

   tomcat初始化的时序图如下:


猜你喜欢

转载自blog.csdn.net/a040600145/article/details/68921793