Tomcat 隶属于 Apache 基金会,是开源的轻量级 Web 应用服务器,使用非常广泛。server.xml 是 Tomcat 中最重要的配置文件,server.xml 的每一个元素都对应了 Tomcat 中的一个组件。
整体结构
1 2 3 4 5 6 7 8 9 10 11
| <Server> <Service> <Connector /> <Connector /> <Engine> <Host> <Context /> </Host> </Engine> </Service> </Server>
|
元素分类
顶层元素
<Server> 是整个配置文件的根元素
<Service> 代表一个 Engine 元素以及一组与之相连的 Connector 元素
连接器 <Connector>
<Connector> 代表了外部客户端发送请求到特定 Service 的接口;同时也是外部客户端从特定 Service 接收响应的接口。
1 2 3 4 5
| <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
|
容器
容器的功能是处理 Connector 接收进来的请求,并产生相应的响应。Engine、Host 和 Context 都是容器,是父子关系:Engine → Host → Context。
<Engine> 处理 Service 中的所有请求
<Host> 处理发向一个特定虚拟主机的所有请求
<Context> 处理一个特定 Web 应用的所有请求
核心组件
Server
1
| <Server port="8005" shutdown="SHUTDOWN">
|
- port:接收远程关闭命令的端口
- shutdown:关闭 Tomcat 的命令字符串
Service
1
| <Service name="Catalina">
|
一个 Service 可以包含多个 Connector 和一个 Engine。
Connector
1 2 3 4 5 6 7 8 9 10 11 12
| <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" maxThreads="200" minSpareThreads="10" acceptCount="100" enableLookups="false" compression="on" compressionMinSize="2048" noCompressionUserAgents="gozilla,traviata" compressableMimeType="text/html,text/xml,text/javascript,application/javascript" />
|
Engine
1
| <Engine name="Catalina" defaultHost="localhost">
|
Host
1 2
| <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
|
- name:虚拟主机名
- appBase:应用基础目录
- unpackWARs:是否解压 WAR 包
- autoDeploy:是否自动部署
Context
1
| <Context path="/myapp" docBase="myapp" reloadable="true" />
|
- path:URL 路径
- docBase:应用文档路径
- reloadable:修改后是否自动重新加载
其他组件
Listener
1 2 3
| <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <Listener className="org.apache.catalina.core.JasperListener" />
|
GlobalNamingResources 与 Realm
1 2 3 4 5 6 7 8 9
| <GlobalNamingResources> <Resource name="UserDatabase" auth="Container" type="org.apache.catalina.UserDatabase" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" pathname="conf/tomcat-users.xml" /> </GlobalNamingResources>
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
|
Valve
1 2 3
| <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log." suffix=".txt" pattern="%h %l %u %t "%r" %s %b" />
|
Cluster(集群配置)
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22
| <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"> <Manager className="org.apache.catalina.ha.session.DeltaManager" expireSessionsOnShutdown="false" /> <Channel className="org.apache.catalina.tribes.group.GroupChannel"> <Membership className="org.apache.catalina.tribes.membership.McastService" address="228.0.0.4" port="45564" frequency="500" dropTime="3000"/> <Receiver className="org.apache.catalina.tribes.transport.nio.NioReceiver" address="auto" port="4000" autoBind="100" selectorTimeout="5000" maxThreads="6" /> <Sender className="org.apache.catalina.tribes.transport.ReplicationTransmitter"> <Transport className="org.apache.catalina.tribes.transport.nio.PooledParallelSender" /> </Sender> <Interceptor className="org.apache.catalina.tribes.group.interceptors.TcpFailureDetector" /> <Interceptor className="org.apache.catalina.tribes.group.interceptors.KeepingInterceptor" /> </Channel> <Valve className="org.apache.catalina.ha.tcp.RequestDumperValve"/> <Valve className="org.apache.catalina.ha.session.JvmRouteBinderValve"/> <Deployer className="org.apache.catalina.ha.deploy.FarmWarDeployer" tempDir="/tmp/war-temp/" deployDir="/tmp/war-deploy/" watchDir="/tmp/war-watch/" watchEnabled="false" /> <ClusterListener className="org.apache.catalina.ha.session.ClusterSessionListener" /> </Cluster>
|