Tomcat 与 Java Web开发技术详解(第三版)第二章 笔记

第二章 Tomcat简介

2.1 Tomcat概述

Tomcat是完全由Java语言编写的Servlet容器。
Tomcat除了能够充当运行Servlet的容器,还提供了作为Web服务器的一些实用共能,如Tomcat管理和控制平台、安全域管理和Tomcat阀等。

2.2 Tomcat作为Servlet容器的基本功能

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

  • 提供了可被服务器动态加载并执行的程序代码,为来自客户的请求提供相应服务。
  • Servlet完全用Java编写,因此要求运行Servlet的服务器必须支持Java语言。
  • Servlet完全在服务端运行,因此它并不依赖于浏览器。不管浏览器是否依赖于java语言,都能请求访问服务端的Servlet。

Tomcat作为Servlet的容器,其基本功能是负责接收和解析来自客户的请求,把客户的请求传送给响应的Servlet,并把Serlvet的响应结果返回给客户。
在这里插入图片描述
Servlet容器响应客户请求访问特定Servlet的基本流程:

  • 客户发出要求访问的Servlet的请求。
  • Servlet容器接收到请求,对其解析。
  • Servlet容器创建一个ServletRequest对象,在ServletRequest对象中包含了客户端你请求信息以及其他关于客户的信息,如请求头、请求正文以及客户机的IP地址。
  • Servlet容器创建一个ServletResponse对象。
  • Servlet容器调用客户所请求的Servlet的service() 服务方法,并把ServletRequset对象和ServletResponse对象作为参数传给该服务。
  • Servlet从ServletRequest对象中获取客户的请求信息。
  • Servlet利用ServletResponse对象生成响应结果。
  • Servlet容器把Servlet生成的响应结果发送给客户。
    在这里插入图片描述

2.3 Tomcat的组成结构

Tomcat本身由一系列的可配置组件构成,其中核心组件是Servlet容器组件,它是所有其他Tomcat组件的顶层容器。用<CATALINA_HOME>来表示Tomcat安装的根目录。
Tomcat的容器组件可以在<CATALINA_HOME>/conf/server.xml文件中配置,每个Tomcat组件在Server.xml文件中对应一种配置元素。

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

Tomcat的元素可以分为四类:

  • 顶层类元素:<Server>和<Service>,它们位于配置文件的顶层。
  • 连接器类元素:<Connector>代表介于客户与服务器之间的通信接口,负责将客户的请求信息发送给服务器,并将服务器的响应结果发送给客户。
  • 容器类元素:代表处理客户请求并生成响应结果的组件。<Engine>、<Host>、<Context>和<Cluster>。Engine组件为特定的Service组件处理所有客户请求。Host组件为特定的虚拟主机处理所有的客户请求,Context组件为特定的Web应用处理所有的客户请求。Cluster组件负责为Tomcat集群系统进行会话复制、Context组件的属性复制以及集群范围内WAR文件的发布。
  • 嵌套类元素:代表可以嵌入到容器中的组件,如<Vlaue>和<Realm>元素等。

提示:
Tomcat的组成结构是由自身的实现决定的,它与Servlet的规范无关。不同的服务器开发商可以用不同的方式来实现服务Servlet规范的Servlet容器。

  • <Server> 元素:代表整个Servlet容器组件,它是Tomcat的顶层元素,可以包含一个或多个<Service>元素。
  • <Service>元素:包含一个<Engine>元素以及一个或多个<Connector>元素,这些<Connector>元素共享一个<Engine>元素。
  • <Connector>元素代表和客户程序实际交互的组件,负责接收客户请求以及行客户返回响应结果。
  • <Engine>元素:每个<Service>元素只能包含一个<Engine>元素。<Engine>处理在同一个<Service>中所有<Connector>元素接收到的客户请求。
  • <Host>元素:一个<Engine>可以包含多个<Host>元素。每个<Host>元素定义了一个虚拟主机,他可以包含一个或多个Web应用。
  • <Context>元素:是使用最频繁的元素,每个<Context>元素代表了运行在虚拟主机上的一个Web应用。一个<Host>元素可以包含多个<Context>元素。
    在这里插入图片描述

上图可以表名,Connector组件负责接收客户的请求并向客户返回一个响应结果,同一个Service中多个Connector共用一个Engine,同一个Engine组件可以有多个Host组件,同一个Host组件可以有多个Context组件。

<Server port="8005" shutdown="SHUTDOWN">
  <Service name="Catalina">
    <Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               redirectPort="8443" />
    <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
    
	<Engine name="Catalina" defaultHost="localhost">
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />

      </Host>
    </Engine>
  </Service>
</Server>

2.4 Tomcat的工作模式

Tomcat作为Servlet容器有一下三种工作模式:
(1)独立的Servlet容器
Tomcat作为独立的Web服务器来单独运行,Servlet容器组件作为Web服务器的一部分而存在。这是Tomcat的默认工作模式
在这种模式下,Tomcat是一个独立运行Java程序。和运行其他Java程序一样,需要启动一个Java虚拟机进程来运行Tomcat。
在这里插入图片描述
(2)其他Web进程内的Servlet容器
在这种模式下,Tomcat分为Web服务器插件和Servlet容器组件两部分。Web服务器插件在其他Web服务器进程的内部地址空间启动一个Java虚拟机,Servlet容器组件在此Java虚拟机中运行。如有客户端发出调用Servlet的请求,Web服务器插件获得此请求的控制并将它转发(JNI通信机制)给Servlet容器组件。
注:JNI(Java Nativ Interface),Java本地调用接口,Java程序可以采用其他语言编写的本地程序进行通信。
在这里插入图片描述
(3)其他Web服务器进程外的Servlet容器
在这种模式下,Tomcat分为Web服务器插件和Servlet容器组件两部分。Web服务器插件在其他Web服务器外部地址空间启动一个Java虚拟机进程,Servlet组件在此虚拟机中运行。采用IPC通信(进程间通信)。
在这里插入图片描述
进程外的Servlet容器对客户请求的响应速度不入进程内Servlet容器,但进程外容器有更好的伸缩性和稳定性。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值