一、概念
tomcat属于apach基金会,是一个开源的轻量级web应用服务器。
server.xml是tomcat的最重要的配置文件。
server.xml里每一个元素对应了tomcat的一个组件,通过对server.xml元素的配置,可以实现对tomcat组件的控制。
server.xml位于$TOMCAT_HOME/conf目录下。
二、server.xml的整体结构与核心组件
<Server> 根元素,代表整个tomcat容器,有一个或多个service元素,提供接口让客户端访问service,维护service
<Service> 包装Connector和Engine, 一个service包含多个Connector和一个Engine;一个Tomcat的不同端口部署多个webapp,就有多个service
<Executor name="aa" namePrefix="aa-exec-" maxThreads="400" minSpareThreads="10"/> // 最大线程数
<Connector /> 连接器,代表外部客户端与哪个service接口交互(接收请求),创建request和response对象,分配给Engine处理
<Engine> 容器,处理连接器接收进来的请求并返回结果;处理service中的所有请求
<Host> 处理一个特定虚拟主机的所有请求,运行多个web应用
<Context /><!-- 现在常常使用自动部署,不推荐配置Context元素,Context小节有详细说明 -->
处理一个特定web应用的所有请求,在特定虚拟主机上运行一个web应用
</Host>
</Engine>
</Service>
</Server>
三、例子
<Server port=
"8005"
shutdown=
"SHUTDOWN"
> //tomcat监听的关闭端口
<Listener className=
"org.apache.catalina.startup.VersionLoggerListener"
/>
<Listener className=
"org.apache.catalina.core.AprLifecycleListener"
SSLEngine=
"on"
/>
<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 name=
"UserDatabase"
auth=
"Container"
type=
"org.apache.catalina.UserDatabase"
description=
"User database that can be updated and saved"
factory=
"org.apache.catalina.users.MemoryUserDatabaseFactory"
pathname=
"conf/tomcat-users.xml"
/>
</GlobalNamingResources>
<Service name=
"Catalina"
>
<Connector port=
"8080"
protocol=
"HTTP/1.1" // 服务的端口和协议
connectionTimeout=
"20000"
redirectPort=
"8443"
/> // https重定向端口
<Connector port=
"8009"
protocol=
"AJP/1.3"
redirectPort=
"8443"
/> // 接收其他服务转发过来的端口
<Engine name=
"Catalina"
defaultHost=
"localhost"
> name用于日志
<Realm className=
"org.apache.catalina.realm.LockOutRealm"
>
<Realm className=
"org.apache.catalina.realm.UserDatabaseRealm"
resourceName=
"UserDatabase"
/>
</Realm>
<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 "%r" %s %b"
/> // 可以向access日志加参数
</Host>
</Engine>
</Service>
</Server>
四、自动部署
1. 配置Host元素
deployOnStartup属性为true时,在tomcat启动时自动部署
autoDeploy属性为true时,tomcat在运行时定期检查新的web应用,或老的web应用的更新
appBase属性指定web应用和war包所在的目录,通常是webapps
xmlBase属性指定web应用的配置文件所在目录
2. 检查web应用更新扫描顺序:xmlBase下的配置文件->appBase下的war包->appBase下的web应用
3. 自动部署举例:tomcat部署完成之后可以访问8080端口
五、如何确定请求由谁处理
a. 根据协议和端口号,选定service和Engine; 通过配置多个service和端口号,可以访问同一台机器上的不同应用
b. 根据域名或IP选定host
c. 根据URI选定Context
d. 例子:http://www.localhost:8080/app1/index.html
六、部署多个应用
1. 同一个Tomcat同一个端口下部署多个webapp
a. 在webapps文件夹下,放入多个war包
b. 修改server.xml文件,新增<Context>节点
2. 同一个Tomcat的不同端口下,部署多个应用
a. 在Tomcat路径下,与webapps统计目录下,新建一个文件夹webapps1
b. 修改server.xml文件,新增<Service>节点