1 Tomcat 服务器配置
Tomcat
服务器的配置主要集中于
tomcat/conf
下的
catalina.policy、
catalina.properties、
context.xml
、
server.xml
、
tomcat-users.xml
、
web.xml
文件
1.1 server.xml
server.xml
是
tomcat
服务器的核心配置文件,包含了
Tomcat
的
Servlet
容器(Catalina
)的所有配置。由于配置的属性特别多,我们在这里主要讲解其中的一部分重要配置。
1.1.1 Server
Server
是
server.xml
的根元素,用于创建一个
Server
实例,默认使用的实现类是org.apache.catalina.core.StandardServer。
<Server port="8005" shutdown="SHUTDOWN">
...
</Server>
port : Tomcat
监听的关闭服务器的端口。
shutdown
: 关闭服务器的指令字符串。
Server
内嵌的子元素为
Listener
、
GlobalNamingResources
、
Service
。
默认配置的5个Listener 的含义:
<!‐‐ 用于以日志形式输出服务器 、操作系统、JVM的版本信息 ‐‐>
<Listener className="org.apache.catalina.startup.VersionLoggerListener"/>
<!‐‐ 用于加载(服务器启动) 和 销毁 (服务器停止) APR。 如果找不到APR库, 则会输出日志, 并不影响Tomcat启动 ‐‐>
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!‐‐ 用于避免JRE内存泄漏问题 ‐‐>
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<!‐‐ 用户加载(服务器启动) 和 销毁(服务器停止) 全局命名服务 ‐‐>
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener"/>
<!‐‐ 用于在Context停止时重建Executor 池中的线程, 以避免ThreadLocal 相关的内存泄漏 ‐‐>
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
GlobalNamingResources 中定义了全局命名服务:
<!‐‐ Global JNDI resources Documentation at /docs/jndi‐resources‐howto.html ‐‐>
<GlobalNamingResources>
<!‐‐ Editable user database that can also be used by UserDatabaseRealm to authenticate users ‐‐>
<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>
1.1.2 Service
该元素用于创建
Service
实例,默认使用
org.apache.catalina.core.StandardService
。 默认情况下,Tomcat
仅指定了
Service
的名称, 值为
"Catalina"
。
Service
可以内嵌的元素为 : Listener
、
Executor
、
Connector
、
Engine
,其中 :
Listener
用于为
Service添加生命周期监听器, Executor
用于配置
Service
共享线程池,
Connector
用于配置Service 包含的链接器,
Engine
用于配置
Service
中链接器对应的
Servlet
容器引擎。
<Service name="Catalina">
...
</Service>
一个
Server
服务器,可以包含多个
Service
服务。
1.1.3 Executor
默认情况下,
Service
并未添加共享线程池配置。 如果我们想添加一个线程池, 可以在
下添加如下配置:
<Executor name="tomcatThreadPool"
namePrefix="catalina‐exec‐"
maxThreads="200"
minSpareThreads="100"
maxIdleTime="60000"
maxQueueSize="Integer.MAX_VALUE"
prestartminSpareThreads="false"
threadPriority="5"
className="org.apache.catalina.core.StandardThreadExecutor"/>
属性说明:
属性 | 含义 |
name |
线程池名称,用于
Connector
中指定。
|
namePrefix
|
所创建的每个线程的名称前缀,一个单独的线程名称为
namePrefix+threadNumber
。
|
maxThreads
|
池中最大线程数。
|
minSpareThreads
|
活跃线程数,也就是核心池线程数,这些线程不会被销
毁,会一直存在。
|
maxIdleTime
|
线程空闲时间,超过该时间后,空闲线程会被销毁,默
认值为
6000
(
1
分钟),单位毫秒。
|
maxQueueSize
|
在被执行前最大线程排队数目,默认为
Int
的最大值,也
就是广义的无限。除非特殊情况,这个值不需要更改,
否则会有请求不会被处理的情况发生。
|
prestartminSpareThreads
|
启动线程池时是否启动
minSpareThreads
部分线程。 默认值为false
,即不启动。
|
threadPriority
|
线程池中线程优先级,默认值为
5
,值从
1
到
10
。
|
className
|
线程池实现类,未指定情况下,默认实现类为
org.apache.catalina.core.StandardThreadExecutor
。
如果想使用自定义线程池首先需要实现
org.apache.catalina.Executor
接口。
|
如果不配置共享线程池,那么
Catalina
各组件在用到线程池时会独立创建。
1.1.4 Connector
Connector 用于创建链接器实例。默认情况下,server.xml 配置了两个链接器,一个支持HTTP协议,一个支持AJP协议。因此大多数情况下,我们并不需要新增链接器配置,只是根据需要对已有链接器进行优化。
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
属性说明:
1
)
port
: 端口号,
Connector
用于创建服务端
Socket
并进行监听, 以等待客户端请求链接。如果该属性设置为0
,
Tomcat
将会随机选择一个可用的端口号给当前
Connector使用。
2
)
protocol
: 当前
Connector
支持的访问协议。 默认为
HTTP/1.1
, 并采用自动切换机制选择一个基于 JAVA NIO
的链接器或者基于本地
APR
的链接器(根据本地是否含有Tomcat的本地库判定)。
如果不希望采用上述自动切换的机制, 而是明确指定协议, 可以使用以下值。
Http
协议:
org.apache.coyote.http11.Http11NioProtocol , 非阻塞式 Java NIO 链接器org.apache.coyote.http11.Http11Nio2Protocol , 非阻塞式 JAVA NIO2 链接器org.apache.coyote.http11.Http11AprProtocol , APR 链接器
AJP
协议 :
org.apache.coyote.ajp.AjpNioProtocol , 非阻塞式 Java NIO 链接器org.apache.coyote.ajp.AjpNio2Protocol ,非阻塞式 JAVA NIO2 链接器org.apache.coyote.ajp.AjpAprProtocol , APR 链接器
3
)
connectionTimeOut : Connector
接收链接后的等待超时时间, 单位为 毫秒。
-1
表示不超时。
4
)
redirectPort
:当前
Connector
不支持
SSL
请求, 接收到了一个请求, 并且也符合security-constraint 约束, 需要
SSL
传输,
Catalina
自动将请求重定向到指定的端口。
5
)
executor
: 指定共享线程池的名称, 也可以通过
maxThreads
、
minSpareThreads等属性配置内部线程池。
6
)
URIEncoding :
用于指定编码
URI
的字符编码,
Tomcat8.x
版本默认的编码为
UTF-8 ,
Tomcat7.x
版本默认为
ISO-8859-1
。
完整的配置如下:
<Connector port="8080"
protocol="HTTP/1.1"
executor="tomcatThreadPool"
maxThreads="1000"
minSpareThreads="100"
acceptCount="1000"
maxConnections="1000"
connectionTimeout="20000"
compression="on"
compressionMinSize="2048"
disableUploadTimeout="true"
redirectPort="8443"
URIEncoding="UTF‐8" />
1.1.5 Engine
Engine
作为
Servlet
引擎的顶级元素,内部可以嵌入:
Cluster
、
Listener
、
Realm
、Valve和
Host
。
<Engine name="Catalina" defaultHost="localhost">
...
</Engine>
属性说明:
1
)
name
: 用于指定
Engine
的名称, 默认为
Catalina
。该名称会影响一部分
Tomcat
的存储路径(如临时文件)。
2
)
defaultHost
: 默认使用的虚拟主机名称, 当客户端请求指向的主机无效时, 将交由默认的虚拟主机处理, 默认为localhost
。
1.1.6 Host
Host
元素用于配置一个虚拟主机, 它支持以下嵌入元素:
Alias
、
Cluster
、
Listener
、Valve、
Realm
、
Context
。如果在
Engine
下配置
Realm
, 那么此配置将在当前
Engine
下的所有Host
中共享。 同样,如果在
Host
中配置
Realm
, 则在当前
Host
下的所有
Context中共享。Context
中的
Realm
优先级
> Host
的
Realm
优先级
> Engine
中的
Realm
优先
级。
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true">
...
</Host>
属性说明:
1
)
name:
当前
Host
通用的网络名称, 必须与
DNS
服务器上的注册信息一致。
Engine
中包含的Host
必须存在一个名称与
Engine
的
defaultHost
设置一致。
2
)
appBase
: 当前
Host
的应用基础目录, 当前
Host
上部署的
Web
应用均在该目录下(可以是绝对目录,相对路径)。默认为webapps
。
3
)
unpackWARs
: 设置为
true
,
Host
在启动时会将
appBase
目录下
war
包解压为目录。设置为false
,
Host
将直接从
war
文件启动。
4
)
autoDeploy
: 控制
tomcat
是否在运行时定期检测并自动部署新增或变更的
web
应用。
通过给
Host
添加别名,我们可以实现同一个
Host
拥有多个网络名称,配置如下:
<Host name="www.web1.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Alias>www.web2.com</Alias>
</Host>
这个时候,我们就可以通过两个域名访问当前
Host
下的应用(需要确保
DNS
或
hosts
中添加了域名的映射配置)。
1.1.7 Context
Context 用于配置一个Web应用,默认的配置如下:
<Context docBase="myApp" path="/myApp">
....
</Context>
属性描述:
1
)
docBase
:
Web
应用目录或者
War
包的部署路径。可以是绝对路径,也可以是相对于Host appBase的相对路径。
2
)
path
:
Web
应用的
Context
路径。如果我们
Host
名为
localhost
, 则该
web
应用访问的根路径为:
http://localhost:8080/myApp
它支持的内嵌元素为:
CookieProcessor
,
Loader
,
Manager
,
Realm
,
Resources
,WatchedResource,
JarScanner
,
Valve
。
<Host name="www.tomcat.com" appBase="webapps" unpackWARs="true"
autoDeploy="true">
<Context docBase="D:\servlet_project03" path="/myApp"></Context>
<Valve className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log" suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
</Host>
1.2 tomcat-users.xml
该配置文件中,主要配置的是
Tomcat
的用户,角色等信息,用来控制
Tomcat
中
manager
,
host-manager
的访问权限。
2 Web 应用配置
web.xml
是
web
应用的描述文件, 它支持的元素及属性来自于
Servlet
规范定义 。 在Tomcat 中,
Web
应用的描述信息包括
tomcat/conf/web.xml
中默认配置 以及
Web应用 WEB-INF/web.xml
下的定制配置。

2.1 ServletContext 初始化参数
我们可以通过 添加
ServletContext
初始化参数,它配置了一个键值对,这样我们可以在应用程序中使用 javax.servlet.ServletContext.getInitParameter()
方法获取参数。
<context‐param>
<param‐name>contextConfigLocation</param‐name>
<param‐value>classpath:applicationContext‐*.xml</param‐value>
<description>Spring Config File Location</description>
</context‐param>
2.2 会话配置
用于配置
Web
应用会话,包括 超时时间、
Cookie
配置以及会话追踪模式。它将覆盖server.xml 和
context.xml
中的配置。
<session‐config>
<session‐timeout>30</session‐timeout>
<cookie‐config>
<name>JESSIONID</name>
<domain>www.itcast.cn</domain>
<path>/</path>
<comment>Session Cookie</comment>
<http‐only>true</http‐only>
<secure>false</secure>
<max‐age>3600</max‐age>
</cookie‐config>
<tracking‐mode>COOKIE</tracking‐mode>
</session‐config>
配置解析:
1
)
session‐timeout
: 会话超时时间,单位 分钟
2
)
cookie‐config
: 用于配置会话追踪
Cookie
name:Cookie
的名称
domain:
Cookie
的域名
path:
Cookie
的路径
comment:注释
http‐only:
cookie
只能通过
HTTP
方式进行访问,
JS
无法读取或修改,此项可以增加网站访问的安全性。
secure:此
cookie
只能通过
HTTPS
连接传递到服务器,而
HTTP
连接则不会传递该 信息。注意是从浏览器传递到服务器,服务器端的Cookie对象不受此项影响。
max‐age:以秒为单位表示
cookie
的生存期,默认为
‐1
表示是会话
Cookie
,浏览器关闭时就会消失。
3
)
tracking‐mode
:用于配置会话追踪模式,
Servlet3.0
版本中支持的追踪模式:
COOKIE
、
URL
、
SSL
A. COOKIE : 通过
HTTP Cookie
追踪会话是最常用的会话追踪机制, 而且
Servlet
规范也要求所有的
Servlet
规范都需要支持
Cookie
追踪。
B. URL : URL重写是最基本的会话追踪机制。当客户端不支持
Cookie
时,可以采
用
URL
重写的方式。当采用
URL
追踪模式时,请求路径需要包含会话标识信息,
Servlet
容器
会根据路径中的会话标识设置请求的会话信息。如:
http
:
//www.myserver.com/user/index.html;jessionid=1234567890
。
C. SSL : 对于
SSL
请求, 通过
SSL
会话标识确定请求会话标识。
2.3 Servlet配置
Servlet 的配置主要是两部分, servlet 和 servlet-mapping :
<servlet>
<servlet‐name>myServlet</servlet‐name>
<servlet‐class>cn.bonnie.web.MyServlet</servlet‐class>
<init‐param>
<param‐name>fileName</param‐name>
<param‐value>init.conf</param‐value>
</init‐param>
<load‐on‐startup>1</load‐on‐startup>
<enabled>true</enabled>
</servlet>
<servlet‐mapping>
<servlet‐name>myServlet</servlet‐name>
<url‐pattern>*.do</url‐pattern>
<url‐pattern>/myservet/*</url‐pattern>
</servlet‐mapping>
配置说明:
1
)
servlet‐name :
指定
servlet
的名称, 该属性在
web.xml
中唯一。
2
)
servlet‐class :
用于指定
servlet
类名
3
)
init‐param
: 用于指定
servlet
的初始化参数, 在应用中可以通过HttpServlet.getInitParameter 获取。
4
)
load‐on‐startup
: 用于控制在
Web
应用启动时,
Servlet
的加载顺序。 值小于
0
,web应用启动时,不加载该
servlet,
第一次访问时加载。
5
)
enabled
:
true
,
false
。 若为
false
,表示
Servlet
不处理任何请求。
6
)
url‐pattern
: 用于指定
URL
表达式,一个
servlet‐mapping
可以同时配置多个
url‐pattern。
Servlet
中文件上传配置:
<servlet>
<servlet‐name>uploadServlet</servlet‐name>
<servlet‐class>cn.itcast.web.UploadServlet</servlet‐class>
<multipart‐config>
<location>C://path</location>
<max‐file‐size>10485760</max‐file‐size>
<max‐request‐size>10485760</max‐request‐size>
<file‐size‐threshold>0</file‐size‐threshold>
</multipart‐config>
</servlet>
配置说明:
1
)
location
:存放生成的文件地址。
2
)
max‐file‐size
:允许上传的文件最大值。 默认值为
‐1
, 表示没有限制。
3
)
max‐request‐size
:针对该
multi/form‐data
请求的最大数量,默认值为
‐1
, 表示无限制。
4
)
file‐size‐threshold
:当数量量大于该值时, 内容会被写入文件。
2.4 Listener配置
Listener
用于监听
servlet
中的事件,例如
context
、
request
、
session
对象的创建、修改、删除,并触发响应事件。Listener
是观察者模式的实现,在
servlet
中主要用于对context、
request
、
session
对象的生命周期进行监控。在
servlet2.5
规范中共定义了
8
中Listener。在启动时,
ServletContextListener
的执行顺序与
web.xml
中的配置顺序一致, 停止时执行顺序相反。
<listener>
<listener‐class>org.springframework.web.context.ContextLoaderListener</listener‐
class>
</listener>
2.5 Filter配置
filter
用于配置
web
应用过滤器, 用来过滤资源请求及响应。 经常用于认证、日志、加密、数据转换等操作, 配置如下:
<filter>
<filter‐name>myFilter</filter‐name>
<filter‐class>cn.itcast.web.MyFilter</filter‐class>
<async‐supported>true</async‐supported>
<init‐param>
<param‐name>language</param‐name>
<param‐value>CN</param‐value>
</init‐param>
</filter>
<filter‐mapping>
<filter‐name>myFilter</filter‐name>
<url‐pattern>/*</url‐pattern>
</filter‐mapping>
配置说明:
1
)
filter‐name
: 用于指定过滤器名称,在
web.xml
中,过滤器名称必须唯一。
2
)
filter‐class
: 过滤器的全限定类名, 该类必须实现
Filter
接口。
3
)
async‐supported
: 该过滤器是否支持异步
4
)
init‐param
:用于配置
Filter
的初始化参数, 可以配置多个, 可以通过 FilterConfig.getInitParameter获取
5
)
url‐pattern
: 指定该过滤器需要拦截的
URL
。
2.6 欢迎页面配置
welcome-file-list 用于指定web应用的欢迎文件列表。
<welcome‐file‐list>
<welcome‐file>index.html</welcome‐file>
<welcome‐file>index.htm</welcome‐file>
<welcome‐file>index.jsp</welcome‐file>
</welcome‐file‐list>
尝试请求的顺序,从上到下
2.7 错误页面配置
error-page
用于配置
Web
应用访问异常时定向到的页面,支持
HTTP
响应码和异常类两种
形式。
<error‐page>
<error‐code>404</error‐code>
<location>/404.html</location>
</error‐page>
<error‐page>
<error‐code>500</error‐code>
<location>/500.html</location>
</error‐page>
<error‐page>
<exception‐type>java.lang.Exception</exception‐type>
<location>/error.jsp</location>
</error‐page>
3 Tomcat 管理配置
从早期的
Tomcat
版本开始,就提供了
Web
版的管理控制台,他们是两个独立的
Web
应
用,位于
webapps
目录下。
Tomcat
提供的管理应用有用于管理的
Host
的
host-manager
和用于管理
Web
应用的
manager
。
3.1 host-manager
Tomcat
启动之后,可以通过
http://localhost:8080/host-manager/html
访问该
Web
应用。 host-manager
默认添加了访问权限控制,当打开网址时,需要输入用户名和密码(conf/tomcat-users.xml
中配置) 。所以要想访问该页面,需要在
conf/tomcat users.xml 中配置,并分配对应的角色:
1
)
admin-gui
:用于控制页面访问权限
2
)
admin-script
:用于控制以简单文本的形式进行访问
配置如下:
<role rolename="admin‐gui"/>
<role rolename="admin‐script"/>
<user username="bonnie" password="bonnie" roles="admin‐script,admin‐gui"/>
登录:

界面:
3.2 manage
manager
的访问地址为
http://localhost:8080/manager
, 同样,
manager
也添加了页面访问控制,因此我们需要为登录用户分配角色为:
<role rolename="manager‐gui"/>
<role rolename="manager‐script"/>
<user username="bonnie" password="bonnie" roles="admin‐script,admin‐gui,manager‐gui,manager‐script"/>
界面:
Server Status