<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>绿色记忆 &#187; Tomcat</title>
	<atom:link href="https://blog.gmem.cc/tag/tomcat/feed" rel="self" type="application/rss+xml" />
	<link>https://blog.gmem.cc</link>
	<description></description>
	<lastBuildDate>Mon, 13 Apr 2026 08:03:10 +0000</lastBuildDate>
	<language>en-US</language>
		<sy:updatePeriod>hourly</sy:updatePeriod>
		<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.9.14</generator>
	<item>
		<title>Tomcat知识集锦</title>
		<link>https://blog.gmem.cc/tomcat-faq</link>
		<comments>https://blog.gmem.cc/tomcat-faq#comments</comments>
		<pubDate>Fri, 17 Oct 2014 09:17:31 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[FAQ]]></category>
		<category><![CDATA[Tomcat]]></category>
		<category><![CDATA[性能调优]]></category>

		<guid isPermaLink="false">http://blog.gmem.cc/?p=1944</guid>
		<description><![CDATA[<p>常见问题 零散问题 One or more listeners failed to start 报错信息： Artifact pems-web-manager:war exploded: Error during artifact deployment. See server log for details. <a class="read-more" href="https://blog.gmem.cc/tomcat-faq">[...]</a></p>
<p>The post <a rel="nofollow" href="https://blog.gmem.cc/tomcat-faq">Tomcat知识集锦</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="wri_content_clear_both"><div class="blog_h1"><span class="graybg">常见问题</span></div>
<div class="blog_h2"><span class="graybg">零散问题</span></div>
<div class="blog_h3"><span class="graybg">One or more listeners failed to start</span></div>
<p>报错信息：</p>
<p>Artifact pems-web-manager:war exploded: Error during artifact deployment. See server log for details.</p>
<p>org.apache.catalina.core.StandardContext.startInternal One or more listeners failed to start. Full details will be found in the appropriate container log file</p>
<p>报错原因：某个Web应用的Servlet监听器配置出现问题（例如监听器类找不到），上面的出错信息不明确，检查web.xml即可。<br /> </p>
<div class="blog_h1"><span class="graybg">Tomcat7生产环境配置</span></div>
<div class="blog_h2"><span class="graybg">环境准备</span></div>
<div class="blog_h3"><span class="graybg">下载软件</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 80px; text-align: center;">软件</td>
<td style="text-align: center;">版本</td>
<td style="text-align: center;">说明</td>
</tr>
</thead>
<tbody>
<tr>
<td>Tomcat</td>
<td style="width: 80px;">7.0.56</td>
<td>
<p>如果是64位Windows，可以下载：64-bit Windows zip</p>
<p>下载地址：<a href="http://tomcat.apache.org/download-70.cgi#7.0.56">http://tomcat.apache.org/download-70.cgi#7.0.56</a></p>
</td>
</tr>
<tr>
<td>JRE</td>
<td>7u71</td>
<td>
<p>如果是64位Windows，可以下载：Windows x64的tar.gz版本</p>
<p>下载地址：<a href="http://www.oracle.com/technetwork/cn/java/javase/downloads/jre7-downloads-1880261.html">http://www.oracle.com/technetwork/cn/java/javase/downloads/jre7-downloads-1880261.html</a></p>
</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">安装软件</span></div>
<ol>
<li>解压Tomcat到某个位置，例如：D:\JavaEE\production\Tomcat7，确认Tomcat7\bin目录存在</li>
<li>解压JRE到%TOMCAT_HOME%\jre，确认%TOMCAT_HOME%\jre\bin目录存在</li>
</ol>
<div class="blog_h2"><span class="graybg">Tomcat配置</span></div>
<div class="blog_h3"><span class="graybg">使用%TOMCAT_HOME%\jre作为Java运行环境</span></div>
<ol>
<li>在%TOMCAT_HOME%下建立文件startup.bat，内容类似下面：<br />
<pre class="crayon-plain-tag">@echo off
echo *******************************************************************************
echo Portable Tomcat 7 by Alex Wang
echo.
pushd "%~dp0"
for /f "tokens=1-3 delims=/ " %%a in ('date /t') do (set md=%%a-%%b-%%c)
for /f "tokens=1-3 delims=/:." %%a in ("%TIME%") do (set mt=%%a%%b%%c)
set CUR_TIME=%md%-%mt%

set "JAVA_HOME="
set "CATALINA_HOME=%CD%"
set "JRE_HOME=%CATALINA_HOME%\jre"
set "LOG_DIR=%CATALINA_HOME%\logs"
rem 请根据服务器硬件配置、系统的特性填写下面一行
rem 响应时间优先配置示例：-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:ParallelGCThreads=8 -XX:MaxGCPauseMillis=500
rem 吞吐量优先的配置示例：-XX:+UseParallelGC -XX:+UseParallelOldGC -XX:ParallelGCThreads=8 -Xmn1280M
set JAVA_OPTS=-server -Xms2G -Xmx2G -Xss128K -XX:MaxPermSize=256M
rem 启用错误记录
set JAVA_OPTS=%JAVA_OPTS% -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=%LOG_DIR%\ -XX:ErrorFile=%LOG_DIR%\hs_err_pid%%p.log
rem 启用JMX远程管理和黑匣子
set JAVA_OPTS=%JAVA_OPTS% -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=7777 -Dcom.sun.management.jmxremote -XX:+UnlockCommercialFeatures -XX:+FlightRecorder
rem 启用黑匣子默认记录行为
set JAVA_OPTS=%JAVA_OPTS% -XX:FlightRecorderOptions=defaultrecording=true,disk=true,dumponexit=true,dumponexitpath=%LOG_DIR%\jfr\dump-on-exit-%CUR_TIME%.jfr,maxage=3600s,settings=%JRE_HOME%\lib\jfr\profile.jfc
rem 记录GC详细日志
set JAVA_OPTS=%JAVA_OPTS% -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:%LOG_DIR%\gc.log
rem 启用远程调试
set JAVA_OPTS=%JAVA_OPTS% -Xdebug -Xrunjdwp:transport=dt_socket,server=y,address=8000

echo Setting CATALINA_HOME %CATALINA_HOME%
echo Setting JRE_HOME %JRE_HOME%
echo Setting JAVA_OPTS %JAVA_OPTS%
echo.
echo Launching Tomcat 7 startup.bat...
echo *******************************************************************************
echo.
call bin\startup.bat
popd</pre>
</li>
<li>类似的，编写一个shutdown.bat</li>
</ol>
<div class="blog_h3"><span class="graybg">NT服务配置</span></div>
<p>如果不想使用脚本启动（上一段的方式），可以把Tomcat配置为NT服务，把下面的脚本存放到%TOMCAT_HOME%，传入服务名、显示名、服务描述三个参数即可安装服务，内存配置需要根据机器的性能进行调整：</p>
<pre class="crayon-plain-tag">@echo off
pushd "%~dp0"
setlocal

set SERVICE_NAME=%~1
set DISPLAY_NAME=%~2
set SERVICE_DESC=%~3

set "CATALINA_HOME=%CD%"
set "EXECUTABLE=%CATALINA_HOME%\bin\tomcat7.exe"
set "CATALINA_BASE=%CATALINA_HOME%"
set "JRE_HOME=%CATALINA_HOME%\jre"
set "LOG_DIR=%CATALINA_HOME%\logs"
set "CLASSPATH=%CATALINA_HOME%\bin\bootstrap.jar;%CATALINA_BASE%\bin\tomcat-juli.jar"
rem 请根据服务器硬件配置、系统的特性填写下面一行
rem 响应时间优先配置示例：-XX:MaxPermSize=256M;-XX:+UseConcMarkSweepGC;-XX:+UseParNewGC;-XX:ParallelGCThreads=8;-XX:MaxGCPauseMillis=500;-XX:+UseParNewGC;
rem 吞吐量优先的配置示例：-XX:+UseParallelGC;-XX:+UseParallelOldGC;-XX:ParallelGCThreads=8;-Xmn1280M;
set "JVM_MEM_GC_OPTS=-XX:MaxPermSize=256M;"

rem 启用JMX远程管理和黑匣子
set "JMX_OPTS=-Dcom.sun.management.jmxremote.authenticate=false;-Dcom.sun.management.jmxremote.ssl=false;-Dcom.sun.management.jmxremote.port=7777;-Dcom.sun.management.jmxremote;-XX:+UnlockCommercialFeatures;-XX:+FlightRecorder;"
rem 启用错误记录
set "JVM_ERR_OPTS=-XX:+HeapDumpOnOutOfMemoryError;-XX:HeapDumpPath=%LOG_DIR%\;-XX:ErrorFile=%LOG_DIR%\hs_err_pid%%p.log;"
set "JFR_AUTO_RCD=-XX:FlightRecorderOptions=defaultrecording=true,disk=true,dumponexit=true,dumponexitpath=%LOG_DIR%\jfr\dump-on-exit-%SERVICE_NAME%.jfr,maxage=3600s,settings=%JRE_HOME%\lib\jfr\profile.jfc;"

.\bin\tomcat7 //IS//%SERVICE_NAME% --Startup=auto ^
--DisplayName="%DISPLAY_NAME%" --Description "%SERVICE_DESC%" ^
--Jvm="%CATALINA_HOME%\jre\bin\server\jvm.dll" ^
--Classpath="%CLASSPATH%" ^
--LogPath "%CATALINA_HOME%\logs\services\%SERVICE_NAME%" --LogLevel=Info --StdOutput auto --StdError auto ^
--StartMode=jvm --StartPath "%CATALINA_HOME%" --StartClass=org.apache.catalina.startup.Bootstrap --StartParams=start ^
--StopMode=jvm --StopPath "%CATALINA_HOME%" --StopClass=org.apache.catalina.startup.Bootstrap --StopParams=stop ^
--JvmMs=2048 --JvmMx=2048 --JvmSs=128 ^
++JvmOptions "%JVM_MEM_GC_OPTS%-Dcatalina.home=%CATALINA_HOME%;-Dcatalina.base=%CATALINA_BASE%;-Djava.endorsed.dirs=%CATALINA_HOME%\endorsed;-Djava.io.tmpdir=%CATALINA_BASE%\temp;-Djava.util.logging.manager=org.apache.juli.ClassLoaderLogManager;-Djava.util.logging.config.file=%CATALINA_BASE%\conf\logging.properties;%JMX_OPTS%%JVM_ERR_OPTS%%JFR_AUTO_RCD%"

popd
endlocal</pre>
<div class="blog_h3"><span class="graybg">优化Tomcat配置参数（基于Java NIO）</span></div>
<p>参考下面的代码编辑%TOMCAT_HOME%\conf\server.xml</p>
<pre class="crayon-plain-tag">&lt;!-- 注释掉 AJP --&gt;
&lt;!--&lt;Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /&gt; --&gt;
&lt;!-- 使用Java NIO优化性能，注意删除原Connector元素的同名属性，线程数和缓存依据实际需要调整 --&gt;
&lt;Connector port="8080" redirectPort="8443" protocol="org.apache.coyote.http11.Http11NioProtocol" 
           connectionTimeout="20000" 
           URIEncoding="UTF-8" 
           useBodyEncodingForURI="true" 
           maxThreads="1024" 
           minSpareThreads="128"
           socket.appReadBufSize="1024" 
           socket.appWriteBufSize="1024"
/&gt;</pre>
<div class="blog_h2"><span class="graybg">Linux下的脚本示例（CentOS 6.3）</span></div>
<pre class="crayon-plain-tag">#!/bin/bash
PDTDIR=$(dirname $0)
export CUR_TIME=`date "+%Y%m%d%H%M%S"`
export JAVA_HOME=
export CATALINA_HOME=$PDTDIR
export JRE_HOME=$CATALINA_HOME/jre
export LOG_DIR=$CATALINA_HOME/logs

# 请根据服务器硬件配置、系统的特性填写下面一行
# 响应时间优先配置示例：-XX:+UseConcMarkSweepGC -XX:+UseParNewGC -XX:ParallelGCThreads=8 -XX:MaxGCPauseMillis=500
# 吞吐量优先的配置示例：-XX:+UseParallelGC -XX:+UseParallelOldGC -XX:ParallelGCThreads=8 -Xmn1280M
export JAVA_OPTS="-server -Xms2G -Xmx2G -Xss256K -XX:MaxPermSize=256M"
# 启用错误记录
export JAVA_OPTS="$JAVA_OPTS -XX:+HeapDumpOnOutOfMemoryError -XX:HeapDumpPath=$LOG_DIR/ -XX:ErrorFile=$LOG_DIR/hs_err_pid%p.log"
# 启用JMX远程管理和黑匣子
export JAVA_OPTS="$JAVA_OPTS -Dcom.sun.management.jmxremote.authenticate=false -Dcom.sun.management.jmxremote.ssl=false -Dcom.sun.management.jmxremote.port=7777 -Dcom.sun.management.jmxremote -XX:+UnlockCommercialFeatures -XX:+FlightRecorder"
# 启用黑匣子默认记录行为
export JAVA_OPTS="$JAVA_OPTS -XX:FlightRecorderOptions=defaultrecording=true,disk=true,dumponexit=true,dumponexitpath=$LOG_DIR/jfr/dump-on-exit-$CUR_TIME.jfr,maxage=3600s,settings=$JRE_HOME/lib/jfr/profile.jfc"
#rem 记录GC详细日志
export JAVA_OPTS="$JAVA_OPTS -XX:+PrintGCDetails -XX:+PrintGCDateStamps -Xloggc:$LOG_DIR/gc.log"

echo
echo "*******************************************************************************"
echo "    Portable Tomcat 7 for Linux  by Alex Wang  (Last updated: May 7th, 2015 )  "
echo "Setting CATALINA_HOME       $CATALINA_HOME"
echo "Setting JRE_HOME            $JRE_HOME"
echo "Setting JAVA_OPTS           $JAVA_OPTS"
echo
echo "Launching Tomcat 7 startup.bat...                                              "
echo "*******************************************************************************"
echo
exec "$PDTDIR"/bin/startup.sh</pre>
</div><p>The post <a rel="nofollow" href="https://blog.gmem.cc/tomcat-faq">Tomcat知识集锦</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.gmem.cc/tomcat-faq/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tomcat7配置指南</title>
		<link>https://blog.gmem.cc/tomcat7-config-manual</link>
		<comments>https://blog.gmem.cc/tomcat7-config-manual#comments</comments>
		<pubDate>Mon, 07 Jul 2014 06:50:30 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://blog.gmem.cc/?p=6257</guid>
		<description><![CDATA[<p>conf/server.xml server.xml包含了影响Tomcat7的Servlet/JSP容器行为的绝大部分配置项。可以在该配置文件中使用Ant风格的变量替换。变量可以使用系统属性，对于propname，可以使用${propname}这种形式的占位符。 server.xml的整体结构如下： [crayon-69ded7e572d50619175825/] Server元素 该元素代表整个Catalina容器，它是配置文件的根元素 属性列表  属性名称 说明  className 容器实现类的名称，必须实现org.apache.catalina.Server接口 address 等待关闭命令的地址，默认localhost port 等待关闭命令的端口，设置为-1可以禁止，禁用后shutdown.bat将不能正常工作 shutdown 通过TCP连接接收的命令行字符串，用于关闭Tomcat 支持的嵌套元素  元素名称 说明  Service   <a class="read-more" href="https://blog.gmem.cc/tomcat7-config-manual">[...]</a></p>
<p>The post <a rel="nofollow" href="https://blog.gmem.cc/tomcat7-config-manual">Tomcat7配置指南</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="wri_content_clear_both"><div class="blog_h1"><span class="graybg">conf/server.xml</span></div>
<p>server.xml包含了影响Tomcat7的Servlet/JSP容器行为的绝大部分配置项。可以在该配置文件中使用Ant风格的变量替换。变量可以使用系统属性，对于propname，可以使用<span style="background-color: #c0c0c0;">${propname}</span>这种形式的占位符。</p>
<p>server.xml的整体结构如下：</p>
<pre class="crayon-plain-tag">&lt;!-- Server是整个配置文件的根元素 --&gt;
&lt;Server&gt;
    &lt;Listener /&gt;
    &lt;GlobalNamingResources&gt;
        &lt;Resource /&gt;
    &lt;/GlobalNamingResources&gt;
    &lt;!-- Context处理针对某个特定Web应用程序的请求 --&gt;
    &lt;!-- 服务（Service）用于表示一组与一个引擎（Engine）关联的连接器（Connector） --&gt;
    &lt;Service&gt;
        &lt;!-- 连接器用于表示外部客户端与某个特定服务的接口 --&gt;
        &lt;Connector /&gt;
        &lt;!-- 引擎处理针对服务的所有请求 --&gt;
        &lt;Engine&gt;
            &lt;Realm /&gt;
            &lt;!-- 主机（Host）处理针对某个特定虚拟主机的所有请求 --&gt;
            &lt;Host /&gt;
        &lt;/Engine&gt;
    &lt;/Service&gt;
&lt;/Server&gt;</pre>
<div class="blog_h2"><span class="graybg">Server元素</span></div>
<p>该元素代表整个Catalina容器，它是配置文件的根元素</p>
<div class="blog_h3"><span class="graybg">属性列表</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 150px; text-align: center;"> 属性名称</td>
<td style="text-align: center;">说明 </td>
</tr>
</thead>
<tbody>
<tr>
<td>className</td>
<td>容器实现类的名称，必须实现org.apache.catalina.Server接口</td>
</tr>
<tr>
<td>address</td>
<td>等待关闭命令的地址，默认localhost</td>
</tr>
<tr>
<td>port</td>
<td>等待关闭命令的端口，设置为-1可以禁止，禁用后shutdown.bat将不能正常工作</td>
</tr>
<tr>
<td>shutdown</td>
<td>通过TCP连接接收的命令行字符串，用于关闭Tomcat</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">支持的嵌套元素</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 150px; text-align: center;"> 元素名称</td>
<td style="text-align: center;">说明 </td>
</tr>
</thead>
<tbody>
<tr>
<td>Service  </td>
<td>一个或者多个service元素 </td>
</tr>
<tr>
<td>GlobalNamingResources</td>
<td>容器的全局JNDI资源 </td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">Service元素</span></div>
<p>用于表示多个连接器与单个引擎的联合</p>
<div class="blog_h3"><span class="graybg">属性列表</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 150px; text-align: center;">属性名称 </td>
<td style="text-align: center;">说明 </td>
</tr>
</thead>
<tbody>
<tr>
<td>className</td>
<td>服务实现类的名称，必须实现org.apache.catalina.Service接口</td>
</tr>
<tr>
<td>name</td>
<td>该服务的显示名，必须在Server下是唯一的 </td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">支持的嵌套元素</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 150px; text-align: center;">元素名称 </td>
<td style="text-align: center;">说明 </td>
</tr>
</thead>
<tbody>
<tr>
<td>Connector</td>
<td>支持一个到多个</td>
</tr>
<tr>
<td>Executor</td>
<td>支持一个到多个</td>
</tr>
<tr>
<td>Engine</td>
<td>支持一个，必须放在最后面</td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">Executor元素</span></div>
<p>表示可以被多个组件（主要是Connector）共享的线程池。Executor必须实现org.apache.catalina.Executor接口。</p>
<p>它必须在Connector前面定义，才可以被其引用。</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="width: 150px; text-align: center;">属性名称</td>
<td style="text-align: center;">说明</td>
</tr>
</thead>
<tbody>
<tr>
<td>className</td>
<td>实现类的名称，默认org.apache.catalina.core.StandardThreadExecutor</td>
</tr>
<tr>
<td>name</td>
<td>供其它组件引用的名称</td>
</tr>
</tbody>
</table>
<p>StandardThreadExecutor提供的属性：</p>
<table class="full-width fixed-word-wrap">
<thead>
<tr>
<td style="width: 250px; text-align: center;">属性名称</td>
<td style="text-align: center;">说明</td>
</tr>
</thead>
<tbody>
<tr>
<td>threadPriority</td>
<td>线程优先级，默认Thread.NORM_PRIORITY，即5</td>
</tr>
<tr>
<td>daemon</td>
<td>是否作为守护进程运行，默认true</td>
</tr>
<tr>
<td>namePrefix</td>
<td>线程的名字前缀</td>
</tr>
<tr>
<td>maxThreads</td>
<td>该池的最大线程数，默认200</td>
</tr>
<tr>
<td>minSpareThreads</td>
<td>最小空闲线程数，默认25</td>
</tr>
<tr>
<td>maxIdleTime</td>
<td>关闭空闲线程的延迟时间，默认60000ms</td>
</tr>
<tr>
<td>maxQueueSize</td>
<td>排队等候处理的任务最大数量</td>
</tr>
<tr>
<td>prestartminSpareThreads</td>
<td>是否启动时就创建minSpare数量的线程，默认false</td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">Connector元素</span></div>
<p>用于表示一个连接器。连接器分为两种：HTTP、AJP。前者支持HTTP/1.1协议，可以让Tomcat作为独立Web服务器运行。我们这里主要讨论HTTP连接器。</p>
<p>Connector可以使用在其前面定义的Executor</p>
<div class="blog_h3"><span class="graybg">属性列表</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 200px; text-align: center;">属性名称 </td>
<td style="text-align: center;">说明 </td>
</tr>
</thead>
<tbody>
<tr>
<td>allowTrace</td>
<td>是否支持HTTP的TRACE方法，默认false</td>
</tr>
<tr>
<td>asyncTimeout</td>
<td>异步请求的超时，默认10000ms</td>
</tr>
<tr>
<td>enableLookups</td>
<td>启用后可以通过DNS查找客户端的主机名，默认false</td>
</tr>
<tr>
<td>maxHeaderCount</td>
<td>请求中最多包含请求头的数量，如果超过限制，请求被拒绝，默认100</td>
</tr>
<tr>
<td>maxParameterCount</td>
<td>GET/POST请求参数（键值对）的最大数量，超过的被忽略，默认10000</td>
</tr>
<tr>
<td>maxPostSize</td>
<td>FORM URL参数解析能处理POST请求的最大尺寸，默认2MB</td>
</tr>
<tr>
<td>maxSavePostSize </td>
<td>容器在对客户端进行表单验证，或者客户端证书认证期间，最大缓存的POST请求大小，默认4KB</td>
</tr>
<tr>
<td>parseBodyMethods </td>
<td>
<p>用于像处理POST那样，解析其它HTTP方法的请求体部分，默认POST，支持逗号分隔的HTTP方法名，TRACE不支持。</p>
<p>该配置用于支持某些RESTful风格的APP，该APP期望通过请求体传递参数</p>
</td>
</tr>
<tr>
<td>port</td>
<td>该连接器的监听端口</td>
</tr>
<tr>
<td>protocol</td>
<td>
<p>制定用于处理入站请求的协议。默认值是在基于Java的阻塞协议和APR/本地库协议之间自动选择。如果PATH（Windows）或LD_LIBRARY_PATH（Linux）环境变量包含Tomcat本地库，则自动启用APR本地库协议。可以精确设定：</p>
<p>org.apache.coyote.http11.Http11Protocol 阻塞的Java连接器<br />org.apache.coyote.http11.Http11NioProtoco 非阻塞的Java连接器<br />org.apache.coyote.http11.Http11AprProtocol APR/本地连接器</p>
</td>
</tr>
<tr>
<td>proxyName</td>
<td>如果使用了代理配置，该配置的值将作为request.getServerName()的返回值</td>
</tr>
<tr>
<td>proxyPort </td>
<td>如果使用了代理配置，该配置的值将作为request.getServerPort()的返回值</td>
</tr>
<tr>
<td>redirectPort</td>
<td>如果如果连接器支持非SSL请求，当接收到某个匹配security-constraint的请求时，将自动重定向到此端口</td>
</tr>
<tr>
<td>scheme</td>
<td>该属性影响request.getScheme()的返回值，默认值http，对于SSL连接器，应当设置为https</td>
</tr>
<tr>
<td>secure</td>
<td>该属性影响request.isSecure()的返回值，默认false，对于SSL连接器，应当设置为true</td>
</tr>
<tr>
<td>URIEncoding </td>
<td>URI字节被编码的方式，默认ISO-8859-1</td>
</tr>
<tr>
<td>useBodyEncodingForURI</td>
<td>用于指示contentType指定的编码方式是否用于URI解析，默认false</td>
</tr>
<tr>
<td>acceptCount</td>
<td>入站请求队列（当所有工作线程都被使用，新的请求将在此排队）的最大数量，超过此配置的连接请求被拒绝，默认100</td>
</tr>
<tr>
<td>acceptorThreadCount </td>
<td>用于接受连接的线程数量，在多核心的服务器上、或者具有大量keep-alive连接的场景下可以增大此值，默认为1 </td>
</tr>
<tr>
<td>acceptorThreadPriority</td>
<td>用于接受连接的线程的优先级，默认java.lang.Thread.NORM_PRIORITY</td>
</tr>
<tr>
<td>address</td>
<td>连接器在哪个IP上监听，默认0.0.0.0，即所有IP</td>
</tr>
<tr>
<td>bindOnInit</td>
<td>控制何时绑定Socket，如果设置为false，则连接器启动后才会绑定</td>
</tr>
<tr>
<td>compressableMimeType</td>
<td>
<p>逗号分隔的支持HTTP压缩的的MIME类型，默认text/html,text/xml,text/plain,text/css</p>
</td>
</tr>
<tr>
<td>compression</td>
<td>为节省服务器带宽，可以支持HTTP/1.1 GZIP压缩。该配置项可以配置为off/on/force，分别表示禁用、启用（压缩文本数据）、强制（压缩所有数据）</td>
</tr>
<tr>
<td>compressionMinSize</td>
<td>启用压缩的最小尺寸，默认2048 </td>
</tr>
<tr>
<td>connectionLinger </td>
<td>此连接器使用套接字被关闭时，套接字处于linger状态（等待所有数据报发出）秒数，默认-1表示禁用</td>
</tr>
<tr>
<td>connectionTimeout</td>
<td>在接受（accept）连接请求后，等待请求数据到达的时间，默认60000ms </td>
</tr>
<tr>
<td>connectionUploadTimeout</td>
<td>文件上传最大超时时间，禁在disableUploadTimeout=false时有用 </td>
</tr>
<tr>
<td>disableUploadTimeout</td>
<td>如果设置为false，则可以自定义文件上传的超时 </td>
</tr>
<tr>
<td>executor</td>
<td>对Executor元素的name属性的引用。用于指定共享的线程池。设置该属性并且目标Executor存在，则连接器会使用目标Executor，所有线程有关的属性被忽视；否则会使用私有的Executor</td>
</tr>
<tr>
<td>executorTerminationTimeoutMillis</td>
<td>私有Executor在关闭连接器之前，等待请求处理线程终止的时间，默认BIO是0ms，NIO、APR是5000ms</td>
</tr>
<tr>
<td>keepAliveTimeout</td>
<td>在等待某个客户端下一个HTTP请求到达前，维持底层TCP连接的最大时间。默认值与connectionTimeout相同</td>
</tr>
<tr>
<td>maxConnections</td>
<td>同时最大处理的连接数，如果超过该数目，Tomcat会继续接受（直到超过acceptCount），但是不处理请求，这些请求会一直阻塞知道活动连接数小于maxConnections。对于BIO，默认值与maxThreads相同；对于NIO，默认值10000；对于APR，默认值8192</td>
</tr>
<tr>
<td>maxHttpHeaderSize</td>
<td>HTTP请求/响应头的最大尺寸，默认8KB</td>
</tr>
<tr>
<td>maxKeepAliveRequests</td>
<td>最大keep-alive连接的数量，默认100</td>
</tr>
<tr>
<td>maxThreads</td>
<td>此连接器最多创建的请求处理线程的数量。默认值200</td>
</tr>
<tr>
<td>minSpareThreads</td>
<td>一直保持运行的线程的最小数量，默认10 </td>
</tr>
<tr>
<td>noCompressionUserAgents</td>
<td>不使用压缩的user-agent类型，使用正则式</td>
</tr>
<tr>
<td>processorCache</td>
<td>缓存处理器对象（Processor Object）有利于提高性能。使用Servlet 3.0异步处理时，设置为期望的最大同时请求数；否则设置为maxThreads大小，默认200</td>
</tr>
<tr>
<td>restrictedUserAgents</td>
<td>指定一个正则式，匹配的user-agent将不使用keep-alive</td>
</tr>
<tr>
<td>server</td>
<td>覆盖响应头server，默认Apache-Coyote/1.1</td>
</tr>
<tr>
<td>socketBuffer</td>
<td>套接字输出缓冲的大小，默认9000字节</td>
</tr>
<tr>
<td>SSLEnabled</td>
<td>设置为true，为该连接器启用SSL支持。启用后，应当设置scheme、secure</td>
</tr>
<tr>
<td>tcpNoDelay </td>
<td>启用服务器端套接字对象的TCP_NO_DELAY，默认true</td>
</tr>
<tr>
<td>threadPriority</td>
<td>处理线程的优先级，默认java.lang.Thread.NORM_PRIORITY</td>
</tr>
<tr>
<td>upgradeAsyncWriteBufferSize</td>
<td>对于无法在单步操作完成的异步写，分配的默认缓冲大小，无法写入的数据将放在缓冲中直到其可被写入，默认8192字节</td>
</tr>
<tr>
<td style="text-align: center;" colspan="2"><strong>BIO/NIO连接器支持的Java TCP套接字属性 </strong></td>
</tr>
<tr>
<td>int socket.rxBufSize</td>
<td>套接字接收缓冲（SO_RCVBUF），默认使用JVM缺省值</td>
</tr>
<tr>
<td>int socket.txBufSize</td>
<td>套接字发送缓冲（SO_SNDBUF），默认使用JVM缺省值</td>
</tr>
<tr>
<td>bool socket.tcpNoDelay</td>
<td>与tcpNoDelay属性同功</td>
</tr>
<tr>
<td>bool socket.soKeepAlive</td>
<td>套接字保活设置（SO_KEEPALIVE），默认使用JVM缺省值</td>
</tr>
<tr>
<td>bool socket.ooBInline</td>
<td>套接字OOBINLINE设置，默认使用JVM缺省值</td>
</tr>
<tr>
<td>bool socket.soReuseAddress</td>
<td>套接字地址重用属性（SO_REUSEADDR），默认使用JVM缺省值</td>
</tr>
<tr>
<td>bool socket.soLingerOn</td>
<td rowspan="2">
<p>分别为：是否启用套接字SO_LINGER，套接字SO_LINGER的时间。与connectionLinger 同功</p>
</td>
</tr>
<tr>
<td>int socket.soLingerTime</td>
</tr>
<tr>
<td>int socket.soTimeout</td>
<td>与connectionTimeout同功</td>
</tr>
<tr>
<td>int socket.performanceConnectionTime</td>
<td rowspan="3">与TCP性能有关的配置项，参考Java API：Socket.setPerformancePreferences   </td>
</tr>
<tr>
<td>int socket.performanceLatency </td>
</tr>
<tr>
<td>int socket.performanceBandwidth</td>
</tr>
<tr>
<td>int socket.unlockTimeout</td>
<td>连接器停止后，套接字解锁时间，默认250ms</td>
</tr>
<tr>
<td style="text-align: center;" colspan="2"><strong>BIO特有配置  </strong></td>
</tr>
<tr>
<td>disableKeepAlivePercentage</td>
<td>keep-alive最多占用的处理线程的比例，超过后将禁止使用keep-alive</td>
</tr>
<tr>
<td style="text-align: center;" colspan="2"><strong>NIO特有配置  </strong></td>
</tr>
<tr>
<td>int pollerThreadCount</td>
<td>用于轮询事件的线程的数量。默认1。由于操作系统在accept连接时会持有全局锁，修改此配置一般不会带来性能提升</td>
</tr>
<tr>
<td>int pollerThreadPriority</td>
<td>轮询线程的优先级，默认java.lang.Thread.NORM_PRIORITY</td>
</tr>
<tr>
<td>int selectorTimeout</td>
<td>轮询线程调用select()时的超时时间，默认1000ms。由于连接清理由轮询线程执行，所有不应该设置的过大</td>
</tr>
<tr>
<td>bool useComet</td>
<td>是否允许 comet servlets，这是一种异步的、推送式的通信机制。默认true</td>
</tr>
<tr>
<td>bool useSendfile</td>
<td>是否支持sendfile特性，以提升通过网络发送文件的性能。默认true</td>
</tr>
<tr>
<td>bool socket.directBuffer</td>
<td>是否使用直接ByteBuffer。如果启用，应当设置-XX:MaxDirectMemorySize=xxm。默认false</td>
</tr>
<tr>
<td>int socket.appReadBufSize</td>
<td>每个建立的TCP连接具有一个读ByteBuffer，该属性控制此Buffer的大小。默认8192字节。对于较小的并发度，可以适当增加此值；对于极多的keep-alive连接应当减少此值或者增加堆尺寸</td>
</tr>
<tr>
<td>int socket.appWriteBufSize</td>
<td>每个建立的TCP连接具有一个写ByteBuffer，该属性控制此Buffer的大小。默认8192字节。此默认值偏小，除非需要处理上万的同时连接请求，应当增加此值；对于极多的keep-alive连接应当减少此值或者增加堆尺寸</td>
</tr>
<tr>
<td>int socket.bufferPool</td>
<td>NIO连接器缓存的NioChannel对象的数量，缓存这种对象有利于减少垃圾回收。默认500</td>
</tr>
<tr>
<td>int socket.bufferPoolSize</td>
<td>
<p>NioChannel缓存亦可以字节而不是个数配置，规则如下：</p>
<p>NioChannel的BufferPoolSize = ReadBufSize + WriteBufSize</p>
<p>SecureNioChannel的BufferPoolSize = appReadBufSize + appWriteBufSize + networkReadBufSize + networkWriteBufSize </p>
<p>默认值1000*1000*100字节（100MB）</p>
</td>
</tr>
<tr>
<td>int socket.processorCache</td>
<td>NIO连接器缓存SocketProcessor对象的数量，缓存这种对象有利于减少垃圾回收。默认500</td>
</tr>
<tr>
<td>int socket.keyCache</td>
<td>NIO连接器缓存KeyAttachment对象的数量，缓存这种对象有利于减少垃圾回收。默认500</td>
</tr>
<tr>
<td>int socket.eventCache</td>
<td>NIO连接器缓存PollerEvent对象的数量，缓存这种对象有利于减少垃圾回收。默认500</td>
</tr>
<tr>
<td>int selectorPool.maxSelectors</td>
<td>最大的Selector对象数量，默认200。命令行参数org.apache.tomcat.util.net.NioSelectorShared=false时可以配置该参数</td>
</tr>
<tr>
<td>int selectorPool.maxSpareSelectors</td>
<td>池中维持的空闲Selector对象的最大数量</td>
</tr>
<tr>
<td>int oomParachute</td>
<td>NIO连接器实现了一种OutOfMemoryError策略，它持有一块内存，当OOM发生时，这块内存立即释放，VM可以利用此空间进行清理。默认1mb</td>
</tr>
<tr>
<td style="text-align: center;" colspan="2"><strong>APR特有配置  </strong></td>
</tr>
<tr>
<td>deferAccept</td>
<td>设置此连接器的侦听套接字的TCP_DEFER_ACCEPT标记，默认true（如果OS支持）</td>
</tr>
<tr>
<td>pollerSize</td>
<td>同时支持Keep-alive的连接数，默认8192</td>
</tr>
<tr>
<td>pollTime</td>
<td>轮询间隔，默认2000ms</td>
</tr>
<tr>
<td>sendfileSize</td>
<td>同时最多支持异步发送静态文件的套接字数量，默认1024</td>
</tr>
<tr>
<td>threadPriority</td>
<td>Poller线程的优先级，默认5</td>
</tr>
<tr>
<td>useComet</td>
<td>是否使用comet servlets，默认true</td>
</tr>
<tr>
<td>useSendfile</td>
<td>是否使用sendfile特性，默认true</td>
</tr>
<tr>
<td style="text-align: center;" colspan="2"><strong>BIO/NIO支持的SSL相关属性  </strong></td>
</tr>
<tr>
<td>algorithm</td>
<td>证书编码算法，默认是KeyManagerFactory.getDefaultAlgorithm()的返回值，SUN的JDK返回SunX509</td>
</tr>
<tr>
<td>useServerCipherSuitesOrder</td>
<td>设置为true，强制使用服务器的密码顺序；否则根据客户端自动选择。仅Java8+支持</td>
</tr>
<tr>
<td>ciphers</td>
<td>逗号分隔的、支持的密码算法，仅列出的且SSL实现支持的算法会被使用。ALL表示启用所有算法，应当仅用于测试</td>
</tr>
<tr>
<td>clientAuth </td>
<td>设置为true，在accept之前要求客户端提供一个有效的证书链；设置为want，要求客户端提供证书，但是没有的话也不会失败；设置为false默认不需要客户端证书 </td>
</tr>
<tr>
<td>clientCertProvider </td>
<td>客户端证书不是以java.security.cert.X509Certificate形式提供时，需要设置该选项</td>
</tr>
<tr>
<td>crlFile </td>
<td>用于验证客户端证书有效性的证书吊销列表文件</td>
</tr>
<tr>
<td>keyAlias </td>
<td>keystore中服务器私钥/证书的别名，如果不指定，将使用keystore中第一个读取到的key</td>
</tr>
<tr>
<td>keyPass</td>
<td>keystore文件中服务器证书的访问密码，默认changeit</td>
</tr>
<tr>
<td>keystoreFile </td>
<td>keystore文件的路径，默认从用户的HOME目录中寻找*.keystore文件</td>
</tr>
<tr>
<td>keystorePass</td>
<td>keystore文件本身的密码，默认与keyPass相同 </td>
</tr>
<tr>
<td>keystoreProvider</td>
<td>keystore提供者的名称</td>
</tr>
<tr>
<td>keystoreType </td>
<td>keystore文件的类型，默认JKS</td>
</tr>
<tr>
<td>sessionCacheSize </td>
<td>SSL会话缓存的数量，默认0，表示无限制</td>
</tr>
<tr>
<td>sessionTimeout </td>
<td>SSL会话过期时间，默认86400s</td>
</tr>
<tr>
<td>sslEnabledProtocols</td>
<td>逗号分隔的SSL协议类型。如果不指定，使用JVM缺省值</td>
</tr>
<tr>
<td>sslImplementationName</td>
<td>SSL实现的类名，默认org.apache.tomcat.util.net.jsse.JSSEImplementation</td>
</tr>
<tr>
<td>sslProtocol</td>
<td>使用的SSL协议，默认TLS</td>
</tr>
<tr>
<td>trustManagerClassName</td>
<td>受信任管理器类的名称，目标类必须实现javax.net.ssl.X509TrustManager且具有0参构造器。如果不指定，trust store属性被忽略</td>
</tr>
<tr>
<td>trustMaxCertLength</td>
<td>验证客户端证书时，最多允许的中间证书数量，默认5</td>
</tr>
<tr>
<td>truststoreAlgorithm</td>
<td>truststore使用的算法，默认javax.net.ssl.TrustManagerFactory.getDefaultAlgorithm()</td>
</tr>
<tr>
<td>truststoreFile</td>
<td>truststore文件的位置，默认使用系统属性javax.net.ssl.trustStore</td>
</tr>
<tr>
<td>truststorePass</td>
<td>truststore的访问密码，默认使用系统属性javax.net.ssl.trustStorePassword</td>
</tr>
<tr>
<td>truststoreProvider</td>
<td>truststore的提供者，默认使用系统属性javax.net.ssl.trustStoreProvider，如果没有此系统属性，则使用keystoreProvider</td>
</tr>
<tr>
<td>truststoreType</td>
<td>truststore的keystore类型，默认使用系统属性 javax.net.ssl.trustStoreType，如果没有此系统属性，则使用keystoreType </td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">Engine元素</span></div>
<p>Engine用于表示整个Service的请求处理机制，它接收一个或者多个Connecter的请求，并返回处理好的响应。</p>
<p><span style="background-color: #c0c0c0;">Cluster、Engine、Host、Context统称为容器</span>，他们有一些共同的属性，例如Realm。</p>
<div class="blog_h3"><span class="graybg">属性列表</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 200px; text-align: center;">属性名称 </td>
<td style="text-align: center;">说明 </td>
</tr>
</thead>
<tbody>
<tr>
<td>backgroundProcessorDelay</td>
<td>该引擎及其子容器的backgroundProcess方法被调用的延迟。默认10s</td>
</tr>
<tr>
<td>className</td>
<td>引擎实现类的名称，必须实现org.apache.catalina.Engine接口。默认org.apache.catalina.core.StandardEngine</td>
</tr>
<tr>
<td>defaultHost</td>
<td>默认的host名称，必须是某个嵌套的host元素的name属性。用于识别默认处理请求的虚拟主机</td>
</tr>
<tr>
<td>jvmRoute</td>
<td>
<p>在负载均衡场景下，用于实现会话关联（session affinity）的标识符，此标识符在Tomcat集群内必须唯一。标识符将被附加到生成的会话标识符的尾部，以便于前端代理总是把特定会话的请求发送给特定的Tomcat实例。</p>
<p>亦可通过系统属性jvmRoute来设置</p>
</td>
</tr>
<tr>
<td>name</td>
<td>该引擎的逻辑名称，在错误信息、日志中使用，必须唯一</td>
</tr>
<tr>
<td>startStopThreads</td>
<td>用于并发启动host子元素的线程数量。设置为0，将使用Runtime.getRuntime().availableProcessors()</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">支持的嵌套元素</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 150px; text-align: center;">元素名称 </td>
<td style="text-align: center;">说明 </td>
</tr>
</thead>
<tbody>
<tr>
<td>Host</td>
<td>支持一个或者多个，每个代表单独的虚拟主机。至少具有一个host元素，且其name=engine.defaultHost</td>
</tr>
<tr>
<td>Realm</td>
<td>支持一个。用于指定用户、及其关联角色的数据库，此数据库在所有Host、Context中共享，除非他们单独设定</td>
</tr>
<tr>
<td>Value</td>
<td>
<p>可以用于定制多种特性</p>
<p>访问日志元素：可以作为Engine、Host、Context的子元素，记录Web服务的访问日志</p>
<pre class="crayon-plain-tag">&lt;Valve className="org.apache.catalina.valves.AccessLogValve"
         prefix="catalina_access_log." suffix=".log"
         pattern="common" /&gt;</pre>
<p>请求过滤元素：可以作为Engine、Host、Context的子元素，通过IP地址、主机名来接受或者拒绝请求</p>
<pre class="crayon-plain-tag">&lt;Valve className="org.apache.catalina.valves.RemoteHostValve"
         allow=".*\.mycompany\.com|www\.yourcompany\.com"/&gt;
&lt;Valve className="org.apache.catalina.valves.RemoteAddrValve"
         deny="192\.168\.1\.\d+"/&gt;</pre>
</td>
</tr>
<tr>
<td>Listener</td>
<td>
<p>引擎生命周期监听器配置。任何实现org.apache.catalina.LifecycleListener接口的类被支持
</td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">Host元素</span></div>
<p>该元素用于代表一个虚拟主机，虚拟主机通常用于和服务器的某个网络名称（域名，例如blog.gmem.cc）关联。通过虚拟主机别名，可以把多个网络名称关联到一个虚拟主机。</p>
<p>一个Engine内可以包含多个虚拟主机，每个虚拟主机内部可以嵌套Context。</p>
<div class="blog_h3"><span class="graybg">属性列表</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 200px; text-align: center;">属性名称 </td>
<td style="text-align: center;">说明 </td>
</tr>
</thead>
<tbody>
<tr>
<td>appBase </td>
<td>该虚拟主机的应用根目录，支持绝对路径，默认webapps </td>
</tr>
<tr>
<td>xmlBase</td>
<td>该虚拟主机的部署描述符文件所在目录，默认 conf/[engine_name]/[host_name] </td>
</tr>
<tr>
<td>createDirs </td>
<td>是否在启动时自动创建缺少的appBase、xmlBase目录</td>
</tr>
<tr>
<td>autoDeploy </td>
<td>是否支持自动部署，如果设置为true，Tomcat定期检查appBase、xmlBase目录，检查是否有新的应用或者部署描述符的变化。默认true</td>
</tr>
<tr>
<td>backgroundProcessorDelay</td>
<td>backgroundProcess延迟调用时间，默认-1，表示依赖于上层Engine的配置</td>
</tr>
<tr>
<td>className</td>
<td>虚拟主机实现类的名称，必须实现org.apache.catalina.Host。默认org.apache.catalina.core.StandardHost</td>
</tr>
<tr>
<td>deployIgnore </td>
<td>用于限制autoDeploy、deployOnStartup的路径的正则式，路径相对于appBase</td>
</tr>
<tr>
<td>deployOnStartup</td>
<td>是否在Tomcat启动时自动部署，默认true</td>
</tr>
<tr>
<td>failCtxIfServletStartFails</td>
<td>对虚拟主机下每个Context生效，是否只要有一个load-on-startup的Servlet失败，即导致Context失败。默认false </td>
</tr>
<tr>
<td>name</td>
<td>通常是该虚拟主机对应的网络名称（域名）</td>
</tr>
<tr>
<td>startStopThreads </td>
<td>该虚拟主机用于并发启动Context的线程数，默认Runtime.getRuntime().availableProcessors() </td>
</tr>
<tr>
<td>undeployOldVersions</td>
<td>是否自动移除老的、不使用的版本的应用程序</td>
</tr>
<tr>
<td style="text-align: center;" colspan="2"><strong>org.apache.catalina.core.StandardHost的属性</strong></td>
</tr>
<tr>
<td>copyXML </td>
<td>设置为true，则自动把嵌入在应用war包的/META-INF/context.xml中的部署描述符拷贝到xmlBase，下次启动将生效。默认false。如果deployXML=false该配置无效</td>
</tr>
<tr>
<td>deployXML</td>
<td>设置为false，可以禁止 /META-INF/context.xml生效</td>
</tr>
<tr>
<td>unpackWARs</td>
<td>设置为true，war包自动解压，否则直接运行war</td>
</tr>
<tr>
<td>workDir</td>
<td>该虚拟主机的工作目录，默认$CATALINA_BASE/work的某个子文件夹</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">支持的嵌套元素</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 150px; text-align: center;">元素名称 </td>
<td style="text-align: center;">说明 </td>
</tr>
</thead>
<tbody>
<tr>
<td>Realm</td>
<td>供此主机下所有Context共享的Realm </td>
</tr>
<tr>
<td>Value</td>
<td>访问日志、请求过滤器、单点登录配置</td>
</tr>
<tr>
<td>Alias</td>
<td>定义此虚拟主机的别名，可以关联多个解析到当前服务器的域名</td>
</tr>
<tr>
<td>Listener</td>
<td>生命周期监听器</td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">单点登录支持</span></div>
<p>在很多应用场景下，一个虚拟主机下的多个Web应用需要使用单点登录特性。可以参考如下的方式启用某个虚拟主机的单点登录支持：</p>
<pre class="crayon-plain-tag">&lt;Host name="localhost" &gt;
  &lt;Valve className="org.apache.catalina.authenticator.SingleSignOn"/&gt;
&lt;/Host&gt;</pre>
<p>单点登录依据如下规则运作：</p>
<ol>
<li>虚拟主机下所有Web应用共享同一Realm，因此Context不得自行定制Realm</li>
<li>用户访问非受保护资源时，不需要进行验证</li>
<li>用户一旦访问受保护资源时，必须使用正在访问的Web应用定义的登录方法进行验证 </li>
<li>一旦验证完毕，用户关联的角色将用于所有Web应用的访问控制</li>
<li>一旦用户从某个Web应用登出，后续对受保护资源的访问需要身份验证</li>
<li>SSO使用HTTP Cookie来发送每个请求，Cookie中包含用户的标识符</li>
</ol>
<div class="blog_h2"><span class="graybg">Realm元素</span></div>
<p>Realm元素代表了一个包含用户名、密码、角色（相当于Unix的groups）信息的数据库，不同的Realm实现允许Tomcat与既有的用户身份验证与授权机制结合，实现Servlet规范规定的容器管理安全性（Container Managed Security）</p>
<div class="blog_h3"><span class="graybg">属性列表</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 200px; text-align: center;">属性名称 </td>
<td style="text-align: center;">说明 </td>
</tr>
</thead>
<tbody>
<tr>
<td>className</td>
<td>Realm实现类，必须实现org.apache.catalina.Realm接口，该属性必须指定</td>
</tr>
<tr>
<td style="text-align: center;" colspan="2">
<p><strong>org.apache.catalina.realm.JDBCRealm  </strong></p>
<p style="text-align: left;">该Realm允许Tomcat连接到关系型数据库来获取用户名、密码及其关联的角色。当验证新的登录请求时，用户密码的修改会立即被感知</p>
</td>
</tr>
<tr>
<td>allRolesMode</td>
<td>处理web.xml中定义的授权约束时，对特殊角色“*”的处理方式。默认值strict表示用户必须授予web.xml中定义的一个角色；authOnly表示仅仅进行身份验证，不检查其角色；strictAuthOnly与authOnly类似，但是如果角色是在web.xml中定义的，则用户必须被授予一个角色</td>
</tr>
<tr>
<td>connectionName</td>
<td>JDBC用户名</td>
</tr>
<tr>
<td>connectionPassword </td>
<td>JDBC密码</td>
</tr>
<tr>
<td>connectionURL</td>
<td>JDBC的URL</td>
</tr>
<tr>
<td>digest</td>
<td>用于散列数据库中的用户密码的算法，如果不指定，认为是明文密码</td>
</tr>
<tr>
<td>digestEncoding</td>
<td>散列算法的字符集，默认使用平台的缺省编码</td>
</tr>
<tr>
<td>driverName</td>
<td>JDBC驱动类名</td>
</tr>
<tr>
<td>roleNameCol</td>
<td>定义在用户角色表中的角色列</td>
</tr>
<tr>
<td>userCredCol</td>
<td>定义在用户表中的密码列</td>
</tr>
<tr>
<td>userNameCol</td>
<td>定义在用户表、角色表中的用户名列</td>
</tr>
<tr>
<td>userRoleTable</td>
<td>角色表名称</td>
</tr>
<tr>
<td>userTable</td>
<td>用户表名称</td>
</tr>
<tr>
<td>X509UsernameRetrieverClassName </td>
<td>当使用客户端X509证书时，该配置指定从证书中获取用户名的类。该类必须实现org.apache.catalina.realm.X509UsernameRetriever接口。默认使用证书的SubjectDN字段作为用户名</td>
</tr>
<tr>
<td style="text-align: center;" colspan="2">
<p><strong>org.apache.catalina.realm.UserDatabaseRealm  </strong></p>
<p style="text-align: left;">基于一个全局的JNDI资源来实现Realm</p>
</td>
</tr>
<tr>
<td>allRolesMode</td>
<td>（同上）</td>
</tr>
<tr>
<td>resourceName</td>
<td>全局的UserDatabase资源名称，Realm用来定位用户名、密码、角色 </td>
</tr>
<tr>
<td>X509UsernameRetrieverClassName</td>
<td>（同上）</td>
</tr>
<tr>
<td style="text-align: center;" colspan="2">
<p><strong>org.apache.catalina.realm.JAASRealm</strong></p>
<p style="text-align: left;">通过JAAS（Java认证与授权服务）框架来验证用户身份的Realm。基于JASS的登录模块（javax.security.auth.spi.LoginModule）和安全主体（javax.security.Principal），可以开发自己的安全机制，或者与任何第三方安全机制进行集成。</p>
</td>
</tr>
<tr>
<td>allRolesMode</td>
<td>（同上） </td>
</tr>
<tr>
<td>appName</td>
<td>JAAS LoginConfig中的应用程序名称</td>
</tr>
<tr>
<td>userClassNames</td>
<td>逗号分隔的类名，用于生成用户的安全主体对象</td>
</tr>
<tr>
<td>configFile</td>
<td>JAAS配置文件，如果不指定，使用JVM默认的JAAS配置</td>
</tr>
<tr>
<td>roleClassNames </td>
<td>逗号分隔的类名，用于生成角色的安全主体对象</td>
</tr>
<tr>
<td>useContextClassLoader</td>
<td>使用上下文类加载器来加载用户定义的LoginModule、Principal 类</td>
</tr>
<tr>
<td>X509UsernameRetrieverClassName </td>
<td>（同上）</td>
</tr>
<tr>
<td style="text-align: center;" colspan="2">
<p><strong>org.apache.catalina.realm.CombinedRealm</strong></p>
<p style="text-align: left;">可以通过一个或者多个子Realm来进行身份验证。子Realm元素嵌套指定</p>
</td>
</tr>
<tr>
<td style="text-align: center;" colspan="2">
<p><strong>org.apache.catalina.realm.LockOutRealm  </strong></p>
<p style="text-align: left;">是CombinedRealm的子类型，提供锁定机制，防止用户猜测密码反复尝试</p>
</td>
</tr>
<tr>
<td>allRolesMode</td>
<td>（同上）</td>
</tr>
<tr>
<td>cacheSize</td>
<td>认证失败的用户的缓存，默认1000</td>
</tr>
<tr>
<td>failureCount</td>
<td>锁定前允许的最大失败次数，默认5</td>
</tr>
<tr>
<td>lockOutTime</td>
<td>锁定时间，默认300s</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">支持的嵌套元素</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 150px; text-align: center;">元素名称 </td>
<td style="text-align: center;"> </td>
</tr>
</thead>
<tbody>
<tr>
<td>Realm</td>
<td>CombinedRealm的实现（例如LockOutRealm）支持嵌套的Realm元素</td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">Context元素</span></div>
<p>用于表示一个运行在某个特定虚拟主机下的Web应用。每个Web应用对应于符合Servlet 2.2+规范的war包，或者war包解压的目录结构。</p>
<p>Tomcat通过定义的Context path来将HTTP请求与相应的Web应用关联起来。</p>
<p>每个Context在虚拟主机下必须具有唯一的名称，且应当有一个Context Path为0长字符串的Context作为虚拟主机的默认上下文，默认上下文处理与其它上下文不匹配的所有请求。</p>
<div class="blog_h3"><span class="graybg">并行部署</span></div>
<p>Tomcat支持在同一个Context path下部署一个Web应用的多个版本，遵守如下规则：</p>
<ol>
<li>如果请求中不包含会话信息，使用最新的应用版本</li>
<li>如果请求中包含会话信息，检查每个版本的会话管理器，找到匹配的应用版本并使用</li>
<li>在第2条中，如果找不到匹配的应用版本，则使用最新的版本</li>
</ol>
<p>虚拟主机可以配置<span style="color: #000000;">undeployOldVersions属性，使旧版本的Web应用在无人使用时自动移除。</span></p>
<p>context name、context path、context version、 base file name是一组相关的概念，可以参考下表的例子理解：</p>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<tbody>
<tr>
<td style="text-align: center;"><strong>Context Path</strong></td>
<td style="text-align: center;"><strong>Context Version</strong></td>
<td style="text-align: center;"><strong>Context Name</strong></td>
<td style="text-align: center;"><strong>Base File Name</strong></td>
<td style="text-align: center;"><strong>样例文件名称 (.xml, .war和目录)</strong></td>
</tr>
<tr>
<td>/foo</td>
<td>None</td>
<td>/foo</td>
<td>foo</td>
<td>foo.xml, foo.war, foo</td>
</tr>
<tr>
<td>/foo/bar</td>
<td>None</td>
<td>/foo/bar</td>
<td>foo#bar</td>
<td>foo#bar.xml, foo#bar.war, foo#bar</td>
</tr>
<tr>
<td>Empty String</td>
<td>None</td>
<td>Empty String</td>
<td>ROOT</td>
<td>ROOT.xml, ROOT.war, ROOT</td>
</tr>
<tr>
<td>/foo</td>
<td>42</td>
<td>/foo##42</td>
<td>foo##42</td>
<td>foo##42.xml, foo##42.war, foo##42</td>
</tr>
<tr>
<td>/foo/bar</td>
<td>42</td>
<td>/foo/bar##42</td>
<td>foo#bar##42</td>
<td>foo#bar##42.xml, foo#bar##42.war, foo#bar##42</td>
</tr>
<tr>
<td>Empty String</td>
<td>42</td>
<td>##42</td>
<td>ROOT##42</td>
<td>ROOT##42.xml, ROOT##42.war, ROOT##42</td>
</tr>
</tbody>
</table>
<p>如果想使用于War包或者目录名称无关的上下文路径来部署一个Web应用，可以：</p>
<ol>
<li>禁用<span style="color: #000000;">autoDeploy、deployOnStartup，并且在server.xml中定义所有的上下文</span></li>
<li>或者，将目录或者War包置于虚拟主机的appBase目录之外，然后使用context.xml、docBase属性来定义Web应用</li>
</ol>
<div class="blog_h3"><span class="graybg">定义Context</span></div>
<p>不建议在server.xml中定义上下文，因为server.xml只能在Tomcat重启时加载。</p>
<p>单个上下文可以使用如下方式明确定义：</p>
<ol>
<li>在Web应用的/META-INF/context.xml文件中定义。如果虚拟主机配置了copyXML该文件会被拷贝到$CATALINA_BASE/conf/[enginename]/[hostname]/目录下，并且重命名为Web应用的文件基名.xml</li>
<li>在$CATALINA_BASE/conf/[enginename]/[hostname]/ 目录下直接定义XML文件，上下文路径、版本将通过文件基名判定</li>
<li>在server.xml的Host元素内部定义</li>
</ol>
<p>默认的上下文配置信息会应用到所有相关的上下文，并且被上下文的同名属性覆盖：</p>
<ol>
<li>$CATALINA_BASE/conf/context.xml：应用到所有Web应用的上下文配置</li>
<li>$CATALINA_BASE/conf/[enginename]/[hostname]/context.xml.default，应用到虚拟主机下所有Web应用的上下文配置</li>
</ol>
<p>除了明确定义，在启用了autoDeploy、deployOnStartup的情况下，Tomcat会自动识别Web应用。</p>
<div class="blog_h3"><span class="graybg">属性列表</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 200px; text-align: center;">属性名称 </td>
<td style="text-align: center;">说明 </td>
</tr>
</thead>
<tbody>
<tr>
<td>allowCasualMultipartParsing</td>
<td>默认false，设置为非false将导致Tomcat与Servlet规范不兼容。如果设置为true，调用 HttpServletRequest.getPart*或者HttpServletRequest.getParameter*时Tomcat会自动解析multipart/form-data请求体</td>
</tr>
<tr>
<td>backgroundProcessorDelay </td>
<td>（同Host）</td>
</tr>
<tr>
<td>className</td>
<td>上下文实现类的名称，必须实现org.apache.catalina.Context。默认 org.apache.catalina.core.StandardContext</td>
</tr>
<tr>
<td>cookies</td>
<td>默认true，设置为true将使用Cookie来存放会话标识符。设置为false将依赖于应用的会话重写来传递会话标识符</td>
</tr>
<tr>
<td>crossContext</td>
<td>默认false，设置为true将使当前上下文中的ServletContext.getContext()调用返回同一虚拟主机下其他请求分发器对象</td>
</tr>
<tr>
<td>docBase</td>
<td>应用程序目录或者War包所在位置，可以指定相对于虚拟主机appBase的路径，或者绝对路径</td>
</tr>
<tr>
<td>failCtxIfServletStartFails </td>
<td>（同Host）</td>
</tr>
<tr>
<td>logEffectiveWebXml</td>
<td>设置为true，将在INFO级别打印有效的web.xml，有效web.xml有应用程序的web.xml与Tomcat默认web.xml、以及注解等合并而成</td>
</tr>
<tr>
<td>override</td>
<td>设置为true，将忽略全局或者主机默认的context.xml配置</td>
</tr>
<tr>
<td>path</td>
<td>该Web应用的上下文路径（Context path ）</td>
</tr>
<tr>
<td>reloadable </td>
<td>设置为true，Tomcat将监控/WEB-INF/classes/、/WEB-INF/lib中类的变化，一旦发现变化将自动重新加载Web应用。默认false</td>
</tr>
<tr>
<td>sessionCookieDomain</td>
<td>会话Cookie的域（Domain）设置，可以用来实现二级域名会话共享，例如可以设置为".gmem.cc"</td>
</tr>
<tr>
<td>sessionCookieName</td>
<td>会话Cookie名称的设置，默认JSESSIONID</td>
</tr>
<tr>
<td>sessionCookiePath</td>
<td>
<p>会话Cookie存放路径，如果设置为"/"，那么该主机下所有其他也设置为"/"的Web应用将共享Session ID</p>
<p>路径用于指定Cookie关联的Web页面，如果创建一个路径/wp-admin的Cookie，那么<span style="background-color: #c0c0c0;">域/wp-admin/</span>目录下所有的地址均共享此会话</p>
</td>
</tr>
<tr>
<td>sessionCookiePathUsesTrailingSlash</td>
<td>某些浏览器（例如IE）会将/foo的Cookie传递给/foobar应用，设置为true可以阻止这一行为，默认true</td>
</tr>
<tr>
<td>swallowOutput</td>
<td>重定向stdout、stderr到Web应用的日志，默认false</td>
</tr>
<tr>
<td>useHttpOnly</td>
<td>设置HttpOnly标记，以防止客户端脚本访问Session ID，默认true</td>
</tr>
<tr>
<td style="text-align: center;" colspan="2"><strong>org.apache.catalina.core.StandardContext  </strong></td>
</tr>
<tr>
<td>addWebinfClassesResources</td>
<td>除了Web应用JAR包的 META-INF/resources之外，WEB-INF/classes/META-INF/resources中的内容也作为静态资源。仅支持Servlet3.0+</td>
</tr>
<tr>
<td>aliases</td>
<td>
<p>该属性用于配置一些额外的位置，用于指定Web应用的资源。格式必须为："/aliasPath1=docBase1,/aliasPath2=docBase2"</p>
<p>aliasPathN表示子路径，前导必须为/，不支持"/"</p>
<p>docBaseN表示子路径对应的War包或者目录</p>
</td>
</tr>
<tr>
<td>cacheMaxSize</td>
<td>静态资源缓存池最大尺寸，默认10240KB（10MB）</td>
</tr>
<tr>
<td>cacheObjectMaxSize</td>
<td>会被缓存的静态资源的最大尺寸，默认512KB</td>
</tr>
<tr>
<td>cacheTTL</td>
<td>缓存条目重验证时间，默认5000ms</td>
</tr>
<tr>
<td>cachingAllowed</td>
<td>是否支持静态资源缓存，默认true</td>
</tr>
<tr>
<td>copyXML</td>
<td>设置为true，将拷贝 /META-INF/context.xml的上下文描述符到虚拟主机的XMLBase目录下</td>
</tr>
<tr>
<td>unloadDelay</td>
<td>等待Servlet卸载的时间，默认2000ms</td>
</tr>
<tr>
<td>unpackWAR</td>
<td>覆盖Host的设置</td>
</tr>
<tr>
<td>useNaming</td>
<td>设置为true，Tomcat将为该应用启用一个JNDI初始上下文（InitialContext）</td>
</tr>
<tr>
<td>workDir</td>
<td>设置工作目录</td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">支持的嵌套元素</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 150px; text-align: center;">元素名称 </td>
<td style="text-align: center;">说明 </td>
</tr>
</thead>
<tbody>
<tr>
<td>Loader</td>
<td>配置应用程序加载器，一般默认加载器足够使用</td>
</tr>
<tr>
<td>Manager</td>
<td>配置使用的会话管理器，用于创建、销毁、持久化该Web应用的HTTP会话</td>
</tr>
<tr>
<td>Realm</td>
<td>（同Host）</td>
</tr>
<tr>
<td>Value</td>
<td>（同Host）</td>
</tr>
<tr>
<td>Listener</td>
<td>（同Host）</td>
</tr>
<tr>
<td>Resources</td>
<td>配置资源管理器，用于访问该应用关联的静态资源，默认资源管理器足够</td>
</tr>
<tr>
<td>Resource</td>
<td>定义JNDI资源</td>
</tr>
<tr>
<td>WatchedResource</td>
<td>用于监控应用状态并重启应用，其元素文本必须是一个字符串</td>
</tr>
<tr>
<td>Parameter</td>
<td>用于配置上下文参数</td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">Manager元素</span></div>
<p>用于管理特定应用程序的会话。该元素可以配置在Context元素内部。</p>
<div class="blog_h3"><span class="graybg">属性列表</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 200px; text-align: center;">属性名称 </td>
<td style="text-align: center;">说明 </td>
</tr>
</thead>
<tbody>
<tr>
<td>className</td>
<td>会话管理器实现类的名称，必须是org.apache.catalina.Manager接口的实现，默认org.apache.catalina.session.StandardManager</td>
</tr>
<tr>
<td>distributable</td>
<td>设置为true则会话管理器强制Servlet规范的要求——这意味着所有的会话属性必须是java.io.Serializable</td>
</tr>
<tr>
<td>maxActiveSessions</td>
<td>支持的最大会话数量</td>
</tr>
<tr>
<td>maxInactiveInterval</td>
<td>会话超时，默认1800s</td>
</tr>
<tr>
<td>sessionIdLength </td>
<td>Session ID的长度，默认16。应当通过嵌套的SessionIdGenerator元素设置</td>
</tr>
<tr>
<td style="text-align: center;" colspan="2"><strong>org.apache.catalina.session.StandardManager</strong></td>
</tr>
<tr>
<td>pathname</td>
<td>会话持久化文件的绝对或者相对路径，应用重启后将恢复会话，默认SESSIONS.ser</td>
</tr>
<tr>
<td>processExpiresFrequency</td>
<td>会话过期处理的频度，默认6</td>
</tr>
<tr>
<td>secureRandomClass</td>
<td>继承自java.security.SecureRandom的用于生成Session ID的类。默认java.security.SecureRandom</td>
</tr>
<tr>
<td>secureRandomProvider</td>
<td>用于创建java.security.SecureRandom实例的类</td>
</tr>
<tr>
<td>secureRandomAlgorithm</td>
<td>java.security.SecureRandom使用的算法</td>
</tr>
<tr>
<td style="text-align: center;" colspan="2">
<p><strong>org.apache.catalina.session.PersistentManager  </strong></p>
<p style="text-align: left;">必须设置系统属性：org.apache.catalina.session.StandardSession.ACTIVITY_CHECK或者org.apache.catalina.STRICT_SERVLET_COMPLIANCE以使持久化会话管理器正常工作。</p>
<p style="text-align: left;">PersistentManager会把不活动的会话交换到持久化存储中，在正常的重启过程中，也会保存/恢复相应的会话</p>
</td>
</tr>
<tr>
<td>maxIdleBackup</td>
<td>会话空闲最大时间，超过此时间则可能被持久化，默认禁用</td>
</tr>
<tr>
<td>maxIdleSwap</td>
<td>会话空闲最大时间，超过此时间则应该被持久化，默认禁用</td>
</tr>
<tr>
<td>saveOnRestart</td>
<td>当Tomcat或者应用被重启/重新载入时，是否所有的会话应该被持久化</td>
</tr>
<tr>
<td>processExpiresFrequency</td>
<td>（同上）</td>
</tr>
<tr>
<td>secureRandomClass </td>
<td>（同上） </td>
</tr>
<tr>
<td>secureRandomProvider</td>
<td>（同上） </td>
</tr>
<tr>
<td>secureRandomAlgorithm</td>
<td>（同上） </td>
</tr>
</tbody>
</table>
<div class="blog_h3"><span class="graybg">支持的嵌套元素</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 150px; text-align: center;">元素名称 </td>
<td style="text-align: center;">说明 </td>
</tr>
</thead>
<tbody>
<tr>
<td>SessionIdGenerator</td>
<td>会话ID生成器</td>
</tr>
<tr>
<td>Store</td>
<td>仅用于持久化的管理器实现，用于指定会话的存储</td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">Store元素</span></div>
<p>用于表示某个持久化的会话管理器的存储方式，支持文件、数据库等方式</p>
<div class="blog_h3"><span class="graybg">属性列表</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 200px; text-align: center;">属性名称 </td>
<td style="text-align: center;">说明 </td>
</tr>
</thead>
<tbody>
<tr>
<td>className</td>
<td>Store实现类的名称，必须实现org.apache.catalina.Store接口</td>
</tr>
<tr>
<td>checkInterval</td>
<td>检查会话expired，以交换出去的间隔时间，默认60s</td>
</tr>
<tr>
<td style="text-align: center;" colspan="2"><strong>org.apache.catalina.session.FileStore</strong></td>
</tr>
<tr>
<td>directory</td>
<td>存放每个会话文件的相对或者绝对路径</td>
</tr>
</tbody>
</table>
<div class="blog_h2"><span class="graybg">SessionIdGenerator 元素</span></div>
<p>用于为会话管理器指定Session ID的生成规则</p>
<div class="blog_h3"><span class="graybg">属性列表</span></div>
<table style="width: 100%;" border="1" cellspacing="0" cellpadding="5">
<thead>
<tr>
<td style="width: 200px; text-align: center;">属性名称 </td>
<td style="text-align: center;">说明 </td>
</tr>
</thead>
<tbody>
<tr>
<td>className</td>
<td>实现类的名称，必须是org.apache.catalina.SessionIdGenerator的实现。默认org.apache.catalina.util.StandardSessionIdGenerator</td>
</tr>
<tr>
<td>jvmRoute</td>
<td>当前Tomcat实例的路由标记，将被附加到Session ID以实现会话关联的负载均衡</td>
</tr>
<tr>
<td>sessionIdLength</td>
<td>Session ID的长度</td>
</tr>
</tbody>
</table>
<div class="blog_h1"><span class="graybg">配置示例代码</span></div>
<div class="blog_h2"><span class="graybg">SSL配置</span></div>
<pre class="crayon-plain-tag">&lt;Connector port="8443" protocol="HTTP/1.1" SSLEnabled="true"
         maxThreads="150" scheme="https" secure="true"    clientAuth="false"
        sslProtocol="TLS"     keystoreFile="/usr/local/ssl2/server/server.p12" keystorePass="111111"
        keystoreType="PKCS12"    truststoreFile="/usr/local/ssl2/jks/trust.keystore"
        truststorePass="123456" truststoreType="JKS"
        SSLCertificateFile="/usr/local/ssl2/server/server-cert.cer"
        SSLCertificateKeyFile="/usr/local/ssl2/server/server-key.pem" /&gt;</pre>
<p>&nbsp;</p>
</div><p>The post <a rel="nofollow" href="https://blog.gmem.cc/tomcat7-config-manual">Tomcat7配置指南</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.gmem.cc/tomcat7-config-manual/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Tomcat6作为Windows服务时的JAVA_OPTS设置</title>
		<link>https://blog.gmem.cc/set-javaopts-of-tomcat6-service</link>
		<comments>https://blog.gmem.cc/set-javaopts-of-tomcat6-service#comments</comments>
		<pubDate>Mon, 02 Jun 2014 01:30:24 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://blog.gmem.cc/?p=621</guid>
		<description><![CDATA[<p>首先，到服务列表中找到Tomcat服务，右击，Properties - General - Path to executable，看到类似： %TOMCAT_HOME%（指的是Tomcat安装目录，下同）\bin\tomcat6.exe //RS//tomcat8080，注意粗体部分。 进入Cmd命令行，执行以下命令： [crayon-69ded7e57303d367674282/] 可以看到弹出的对话框，Java选项卡中可以设置JVM内存、JAVA_OPTS等。 类似形式的命令还有： //TS// 作为控制台程序运行 //SS// 停止服务 //US// 更新服务参数 //IS// 安装服务 //DS// <a class="read-more" href="https://blog.gmem.cc/set-javaopts-of-tomcat6-service">[...]</a></p>
<p>The post <a rel="nofollow" href="https://blog.gmem.cc/set-javaopts-of-tomcat6-service">Tomcat6作为Windows服务时的JAVA_OPTS设置</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="wri_content_clear_both"><p>首先，到服务列表中找到Tomcat服务，右击，Properties - General - Path to executable，看到类似：<br /> %TOMCAT_HOME%<span style="background-color: #c0c0c0;">（指的是Tomcat安装目录，下同）</span>\bin\tomcat6.exe <strong>//RS//tomcat8080</strong>，注意粗体部分。<br /> 进入Cmd命令行，执行以下命令：</p>
<pre class="crayon-plain-tag">cd %TOMCAT_HOME%
tomcat6w.exe //ES//tomcat8080</pre>
<p>可以看到弹出的对话框，Java选项卡中可以设置JVM内存、JAVA_OPTS等。</p>
<p>类似形式的命令还有：<br /> //TS// 作为控制台程序运行<br /> //SS// 停止服务<br /> //US// 更新服务参数<br /> //IS// 安装服务<br /> //DS// 删除服务</p>
</div><p>The post <a rel="nofollow" href="https://blog.gmem.cc/set-javaopts-of-tomcat6-service">Tomcat6作为Windows服务时的JAVA_OPTS设置</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.gmem.cc/set-javaopts-of-tomcat6-service/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
		<item>
		<title>Ubuntu下安装Tomcat7</title>
		<link>https://blog.gmem.cc/tomcat7-under-ubuntu</link>
		<comments>https://blog.gmem.cc/tomcat7-under-ubuntu#comments</comments>
		<pubDate>Sat, 08 Jun 2013 04:56:36 +0000</pubDate>
		<dc:creator><![CDATA[Alex]]></dc:creator>
				<category><![CDATA[Java]]></category>
		<category><![CDATA[Linux]]></category>
		<category><![CDATA[Tomcat]]></category>

		<guid isPermaLink="false">http://blog.gmem.cc/?p=1182</guid>
		<description><![CDATA[<p>下载Tomcat压缩包： [crayon-69ded7e5731c0660507486/]  解压，并移动到习惯的存储位置： [crayon-69ded7e5731c5130606489/]  修改设置： [crayon-69ded7e5731c7398869013/] &#160;</p>
<p>The post <a rel="nofollow" href="https://blog.gmem.cc/tomcat7-under-ubuntu">Ubuntu下安装Tomcat7</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></description>
				<content:encoded><![CDATA[<div class="wri_content_clear_both"><strong>下载Tomcat压缩包：</strong><br />
<pre class="crayon-plain-tag">wget -O apache-tomcat-7.0.55.tar.gz "http://apache.mirrors.timporter.net/tomcat/tomcat-7/v7.0.55/bin/apache-tomcat-7.0.55.tar.gz"</pre><br />
<strong> 解压，并移动到习惯的存储位置：</strong><br />
<pre class="crayon-plain-tag">tar -zxvf apache-tomcat-7.0.55.tar.gz
rm tomcat-7.0.55.tar.gz
mv apache-tomcat-7.0.55  /usr/local/</pre><br />
<strong> 修改设置：</strong><br />
<pre class="crayon-plain-tag">vi /usr/local/apache-tomcat-7.0.55/conf/server.xml
#修改HTTP监听端口为你需要的端口，默认8080</pre><br />
&nbsp;
</div><p>The post <a rel="nofollow" href="https://blog.gmem.cc/tomcat7-under-ubuntu">Ubuntu下安装Tomcat7</a> appeared first on <a rel="nofollow" href="https://blog.gmem.cc">绿色记忆</a>.</p>
]]></content:encoded>
			<wfw:commentRss>https://blog.gmem.cc/tomcat7-under-ubuntu/feed</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>
