Tomcat 容器 catalina

  • Tomcat 的模块分层结构
  • Servlet容器 Catalina
  • Catalina 各个组件的职责
  • Container 结构
  • Container各个组件的含义
  • Tomcat的配置文件server.xml


at t 组织架构 catl组织架构_Tomcat模块分层结构

Tomcat 的模块分层结构

Tomcat 本质上就是一款 Servlet 容器, 因此Catalina 才是 Tomcat 的核心 , 其他模块都是为Catalina 提供支撑的。

  • 通过Coyote 模块提供链接通信
  • Jasper 模块提供JSP引擎
  • Naming 提供JNDI 服务
  • Juli 提供日志服务。

Servlet容器 Catalina

Catalina是一个非常复杂的、设计优雅的、模块化的Servlet容器内核。

Tomcat是一个由一系列可配置的组件(Coyote 连接器,Catalina 容器,Jasper jsp引擎,EL表达式等)构成的Web容器,而Catalina是Tomcat的servlet容器。

Catalina 是Servlet 容器实现,包含了Server,Service,Connector,Container等组件。

涉及到的安全、会话、集群、管理等Servlet 容器架构的各个方面。它通过松耦合的方式集成Coyote,以完成按照请求协议进行数据读写。同时,它还包括我们的启动入口、Shell程序等。

at t 组织架构 catl组织架构_at t 组织架构_02

Catalina负责管理Server,而Server表示着整个服务器。Server下面有多个服务Service,每个服务都包含着多个连接器组件ConnectorCoyote 实现)和一个容器组件Container。在Tomcat 启动的时候, 会初始化一个Catalina的实例。


Catalina 各个组件的职责

组件

职责

Catalina

负责解析Tomcat的配置文件 , 以此来创建服务器Server组件,并根据命令来对其进行管理

Server

服务器表示整个Catalina Servlet容器以及其它组件,负责组装并启动Servlet引擎,Tomcat连接器。Server通过实现Lifecycle接口,提供了一种优雅的启动和关闭整个系统的方式

Service

服务是Server内部的组件,一个Server包含多个Service。它将若干个Connector组件绑定到一个Container(Engine)上

Connector

连接器,处理与客户端的通信,它负责接收客户请求,然后转给相关的容器处理,最后向客户返回响应结果

Container

容器,负责处理用户的servlet请求,并返回对象给web用户的模块

Container 结构

Tomcat设计了4种容器,分别是Engine、Host、Context和Wrapper。这4种容器不是平行关系,而是父子关系。, Tomcat通过一种分层的架构,使得Servlet容器具有很好的灵活性。

at t 组织架构 catl组织架构_at t 组织架构_03


Container各个组件的含义

容器

描述

Engine

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

Host

代表一个虚拟主机,或者说一个站点,可以给Tomcat配置多个虚拟主机地址,而一个虚拟主机下可包含多个Context

Context

表示一个Web应用程序, 一个Web应用可包含多个Wrapper

Wrapper

表示一个Servlet,Wrapper 作为容器中的最底层,不能包含子容器

Tomcat的配置文件server.xml

Tomcat 采用了组件化的设计,它的构成组件都是可配置的,其中最外层的是Server,其他组件 按照一定的格式要求配置在这个顶层容器中。

<?xml version="1.0" encoding="UTF-8"?>

<Server port="8005" shutdown="SHUTDOWN">
	<Service name="Catalina">
		<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
		<Engine name="Catalina" defaultHost="localhost">
			<Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
				<Context></Context>
			</Host>
		</Engine>
	</Service>
</Server>

Tomcat是怎么管理这些容器的呢?你会发现这些容器具有父子关系,形成一个树形结构,你可能马上就想到了设计模式中的组合模式。没错,Tomcat就是用组合模式来管理这些容器的

具体实现方法是,所有容器组件都实现了Container接口,因此组合模 式可以使得用户对单容器对象和组合容器对象的使用具有一致性。这里单容器对象指的是最底层的Wrapper,组合容器对象指的是上面的Context、Host或者Engine。


**下图尤其重要,Tomcat中Engine,Context,Wrapper,Host接口有很多实现,默认执行标准实现逻辑,即下图中实现类 **

at t 组织架构 catl组织架构_Catalina组件的职责_04


Container接口扩展了LifeCycle接口,LifeCycle接口用来统一管理各组件的生命周期。LifeCycle接口管理生命周期的主要方法

at t 组织架构 catl组织架构_Tomcat_05


at t 组织架构 catl组织架构_Catalina组件的职责_06