Tomcat依赖server.xml文件来启动server,一个Tomcat实例,核心就是启动容器Catalina。
Tomcat部署Webapp时,依赖context.xml和web.xml来部署Web应用。实际上,在部署任何一个webapp时,Tomcat自带的context.xml以及web.xml都会生效,同时webapp自带的META-INF/context.xml和WEB-INF/web.xml也会定义每个webapp的特定行为。
所有host下Context的默认配置信息;默认配置如下:
<Context>
<WatchedResource>WEB-INF/web.xmlWatchedResource>
Context>
Realm认证时用到的相关角色、用户和密码等信息;Tomcat自带的manager默认情况下会用到此文件;在Tomcat中添加/删除用户,为用户指定角色等将通过编辑此文件实现;
conf/server.xml 是 Servlet/JSP 容器 Tomcat 的主要配置文件,使用 XML 的方式描述了 WebApp 的运行方式。
在 server.xml 中的元素(element)和属性(properties)是区分大小写的,并且支持 Apache Ant 方式的变量替换(Apache Ant-style variable substitution)。在配置文件中还支持以 propname的方式读取系统变量propname。支持系统环境变量(包括−D语法)、JVM变量和配置在 CATALINA_BASE/conf/catalina.properties file 文件中的变量。
server.xml 元素包含四大类:
- 顶层类元素 - 是根元素, 表示一组与一个 有关的连接器。
- 连接器类元素 - ,客户端和容器类元素的通讯接口。
- 容器类元素 - 、 和 ,处理客户请求并且生成响应结果。
- 嵌套类元素 - 、 和 ,可以加入到容器中的元素。
文件结构:
<Server>
<Listener />
<GlobaNamingResources>GlobaNamingResources
<Service>
<Executor />
<Connector />
<Engine>
<Cluster />
<Realm />
<Realm />
<Host>
<Valve />
<Context />
Host>
Engine>
Service>
Server>
是 Tomcat 实例的顶层元素,由 org.apache.catalina.Server 接口定义,它可以包含一个或多个
元素,并且不能做为任何元素的子元素。一个
是一个提供完整JVM的独立组件,它可以代表整个容器,但它本身不是一个容器,不可以定义
或
之类的子组件。
属性说明:
属性 | 说明 |
---|---|
port | 指定一个端口,这个端口负责监听关闭 Tomcat 的请求 |
shutdown | 向以上端口发送的关闭服务器的命令字符串,通常为 SHUTDOWN |
address | omcat监听shutdown命令的地址,默认为localhost |
className | 指定实现org.apache.catalina.Server接口的类,默认值为org.apache.catalina.core.StandardServer |
对于一个已经开启的 Tomcat 服务器,可以在 cmd 下使用 telnet localhost 8005 命令进行连接,然后输入 SHUTDOWN 命令就可以关闭服务器。
Listener即监听器,负责监听特定的事件,当特定事件触发时,Listener会捕捉到该事件,并做出相应处理。Listener通常用在Tomcat的启动和关闭过程。Listener可嵌在Server、Engine、Host、Context内。
常用属性:
属性 | 说明 |
---|---|
className | 指定实现org.apache.catalina.LifecycleListener接口的类 |
GlobalNamingResources用于配置JNDI。
Service包装Executor、n个Connector、1个Engine,Connector获取request,Engine处理request。Server可以包含多个Service组件
属性说明:
属性 | 说明 |
---|---|
name | 的名称 |
className | 指定实现org.apache.catalina.Service接口的类,默认值为org.apache.catalina.core.StandardService |
Executor即Service提供的线程池,供Service内各组件使用,特别是Connector组件。
是直接与用户交互的组件,负责接受用户请求和向客户返回响应结果。
属性说明:
属性 | 说明 |
---|---|
port | 所监听的端口。在浏览器中可以通过输入 url:port 的方式提交给对应的 。因为浏览器的默认端口是 80,所以如果把 的 port 设成 80 的话,可以直接使用 url 进行访问,不用在后边再跟一个端口号。 |
protocol | 设定 Http 协议,默认是 HTTP/1.1。 |
minThreads | 服务器启动时创建的处理用户请求的线程数。 |
maxThreads | 可以创建的最大的处理用户请求的线程数。 |
minSpareThreads | 最小备用线程数。 |
maxSpareThreads | 最大备用线程数。 |
acceptCount | 当所有可以使用的处理请求的线程都被用光时,可以放到处理队列中的请求数,超过这个数的请求将不予处理,而返回 Connection refused 错误。 |
redirectPort | 服务器正在处理 http 请求时收到了一个 SSL 传输请求后重定向的端口号。(即当请求是 https 时,将它转发到的端口)。 |
enableLookups | 如果为 true,表示支持域名解析,则可以在 web 应用中通过调用 request.getRemoteHost() 进行 DNS 查询来得到远程客户端的实际主机名;若为 false 则不进行 DNS 查询,而是返回其 ip 地址。默认值为 true。 |
connectionTimeout | 等待超时的时间数(以毫秒为单位),如果为 -1 表示不限制客户连接的时间。 |
HTTP与AJP:
它处理在同一个 中所有 元素接收到的客户请求。它匹配请求和自己的虚拟主机,并将请求发给对应的 处理,默认的主机是 localhost。
属性说明:
属性 | 说明 |
---|---|
name | engine的名称,对应目录 /conf/Catalina。 |
defaultHost | 默认的处理请求的虚拟主机,至少与下面一个Host的name属性一样。对应 /conf/Catalina/localhost。 |
Debug | 日志等级 |
一个 元素可以包含多个 元素,每个 元素定义一个虚拟主机,它包含一个或多个web应用。
属性说明:
属性 | 说明 |
---|---|
name | 虚拟主机名,对应目录 /conf/Catalina/localhost。 |
appBase | 指定虚拟主机的目录,默认为 /webapps。它将请求 url 与该虚拟主机的 进行匹配,并把请求转给对应的 来处理。 |
Debug | 日志等级。 |
autoDeploy | 默认为 true,表示如果有新的 Web 应用放入 appBase 并且 Tomcat 在运行的情况下,自动载入应用。 |
unpackWARs | 如果设置为 true,表示把war文件先展开再运行。如果为 false则直接运行 war 文件。 |
代表运行在虚拟主机上的单个 web 应用。一个 Host> 可以包含多个 元素。每个 web 应用有唯一个相对应的 代表 web 应用自身。
属性说明:
属性 | 说明 |
---|---|
path | Web应用名,在使用 url 访问 下的web应用时,通过 http://localhst/website 的形式。其中 localhost 为上文所说的 的 name,而 website 就是这里的 path。也就是说当一具请求到来时, 先根据 host |
docBase | Web应用的具体存放路径 |
Debug | 日志等级。 |
autoDeploy | 默认为 true,表示如果有新的 web 应用放入 appBase 并且 Tomcat 在运行的情况下,自动载入应用。 |
unpackWARs | 如果设置为 true,表示把 war 文件先展开再运行。如果为 false 则直接运行 war 文件。 |
reloadable | 是否自动检测并重新部署Web项目( 设置为 true ,Tomcat会自动监控Web项目的/WEB-INF/classes/和/WEB-INF/lib变化,当检测到变化时,会重新部署Web项目;reloadable默认值为 false :通常项目开发过程中设为true,项目发布的则设为false) |
Tomcat集群配置。
Realm可以理解为包含用户、密码、角色的”数据库”。Tomcat定义了多种Realm实现:
Valve可以理解为Tomcat的拦截器,而我们常用filter为项目内的拦截器。Valve可以用于Tomcat的日志、权限等。Valve可嵌在Engine、Host、Context内。
Server port="8005" shutdown="SHUTDOWN">
<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="80" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine name="Catalina" defaultHost="test.com">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm"
resourceName="UserDatabase"/>
Realm>
<Host name="test.com" appBase="/web" unpackWARs="true" autoDeploy="true">
<Alias>www.test.comAlias>
<Context path="" docBase="www/" reloadable="true" />
<Context path="/bbs" docBase="/web/bbs" reloadable="true" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/www/logs"
prefix="www_access." suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
Host>
<Host name="manager.test.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Valve className="org.apache.catalina.valves.RemoteAddrValve" allow="172.23.136.*" />
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="/web/bbs/logs"
prefix="bbs_access." suffix=".log"
pattern="%h %l %u %t "%r" %s %b" />
Host>
Engine>
Service>
Server>
<tomcat-users>
<role rolename="manager-gui" />
<user username="cz" password="manager$!!110" roles="manager-gui" />
tomcat-users>
Reference