Tomcat实战完整配置+详解

Tomcat作为最常用的Java容器,其容器机制参见“Tomcat之容器概览”。笔者在此奉上Tomcat8下完整的实战配置文件(含详解),供大家参考。tomcat默认安装有提供docs项目,更多参数及文中参考链接"/docs/…"就是指tomcat本身提供的docs项目。

<?xml version="1.0" encoding="UTF-8"?>
<!-- Server-是整个配置文件的根元素,代表Tomcat运行的实例 -->
<Server port="18181" shutdown="SHUTDOWN">
  <!-- 以日志形式输出服务器 、操作系统、JVM的版本信息 -->
  <Listener className="org.apache.catalina.startup.VersionLoggerListener" />
  <!-- Tomcat启动时执行许多安全检查,如果失败,则阻止Tomcat启动;通常不启用
  <Listener className="org.apache.catalina.security.SecurityListener" />
  -->
  <!-- 加载(服务器启动) 和 销毁 (服务器停止) APR。 如果找不到APR库, 则会输出日志, 并不影响 Tomcat启动 -->
  <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
  <!-- 防止使用了特殊的java/javax APIs导致的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" />

  <!-- 全局命名服务 见:/docs/jndi-resources-howto.html  -->
  <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元素表示一个或多个连接器组件的组合,这些组件共享用于处理传入请求的单个引擎组件。一个或多个Service元素可以嵌套在Server元素中 
       更多信息见:/docs/config/service.html
   -->
  <Service name="Catalina">
    <!-- Executor表示可以在Service中的组件之间共享的线程池。
    每个Connector都创建了一个线程池,当配置为支持执行器时,可以让连接器和其他组件之间共享线程池
    默认情况下,Service 并未添加共享线程池配置。
    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接口
    -->
    <Executor name="tomcatThreadPool" 
        namePrefix="catalina-exec-"
        maxThreads="1000"
        minSpareThreads="50"
        prestartminSpareThreads="true" />

    <!-- Connector的作用是负责监听端口接收客户端的发过来的连接请求,创建Request和Response对象用于和客户端交换数据,接着产生一个线程来处理这个请求,
         并把Request和 Response对象传给Container组件处理。一个service可以有多个Connector,同时监听多个端口
         port: Socket监听端口号
         protocol: 当前Connector 支持的访问协议。 默认为 HTTP/1.1,并采用自动切换机制选择JAVA NIO的链接器或者基于本地APR的链接器(根据本地是否含有Tomcat的本地库判定) 。
             可以明确指定协议而不是依赖于自动切换机制,可以使用以下值:
             org.apache.coyote.http11.Http11NioProtocol         -非阻塞Java NIO连接器
             org.apache.coyote.http11.Http11Nio2Protocol        -非阻塞Java NIO2连接器
             org.apache.coyote.Http11AprProtocol                -APR/native连接器。
         connectionTimeOut: 接收链接后的等待超时时间, 单位为毫秒。 -1表示不超时,默认为60000。 
         redirectPort: 如果Connector支持non-SSL请求,并且接收到匹配的<安全约束>要求SSL传输的请求,Catalina将自动将请求重定向到此处指定的端口号。
         executor: 对Executor元素中名称的引用。如果设置了此属性,并且命名的执行器存在,则连接器将使用该执行器,而所有其他线程属性都将被忽略。
                   注意,如果没有为连接器指定共享执行器,那么连接器将使用私有的内部执行器来提供线程池。
         maxHttpHeaderSize:请求和响应HTTP标头的最大大小(以字节为单位)。默认为8192(8 KB)。如果出现“ Error parsing HTTP request header”错误,增加该参数
         acceptCount:最大链接数,默认为100
         disableUploadTimeOut:禁止在数据上传期间使用不同的、通常更长的连接超时。默认true。
         connectionUploadTimeout:数据上传超时时间,单位为毫秒。disableUploadTimeOut=false有效
	 relaxedPathChars:HTTP/1.1规范要求在URI路径中使用时对某些字符进行%nn编码。不幸的是,包括所有主要浏览器在内的许多用户代理都不符合此规范,并以未编码的形式使用这些字符。
                           为了防止Tomcat拒绝此类请求,可以使用此属性指定要允许的其他字符。如果未指定,则不允许使用其他字符。
                           该值可以是以下字符的任意组合:“<>[\]^`{|}。该值中存在的任何其他字符都将被忽略。
	 relaxedQueryChars:同relaxedPathChars,此处针对Query参数。
         更多信息见:/docs/config/http.html
    -->
    <Connector port="18180" 
               protocol="HTTP/1.1"
               executor="tomcatThreadPool"
               connectionTimeout="60000"
               redirectPort="18182" 
               maxHttpHeaderSize="40960"
               acceptCount="1000" 
               disableUploadTimeOut="false"
               connectionUploadTimeout="600000"
               relaxedPathChars="[]|{}`^&quot;&lt;&gt;&#92;"
               relaxedQueryChars="[]|{}`^&quot;&lt;&gt;&#92;" />

    <!-- AJP表示通过AJP协议与web容器通信的连接器组件。如果将Tomcat集成到Apache安装中,并且希望Apache处理web应用程序中包含的静态内容或利用Apache的SSL处理的情况下启用。 -->
    <!-- 
    <Connector port="18183" protocol="AJP/1.3" redirectPort="18182" />
    -->

    <!-- Tomcat是一个基于组件的服务器,Connector和Container作为两个独立的组件,由Service进行连接。事实上,Service只是对Connector和Container进行了包装,
         将它们组装在一起对外提供服务,一个Service可以设置多个Connector,但是只能有一个Container容器。
         Container分为层次如下:
             Engine代表完整的Servlet引擎,元素一个service的整个请求处理机制,接收并处理来自一个或多个连接器的所有请求,并将完成的响应返回到连接器,以便最终传输回客户端。
                   一个Engine由多个Host组成。defaultHost默认主机名,未指定主机名的请求将发向该Host处理;此名称必须与直接嵌套在其中的一个Host元素的名称属性匹配。。
                 Host代表一个虚拟主机,可以运行多个应用,它负责安装和展开这些应用,其子容器为Context
                     Context代表一个Web Application,其子容器为Wrapper
                         Wrapper代表一个Servlet,是最底部的容器。它负责管理一个Servlet,包含Servlet的装载、初始化、执行和卸载等。
    -->
    <Engine name="Catalina" defaultHost="localhost">

      <!--tomcat集群实现提供会话复制、上下文属性复制和集群范围的WAR文件部署。虽然群集配置相当复杂,但默认配置将适用于大多数情况。
          更多信息见:/docs/cluster-howto.html  (simple how to)   /docs/config/cluster.html (reference documentation) 
      -->
      <!--
      <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
      -->

      <!-- Realm表示分配用户名、密码和角色(类似于Unix组)的“数据库”。Realm的不同实现允许Catalina集成到已经创建和维护此类身份验证信息的环境中,
           然后利用这些信息实现Servlet规范中描述的容器管理安全。
      -->
      <Realm className="org.apache.catalina.realm.LockOutRealm">
        <Realm className="org.apache.catalina.realm.UserDatabaseRealm"
               resourceName="UserDatabase"/>
      </Realm>

      <!-- Host代表一个虚拟主机,可以运行多个应用。Host主要相关参数:
          name:主机名
          appBase:web应用程序的部署目录,是与$CATALINA_BASE目录相关的路径名或绝对路径名。
          autoDeploy: Tomcat在运行时是否应定期检查新的或更新的web应用程序
          unpackWARs:true-web应用程序解压缩到相应的磁盘目录结构中运行;false-直接从WAR文件运行应用
      -->
      <Host name="localhost"  appBase="webapps"
            unpackWARs="true" autoDeploy="true">
            
        <!-- Context代表一个Web Application。Context代表一个Web主要相关参数:
          path:web应用程序的上下文路径,它与每个请求URI的开头相匹配,以选择要处理的适当web应用程序。Host内的所有Context路径必须是唯一的。
                ""表示默认web应用程序,该应用程序将处理未分配给明确上下文的所有请求。
          docBase:web应用程序根目录或web归档文件中的根目录。可以是绝对路径名或者相对于Host的appBase目录的路径名。
          reloadable:如果希望Catalina监视/WEB-INF/classes/和/WEB-IINF/lib中的类的更改,并在检测到更改时自动重新加载WEB应用程序,则设置为true
        -->
        <Context path="" docBase="seller" reloadable="true"/>

        <!-- 访问日志文件配置。这些日志稍后可以通过标准日志分析工具进行分析,以跟踪页面点击次数、用户会话活动等。该Valve使用自包含的逻辑来编写日志文件,
             日志文件可以在每天午夜自动滚动。(访问日志记录的基本要求是以低开销处理大量连续数据流。此Valve不使用Apache Commons日志记录,因此避免了额外的开销和潜在的复杂配置).
             directory:日志文件所在目录
             prefix:日志文件名前缀
             suffix:日志文件名后缀
             pattern:日志格式
        -->
        <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs"
               prefix="localhost_access_log" suffix=".txt"
               pattern="%h %l %u %t &quot;%r&quot; %s %b" />
      </Host>
    </Engine>
  </Service>
</Server>

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

乐享技术

每一个打赏,都是对我最大的鼓励

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值