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