Tomcat设计思路解析

作者 : 开心源码 本文共3114个字,预计阅读时间需要8分钟 发布时间: 2022-05-11 共98人阅读

前言

Tomcat隶属于Apache基金会,是开源的轻量级Web应使用服务器,用非常广泛。server.xml是Tomcat中最重要的配置文件,server.xml的每一个元素都对应了Tomcat中的一个组件;通过对xml文件中元素的配置,能实现对Tomcat中各个组件的控制。因而,学习server.xml文件的配置,对于理解和用Tomcat至关重要。

本文将通过实例,详情server.xml中各个组件的配置,并详细说明Tomcat各个核心组件的作使用以及各个组件之间的相互关系。

说明:因为server.xml文件中元素与Tomcat中组件的对应关系,后文中为了形容方便,“元素”和“组件”的用不严格区分。

一、一个server.xml配置实例

server.xml位于$TOMCAT_HOME/conf目录下;下面是一个server.xml实例。后文中将结合该实例讲解server.xml中,各个元素的含义和作使用;在阅读后续章节过程中,能对照该xml文档便于了解。

1

2

3

4

5

6

7

8

9

10 <Resource name="UserDatabase" auth="Container"

11 type=”org.apache.catalina.UserDatabase”

12 description=”User database that can be updated and saved”

13 factory=”org.apache.catalina.users.MemoryUserDatabaseFactory”

14 pathname=”conf/tomcat-users.xml” />

15

16

17

18 <Connector port="8080" protocol="HTTP/1.1"

19 connectionTimeout=”20000″

20 redirectPort=”8443″ />

21

22

23

24 <Realm className="org.apache.catalina.realm.UserDatabaseRealm"

25 resourceName=”UserDatabase”/>

26

27

28 <Host name="localhost" appBase="webapps"

29 unpackWARs=”true” autoDeploy=”true”>

30 <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"

31 prefix=”localhost_access_log.” suffix=”.txt”

32 pattern=”%h %l %u %t “%r” %s %b” />

33

34

35

36

二、server.xml文档的元素分类和整体结构

1、整体结构

server.xml的整体结构如下:

1

2

3

4

5

6

7

8

9

10

11

该结构中只给出了Tomcat的核心组件,除了核心组件外,Tomcat还有少量其余组件,下面详情一下组件的分类。

2、元素分类

server.xml文件中的元素能分为以下4类:

(1)顶层元素:和

元素是整个配置文件的根元素,元素则代表一个Engine元素以及一组与之相连的Connector元素。

(2)连接器:

代表了外部用户端发送请求到特定Service的接口;同时也是外部用户端从特定Service接收响应的接口。

(3)容器:

容器的功可以是解决Connector接收进来的请求,并产生相应的响应。Engine、Host和Context都是容器,但它们不是平行的关系,而是父子关系:Engine包含Host,Host包含Context。一个Engine组件能解决Service中的所有请求,一个Host组件能解决发向一个特定虚拟主机的所有请求,一个Context组件能解决一个特定Web应使用的所有请求。

(4)内嵌组件:能内嵌到容器中的组件。实际上,Server、Service、Connector、Engine、Host和Context是最重要的最核心的Tomcat组件,其余组件都能归为内嵌组件。

下面将详细详情Tomcat中各个核心组件的作使用,以及相互之间的关系。

三、核心组件

本部分将分别详情各个核心组件的作使用、特点以及配置方式等。

1、Server

Server元素在最顶层,代表整个Tomcat容器,因而它必需是server.xml中唯逐个个最外层的元素。一个Server元素中能有一个或者多个Service元素。

在第一部分的例子中,在最外层有一个元素,shutdown属性表示关闭Server的指令;port属性表示Server接收shutdown指令的端口号,设为-1能禁掉该端口。

Server的主要任务,就是提供一个接口让用户端可以够访问到这个Service集合,同时维护它所包含的所有的Service的公告周期,包括如何初始化、如何结束服务、如何找到用户端要访问的Service。

2、Service

Service的作使用,是在Connector和Engine外面包了一层,把它们组装在一起,对外提供服务。一个Service能包含多个Connector,但是只可以包含一个Engine;其中Connector的作使用是从用户端接收请求,Engine的作使用是解决接收进来的请求。

在第一部分的例子中,Server中包含一个名称为“Catalina”的Service。实际上,Tomcat能提供多个Service,不同的Service监听不同的端口,后文会有详情。

3、Connector

Connector的主要功可以,是接收连接请求,创立Request和Response对象使用于和请求端交换数据;而后分配线程让Engine来解决这个请求,并把产生的Request和Response对象传给Engine。

通过配置Connector,能控制请求Service的协议及端口号。在第一部分的例子中,Service包含两个Connector:

1

2

(1)通过配置第1个Connector,用户端能通过8080端口号用http协议访问Tomcat。其中,protocol属性规定了请求的协议,port规定了请求的端口号,redirectPort表示当强制要求https而请求是http时,重定向至端口号为8443的Connector,connectionTimeout表示连接的超时时间。

在这个例子中,Tomcat监听HTTP请求,用的是8080端口,而不是正式的80端口;实际上,在正式的生产环境中,Tomcat也常常监听8080端口,而不是80端口。这是由于在生产环境中,很少将Tomcat直接对外开放接收请求,而是在Tomcat和用户端之间加一层代理商服务器(如nginx),使用于请求的转发、负载均衡、解决静态文件等;通过代理商服务器访问Tomcat时,是在局域网中,因而一般仍用8080端口。

(2)通过配置第2个Connector,用户端能通过8009端口号用AJP协议访问Tomcat。AJP协议负责和其余的HTTP服务器(如Apache)建立连接;在把Tomcat与其余HTTP服务器集成时,就需要使用到这个连接器。之所以用Tomcat和其余服务器集成,是由于Tomcat能使用作Servlet/JSP容器,但是对静态资源的解决速度较慢,不如Apache和IIS等HTTP服务器;因而常常将Tomcat与Apache等集成,前者作Servlet容器,后者解决静态资源,而AJP协议便负责Tomcat和Apache的连接。Tomcat与Apache等集成的原理如下图:

Tomcat设计思路解析

说明
1. 本站所有资源来源于用户上传和网络,如有侵权请邮件联系站长!
2. 分享目的仅供大家学习和交流,您必须在下载后24小时内删除!
3. 不得使用于非法商业用途,不得违反国家法律。否则后果自负!
4. 本站提供的源码、模板、插件等等其他资源,都不包含技术服务请大家谅解!
5. 如有链接无法下载、失效或广告,请联系管理员处理!
6. 本站资源售价只是摆设,本站源码仅提供给会员学习使用!
7. 如遇到加密压缩包,请使用360解压,如遇到无法解压的请联系管理员
开心源码网 » Tomcat设计思路解析

发表回复