Catalina容器
Tomcat是由一个由一系列可配置的组件构成的Web容器,而Catalina是Tomca的servlet容器。
Catalina是Servlet容器实现,包含了容器组件,以及安全、会话、集群、管理等Servlet容器架构的各个方面。它通过松耦合的方式继承Coyote,以完成按照请求协议进行数据读写。同时,它还包括我们的启动入口、Shell程序等。
Catalina地位
Tomcat的模块分层结构图:
Tomcat本质上就是一款Servlet容器,因此Catalina才是Tomcat的核心,其它模块都是为Catalina提供支持的。比如:通过Coyote模块提供链接通信,Jasper模块提供JSP引擎,Naming提供JDNI服务,Juli提供日志服务。
Catalina结构
Catalina的主要组件结构如下:
Catalina负责管理Server,而Server表示着整个服务器。Server下面有多个Service,每个服务都包含着多个连接器组件Connector(Coyote实现)和一个容器组件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种容器不是平行关系,而是父子关系。Tocmat通过一种分层架构,使得Servlet容器具有很好的灵活性。
容器 | 描述 |
---|---|
Engine | 表示整个Catalina的Servlet引擎,用来管理多个虚拟站点,一个Service最多只能有一个Engine,但是一个引擎包含多个Host |
Host | 代表一个虚拟主机,或者说一个站点,可以给Tomcat配置多个虚拟主机地址,而一个虚拟主机下可包含多个Context |
Context | 表示一个Web应用程序,一个Web应用可以包含多个Wrapper |
Wrapper | 表示一个Servlet,Wrapper作为容器中的最底层,不能包含子容器 |
也可以通过Tomcat的server.xml配置文件来加深对Tomcat容器的理解。Tomcat采用了组件化的设计,它的构成都是可配置的,其中最外层的是Server,其它组件按照一定的格式要求配置在这个顶层容器中:
Tomca使用组合模式来管理这些容器。具体的实现方法是,所有的容器组件都实现了Container接口,因此组合模式可以使得用户对单容器对象和组合容器对象的使用具有一致性。这里单容器对象指的是最底层的Wrapper,组合容器对象指的是Context、Host或者Engine。
Container接口中提供了以下方法(部分):
Container接口扩展了LifeCycle接口,LifeCycle接口用来同一管理各组件的生命周期。