Tomcat及其工作模式简介

Tomcat概述

  Tomcat是Oracle公司的JSWDK(javaServer Web DevelopmentKit,是Oracle公司推出的小型的Servlet/JSP调试工具)的基础上发展起来的一个优秀的Servlet容器,Tomcat本身完全用Java编写。Tomcat是Apache开源软件组织的一个软件项目,大家可以从Tomcat的官方网址(http://tomcat.apache.org)来获取关于Tomcat的最新消息。下图为Tomcat的官方主页。
在这里插入图片描述
  作为一个开放源代码的软件,Tomcat得到了广大开源代码志愿者的大力支持,它可以和目前大部分主流的Web服务区(如IIS和Apache服务器)一起工作。Tomcat运行可靠,并且效率高。
  Tomcat除了能够充当运行Servlet的容器,还提供了作为Web服务器的一些实用功能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。Tomcat已经成为目前开发企业Java Web应用的最佳Servlet容器选择之一。

Tomcat作为Servlet容器的基本功能

  Servlet,顾名思义,是一种运行再服务器上的小插件。Servlet最常见的用途是扩展Web服务器的功能,可作为非常安全、可移植的、易于使用的的CGI替代品。Servlet具有以下特点:

  1. 提供了可被服务器动态加载并执行的程序代码,为来自客户的请求提供相应服务。
  2. Servlet完全用Java语言编写,因此要求运行Servlet的服务器必须支持Java语言。
  3. Servlet完全在服务器运行,因此它的运行不依赖于浏览器。不管浏览器是否支持Java语言,都能请求访问服务器端的Servlet。
    下图展示了Tomcat作为运行Servlet的容器。其基本功能是负责接收和解析来自客户的请求,把客户的请求发送给响应的Servlet,并把Servlet的响应结果返回给客户。
客户 Servlet容器 Servlet对像 1.请求访问特定Servlet 1 2.调用Servlet 2 3.返回Servlet的响应结果 3 客户 Servlet容器 Servlet对像

  值得注意的是:Servlet规范规定的Servlet不仅可以运行在基于HTTP协议的Web服务器上,还可以运行在基于其他应用协议的服务器上。不过,目前Servlet主要运行在Web服务器上,用来扩展Web服务器的功能。
如下图所示,Servlet规定,Servlet容器响应客户请求访问特定Servlet的流程如下:

  1. 客户发出要求访问特定Servlet的请求。
  2. Servlet容器接收到客户请求,对其解析。
  3. Servlet容器创建一个ServletRequest对像,在ServletRequest对像中包含了客户请求信息以及其他关于客户的相关信息,如请求头、请求正文,以及客户机的IP地址等。
  4. Servlet容器创建一个ServletResponse对像。
  5. Servlet容器调用客户所请求的Servlet的service()服务方法,并且把ServletRequest对象和ServletResponse对像作为参数传给该服务方法。
  6. Servlet从ServletRequest对像中可获得客户的请求信息。
  7. Servlet利用ServletResponse对像来生成响应结果。
  8. Servlet容器把Servlet生成的响应结果发送给客户。
客户 Servlet容器 ServletRequest ServletResponse Servlet 请求访问Setvlet 1 解析客户请求 2 创建实例 3 创建实例 4 调用service()服务方法 5 获取客户请求信息 6 生成响应结果 7 返回响应结果 8 客户 Servlet容器 ServletRequest ServletResponse Servlet

Tomcat的组成结构

  Tomcat本身由一系列可配置的组件构成,其中核心组件是Servlet容器组件,它是所有其他Tomcat组件的顶层容器。为了叙述方便,在此用<CATALINA_HOME>表示Tomcat的安装目录。Tomcat的各个组件可以在<CATALINA_HOME>/conf/server.xml文件中进行配置,每个Tomcat组件在server.xml文件中对应一种配置元素。以下代码以XML的形式展示了各种Tomcat组件之间的关系:

<Server>
	<Service>
		<Connector />
		<Engine>
			<Host>
				<Context>
				</Context>
			</Host>
		</Engine>
	</Service>
</Server>

在以上XML代码中,每个元素都代表一种Tomcat组件。这些元素可分为四类:

  • 顶层类元素
    包括<Server>元素和<Service>元素,它们位于整个配置文件的顶层。
  • 连接器类元素
    为<Connector>,代表介于客户与服务器之间的通信接口,负责将客户的请求发送给服务器,并将服务器的响应结果发送给客户。
  • 容器类元素
    代表处理客户请求并生成响应结果的组件,有四种容器类元素,分别为<Engine>、<Host>、<Context>和<Cluster>元素。Engine组件为特定的Service组件处理所有的客户请求,Host组件为特定的虚拟主机处理所有客户请求,Context组件为特定的Web应用处理所有客户请求。Cluster组件负责为Tomcat集群系统进行会话复制、Context组件的属性的复制,以及集群范围内WAR文件的发布。
  • 嵌套类元素
    代表可以嵌入到容器中的组件,如<Value>元素和<Realm>元素等。
  • <Server>元素
    <Server>元素代表整个Servlet容器组件,它是Tomcat的顶层元素。<Server>元素中包含一个或多个<Service>元素。
  • <Service>元素
    <Service>元素中包含一个<Engine>元素,以及一个或多个<Connector>元素,这些<Connector>元素共享同一个<Engine>元素。
  • <Connector>元素
    <Connector>元素代表和客户实际交互的组件,它负责接收客户请求,以及向客户返回响应结果。
  • <Engine>元素
    每个<Servce>元素只能包含一个<Engine>元素,<Engine>元素处理在同一个<Service>中所有<Connector>元素接收到的客户请求。
  • <Host>元素
    一个<Engine>元素中可以包含多个<Host>元素。每个<Host>元素定义一个虚拟主机,它可以包含一个或多个Web应用。
  • <Context>元素
    <Context>元素是使用最频繁的元素。每个<Context>元素代表了运行在虚拟主机上的当个Web应用。一个<Host>元素可以包含多个<Context>元素。
    Tomcat各个组件之间的嵌套关系如下图所示:
    在这里插入图片描述
    上图表明,Connector组件负责接收客户的请求并向客户返回响应结果,在同一个Service组件中,多个Connector组件共享一个Engine组件。同一个Engine组件中可以包含多个Host组件,同一个Host组件可以包含多个Context组件。
    Tomcat安装好后,在它的server.xml配置文件中已经配置了<Server>、<Service>、<Connector>、<Engine>和<Host>等组件:
<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">
        </Host>
  	</Engine>
  </Service>
</Server>

  以上代码可看出,Tomcat自带一个名为“Catalina”的Engine组件,它的默认虚拟主机为localhost。

Tomcat的工作模式

Tomcat作为Servlet容器,有以下三种工作模式。

  1. 独立的Servlet容器
    Tomcat作为独立的Web服务器来单独运行,Servlet容器组件作为Web服务器中的一部分而存在。这是Tomcat的默认工作方式。
    这种模式下,Tomcat是一个独立运行的Java程序。和运行其他Java程序一样,运行Tomcat需要启动一个Java虚拟机(JVM,Java Virtual Machine)进程,由该进程来运行Tomcat,参见下图。
    在这里插入图片描述

  2. 其他Web服务器进程内的Servlet容器
    在这种模式下,Tomcat分为Web服务器插件和Sevlet容器组件两部分。如下图所示,Web服务器插件在其他Web服务器进程的内部地址空间启动一个Java虚拟机,Servlet容器组件在此Java虚拟机中运行。如有客户端发出调用Servlet的请求,Web服务器插件获得对此请求的控制并将它转发(使用JNI通信机制)给Servlet容器组件。
    在这里插入图片描述
    进程内的Servlet容器对于单个进程、多线程的Web服务器非常适合,可以提供较高的运行速度,但缺乏伸缩性。

  3. 其他Web服务器进程外的Servlet容器
    在这种模式下,Tomcat分为Web服务器插件和Servlet容器组件两部分。如下图所示,Web服务器插件在其他Web服务器的外部地址空间启动一个Java虚拟机进程,Servlet容器组件在此Java虚拟机中运行。如有客户端发出调用Servlet请求,Web服务器插件获得对此请求的控制并将它转发(采用IPC通信机制)给Servlet容器。
    在这里插入图片描述
    进程外Servlet容器对客户请求的响应速度不如进程内Servlet容器,但进程外容器具有更好的伸缩性和稳定性。

  从Tomcat的三种工作模式可以看出,当Tomcat作为独立的Servlet容器来运行时,此时Tomcat是能运行Java Servlet容器的独立服务器。此外,Tomcat还可以作为其他Web服务器进程内或者进程外的Servlet容器,从而与其他Web服务器集成(如Apache和IIS服务器等)。集成的意义在于:对于不支持运行Java Servlet的其他Web服务器,可通过集成Tomcat来提供运行Servlet的功能。

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值