Tomcat 服务器配置
目录
 
        Tomcat  
 服务器的配置主要集中于  
 tomcat/conf  
 下的  
 catalina.policy 
 、 catalina.properties、 
 context.xml 
 、 
 server.xml 
 、 
 tomcat-users.xml 
 、 
 web.xml  
 文件。 
 
 
一:server.xml
 
         server.xml  
 是 
 tomcat  
 服务器的核心配置文件,包含了 
 Tomcat 
 的  
 Servlet  
 容器 (Catalina 
 )的所有配置。由于配置的属性特别多,我们在这里主要讲解其中的一部分重要配置。 
 
 
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> 
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 
 服务。  
 
 
3 .Executo
 
             默认情况下, 
 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"/> 
  
  属性说明:  
 
 
  
 
 
 
如果不配置共享线程池,那么Catalina 各组件在用到线程池时会独立创建。
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" /> 
   
  5.Engine
 
             Engine  
   作为 
   Servlet  
   引擎的顶级元素,内部可以嵌入:  
   Cluster 
   、 
   Listener 
   、 
   Realm 
   、 Valve和 
   Host 
   。 
  
 
 <Engine name="Catalina" defaultHost="localhost">
...
</Engine> 
   
   属性说明:  
  
 
   
   1 
   )  
   name 
   : 用于指定 
   Engine  
   的名称, 默认为 
   Catalina  
   。该名称会影响一部分 
   Tomcat 
   的  
  
 
   
   存储路径(如临时文件)。  
  
 
   
   2 
   )  
   defaultHost  
   : 默认使用的虚拟主机名称, 当客户端请求指向的主机无效时, 将交  
  
 
   
   由默认的虚拟主机处理, 默认为 
   localhost 
   。 
  
 
 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 
  中添  
 
 
  
  加了域名的映射配置)。 
 
 
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> 
   
 二:tomcat-users.xml
 
              该配置文件中,主要配置的是 
   Tomcat 
   的用户,角色等信息,用来控制 
   Tomcat 
   中 manager,  
   host-manager 
   的访问权限。