1、工作模式

Tomcat不仅可以单独运行,还可以与其他的Web服务器集成,作为其他Web服务器的进程内或进程外的servlet容器。集成的意义在于:对于不支持运行Java Servlet的其他Web服务器,可通过集成Tomcat来提供运行Servlet的功能。

Tomcat有三种工作模式:

  • 第一种:Tomcat在一个Java虚拟机进程中独立运行,此时客户端直接和tomcat通信。Tomcat可看作是能运行Servlet的独立Web服务器。Servlet容器组件作为Web服务器中的一部分而存在。这是Tomcat的默认工作模式。

  • 第二种:Tomcat运行在其他Web服务器的进程中,Tomcat不直接和客户端通信,仅仅为其他Web服务器处理客户端访问Servlet的请求。进程内的Servlet容器对于单进程、多线程的Web服务器非常合适,可以提供较高的运行速度,但缺乏伸缩性。在这种模式下,Tomcat分为Web服务器插件和Servlet容器组件两部分。

如下图所示,Web服务器插件在其他Web服务器进程的内部地址空间启动一个Java虚拟机,Servlet容器组件在此Java虚拟机中运行。如有客户端发出调用Servlet的请求,Web服务器插件获得对此请求的控制并将它转发(使用JNI通信机制)给Servlet容器组件。

  • 第三种:Tomcat在一个Java虚拟机进程中独立运行,但是它不直接和客户端通信,仅仅为与它集成的其他Web服务器处理客户端访问Servlet的请求。

在这种模式下,Tomcat分为Web服务器插件和Servlet容器组件两部分。如下图所示,Web服务器插件在其他Web服务器的外部地址空间启动一个JVM进程,Servlet容器组件在此JVM中运行。如有客户端发出调用Servlet的请求,Web服务器插件获得对此请求的控制并将它转发(采用IPC通信机制)给Servlet容器。

进程外Servlet容器对客户请求的响应速度不如进程内Servlet容器,但进程外容器具有更好的伸缩性和稳定性。

IPC(Inter-Process Communication,进程间通信)是两个进程之间进行通信的一种机制

复制

2、整体架构

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

如上图所示,我们可以看到:

  • 一台机器上可以通过设置不同的CATALINA_BASE来运行多个tomcat实例,即可以运行多个server
  • 一个server中只有一个Engine,而Engine就是实现了servlet规范的引擎,这里就是Catalina
  • 一个engine中可以包含多个host,即和apache、nginx等服务器相同,可以配置多个virtual host站点
  • 一个host中可以包含多个context,即可以包含多个web应用
  • 一个warpper表示一个Servlet,wrapper 作为容器中的最底层,不能包含子容器

Tomcat使用组合模式来管理这些容器,所有容器组件都实现了Container接口,因此组合模式可以使得用户对单容器对象(最底层的Wrapper)和组合容器对象(Context、Host或者Engine)的使用具有一致性。

Tomcat 服务器的配置主要集中于 tomcat/conf 下的 catalina.policy、 catalina.properties、context.xml、server.xml、tomcat-users.xml、web.xml 文件。

Tomcat的这一设计思想在其配置文件server.xml中得到了很好的诠释,server.xml 是tomcat 服务器的核心配置文件,包含了Tomcat的 Servlet 容器 (Catalina)的所有配置。下面我们先来了解一下server.xml文件中的一些主要配置。

原创文章,转载请注明出处:http://b.nwumba.cn/article/118/