Tomcat(二)容器概览

104 阅读3分钟

Tomcat(一)连接器概览提到Tomcat中除了HTTP服务器部分,还有Servlet容器部分。Catalina就是Tomcat的容器。

Catalina包含了容器组件以及安全、集群、会话、管理等方面。与Coyote松耦合,Cotoye负责协议解析,Catalina负责逻辑执行。

Tomcat模块分层

image.png

主要组件

Catalina

负责解析Tomcat配置文件,负责创建Server,对Server进行管理 image.png

Server

代表整个Tomcat服务器。负责启动Servlet引擎,Tomcat连接器。 通过实现Lifectcle接口,可以实现优雅的启动和停止。

Service

1个Server下会有多个Service。Service包含若干Connector和一个Container/Engine。

Connector

1个Service至少包含一个Connector和一个Container。Connector可以包含多个。连接器主要与客户端进行通信,接收客户端请求,把响应交给客户端。有容器来做具体处理。

Container

1个Service至少包含一个Connector和一个Container。容器负责servlet请求。

Container中设计了4种容器,Engine引擎、Host主机、Context上下文应用、Wrapper具体的Servlet。Tomcat通过组合模式管理这些容器。所有容器都实现了Container接口保证一致性。

image.png 以下这张图更能体现Container容器中的父子关系。通过server.xml也可以看到这个分层关系。 image.png

Engine

代表整个Catalina的Servlet引擎,用来管理多个虚拟站点。一个Service最多只能有一个Engine,可以包含多个Host。

Host

Host代表1个虚拟主机/1个站点,Tomcat可以配置多个虚拟主机地址。

Context

代表1个Web应用程序,可以理解为1个项目就是1个Context

Wrapper

代表1个Servlet。

生命周期

Lifecycle

所有组件都有初始化启动、停止等生命周期方法。因此将生命周期抽象成了一个接口Lifecycle,Server、Service、Executor、Container及其子组件(Engine、Host、Context、Wrapper)都实现了Lifecycle生命周期接口。

  • init
  • start
  • stop
  • destory

容器实现类

Server、Service、Engine、Host、Context都是接口,具体实现类对应如下:

  • StandardServer -> Server
  • StandardService -> Service
  • StandardEnfine -> Engine
  • StandardHost -> Host
  • StandardContext -> Context
  • NioEndpoint -> AbstractJsseEndpoint -> AbstractEndpoint
  • Nio2Endpoint -> AbstractJsseEndpoint -> AbstractEndpoint
  • AprEndpoint -> AbstraceEndpoint

补充

组合模式

以树形文件目录为例,文件夹可以再包含文件或文件夹,因此可以作为容器Container;文件不能再包含文件或文件夹,因此作为叶子Leaf。

组合模式(Composite Pattern)就是通过多个对象形成树形结构以表示“部分-整体”的结构层次。可以对叶子和容器对象使用具有一致性。

定义一个抽象类,使得叶子和容器都继承该类,通过UML图分析叶子和容器类。

image.png 3个角色:

  • Component 抽象构建 业务方法和管理成员方法
  • Leaf 叶子构建 业务方法
  • Composite 容器构建 业务方法和管理成员方法

模式具体实现可分为:

  • 透明组合模式

    管理成员在抽象类里也存在,客户端操作方便但叶子对象不够安全,需要在叶子的管理成员上做校验。

image.png

  • 安全组合模式

    管理成员方法只在容器实现

image.png