优质博文:IT_BLOG_CN
一、Tomcat 顶层架构
Tomcat
中最顶层的容器是Server
,代表着整个服务器,从上图中可以看出,一个Server
可以包含至少一个Service
,用于具体提供服务。Service
主要包含两个部分:Connector
和Container
。从上图中可以看出Tomcat
的心脏就是这两个组件,他们的作用如下:
【1】Connector
用于处理连接相关的事情,并提供Socket
与Request
和 Response
相关的转化;
【2】Container
用于封装和管理Servlet
,以及具体处理Request
请求;
一个Tomcat
中只有一个Server
,一个Server
可以包含多个Service
,一个 Service
只有一个Container
,但是可以有多个Connectors
,这是因为一个服务可以有多个连接,如同时提供Http
和Https
链接,也可以提供向相同协议不同端口的连接,示意图如下(Engine
、Host
、Context
下边会说到):
多个Connector
和一个Container
就形成了一个Service
,有了Service
就可以对外提供服务了,但是Service
还要一个生存的环境,必须要有人能够给她生命、掌握其生死大权,那就非Server
莫属了!所以整个Tomcat
的生命周期由 Server
控制。另外,上述的包含关系或者说是父子关系,都可以在tomcat
的 conf
目录下的 server.xml
配置文件中看出。
二、简要解释下 server.xml 配置文件的信息
server.xml
是Tomcat
中最重要的配置文件,server.xml
的每个元素都对应了 Tomcat
中的一个组件;通过对xml
文件中元素的配置,可以实现对Tomcat
中各个组件的控制。
<?xml version="1.0" encoding="UTF-8"?>
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
<Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener"/>
<Listener className="org.apache.catalina.core.JasperListener"/>
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener"/>
<GlobalNamingResources>
<Resource auth="Container"
description="User database that can be updated and saved"
factory="org.apache.catalina.users.MemoryUserDatabaseFactory"
name="UserDatabase" pathname="conf/tomcat-users.xml"
type="org.apache.catalina.UserDatabase"/>
</GlobalNamingResources>
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1"
connectionTimeOut="20000"
redirectPort="8443"/>
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443"/>
<Engine defaultHost="localhost" name="Catalina">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className