本文将介绍tomcat配置文件server.xml中常用的节点配置。
server.xml文件的整体结构其实和上一篇文章中我们所说的tomcat-体系结构图是对应的:
以下是一个包括常见元素的基础的server.xml配置:
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<Listener SSLEngine="on" className="org.apache.catalina.core.AprLifecycleListener" />
<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 auth="Container" description="User database that can be updated and saved" factory="org.apache.catalina.users.MemoryUserDatabaseFactory" name="UserDatabase" pathname="conf/tomcat-users.xml" type="org.apache.catalina.UserDatabase" />
</GlobalNamingResources>
<Service name="Catalina">
<Connector URIEncoding="UTF-8" connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443" />
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
<Engine defaultHost="localhost" name="Catalina">
<Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" />
</Realm>
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt" />
</Host>
</Engine>
</Service>
</Server>
<Server port="8005" shutdown="SHUTDOWN">
<!-- ....... -->
</Server>
这会让Tomcat启动一个server实例(即一个JVM),它监听在8005端口以接收shutdown命令。
各Server的定义不能使用同一个端口,这意味着如果在同一个物理机上启动了多个Server实例,必须配置它们使用不同的端口。
管理员可以直接telnet至此端口使用SHUTDOWN命令关闭此实例。不过,基于安全角度的考虑,这通常不允许远程进行.
其实server节点就是代表tomcat自己了。
Server的相关属性
* 注意:此处的server.xml中的Listener和部署描述符web.xml文件中的Listener并不是一回事。*
request.getScheme()
的返回值 request.isSecure()
的返回值 HTTP connector 示例
<Connector port="8080" protocol="HTTP/1.1" maxThreads="150" connectionTimeout="20000" redirectPort="8443" URIEncoding="UTF-8"/>
SSL connector 示例
<Connector port="8443" maxThreads="150" minSpareThreads="25" maxSpareThreads="75" enableLookups="false" acceptCount="100" debug="0" scheme="https" secure="true" clientAuth="false" sslProtocol="TLS" />
AJP connector 示例
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
可以通过Excutor为同一个Service的所有Connector配置一个共享线程池。
在多个Connector的状况下,这样处理非常有用,多个Connector共享一个线程池。
<Service name="Catalina">
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/>
<Connector executor="tomcatThreadPool" URIEncoding="UTF-8" connectionTimeout="20000" port="80" protocol="HTTP/1.1" redirectPort="8443"/>
</Service>
Excutor的详细参数配置请点击这里看官网文档
<Engine name="Catalina" defaultHost="localhost">
Engine是Servlet处理器的一个实例,即servlet引擎。
Engine容器中可以包含Realm、Host、Listener和Valve子容器。
<Engine defaultHost="localhost" name="Catalina">
<!--此处应该至少有一个名为localhost的Host节点-->
</Engine>
Host节点代表一个虚拟主机,类似于Nginx中的server指令。
<Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true" xmlValidation="false" xmlNamespaceAware="false">
<!-- host... -->
</Host>
org.apache.catalina.valves.ErrorReportValve
一个Context定义用于标识tomcat实例中的一个Web应用程序
<Host appBase="webapps" autoDeploy="true" name="localhost" unpackWARs="true">
<Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" pattern="%h %l %u %t "%r" %s %b" prefix="localhost_access_log." suffix=".txt" />
<Context docBase="web-1" path="/web-1" reloadable="true" source="org.eclipse.jst.jee.server:web-1" />
<Context docBase="ROOT" path=""></Context>
</Host>
定义被监控的程序清单。
比如web.xml被修改时应用会自动重新加载,就是因为web.xml文件在${CATALINA_HOME}/conf/context.xml文件中被标记为一个WatchedResource。
<Context docBase="web-1" path="/web-1" reloadable="true" source="org.eclipse.jst.jee.server:web-1">
<WatchedResource>WEB-INF/log4j.xml</WatchedResource>
</Context>
Realm和认证授权相关。
<Engine defaultHost="localhost" name="Catalina">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase" />
</Realm>
</Engine>
应用于整个服务器的JNDI映射,此可以避免每个Web应用程序都需要在各自的web.xml创建,这在web应用程序以WAR的形式存在时尤为有用。它通常可以包含三个子元素:
env-entry
resource-ref
resource-env-ref
Manger对象用于实现HTTP会话管理的功能
有关Value的详细配置请看官方文档
不知不觉就码了这么多字符…………以后有时间再写有关Valve的文章吧……