Tomcat的配置文件server.xml总结

    科技2022-07-10  82

    tomcat的配置文件位于tomcat目录的conf文件夹下。/conf/server.xml 下面主要讲解server.xml配置文件的内容和配置方法。

    源码如下,已去除注释

    <?xml version="1.0" encoding="UTF-8"?> <Server port="8005" shutdown="SHUTDOWN"> <Listener className="org.apache.catalina.startup.VersionLoggerListener" /> <Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" /> <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"> <!-- 线程池默认没有配置 <Executor name="tomcatThreadPool" namePrefix="catalina-exec-" maxThreads="150" minSpareThreads="4"/> --> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> <Engine name="Catalina" defaultHost="localhost"> <Realm className="org.apache.catalina.realm.LockOutRealm"> <Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/> </Realm> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <Valve className="org.apache.catalina.valves.AccessLogValve" directory="logs" prefix="localhost_access_log" suffix=".txt" pattern="%h %l %u %t "%r" %s %b" /> </Host> </Engine> </Service> </Server>

    可以看到server.xml文件中的有效配置代码还不是很多的。下面逐一总结每个标签的意义。

    1. 文件格式说明

    <?xml version="1.0" encoding="UTF-8"?>

    2. Server是server.xml的根元素,配置tomcat容器

    <Server port="8005" shutdown="SHUTDOWN"> ... </Server> port : Tomcat 监听的关闭服务器的端口。shutdown: 关闭服务器的指令字符串。

    3. Listener 监听器配置

    监听器配置。 默认配置的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" />

    4. GlobalNamingResources全局命名配置

    <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>

    5. Service服务配置

    该元素用于创建 Service 实例,默认使用 org.apache.catalina.core.StandardService。

    <Service name="Catalina"> ... </Service>

    6. Executor线程池配置

    此处可以使用JDK自带的工具查看jvm的进程与线程信息,具体使用方法详见我得另一篇博客https://blog.csdn.net/weixin_43155866/article/details/108910600

    默认情况下,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 各组件在用到线程池时会独立创建。

    7. Connector连接器配置

    Connector 用于创建链接器实例。默认情况下,server.xml 配置了两个链接器,一个支持HTTP协议,一个支持AJP协议。因此大多数情况下,我们并不需要新增链接器配置,只是根据需要对已有链接器进行优化。

    <!--基于HTTP的--> <Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" /> <!-- 基于AJP的 --> <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" /> port: 端口号,Connector 用于创建服务端Socket 并进行监听, 以等待客户端请求链接。如果该属性设置为0,Tomcat将会随机选择一个可用的端口号给当前Connector使用。protocol : 当前Connector 支持的访问协议。 默认为 HTTP/1.1 , 并采用自动切换机制选择一个基于 JAVA NIO 的链接器或者基于本地APR的链接器(根据本地是否含有Tomcat的本地库判定)。connectionTimeOut : Connector 接收链接后的等待超时时间, 单位为 毫秒。 -1 表示不超时。redirectPort:当前Connector 不支持SSL请求, 接收到了一个请求, 并且也符合security-constraint 约束, 需要SSL传输,Catalina自动将请求重定向到指定的端口。executor : 指定共享线程池的名称, 也可以通过maxThreads、minSpareThreads等属性配置内部线程池。URIEncoding : 用于指定编码URI的字符编码, Tomcat8.x版本默认的编码为 UTF-8 ,Tomcat7.x版本默认为ISO-8859-1。

    tomcat 的最大连接数设置

    https://www.cnblogs.com/wx170119/p/10456179.html

    maxThreads:tomcat起动的最大线程数,即同时处理的任务个数,默认值为200acceptCount:当tomcat起动的线程数达到最大时,接受排队的请求个数,默认值为100maxConnections:在连接数达到了maxConenctions之后,tomcat仍会保持住连接,但是不处理,等待其它请求处理完毕之后才会处理这个请求。

    因此tomcat的最大连接数就等于: maxConnections这个值加上acceptCount这个值

    8. Engine引擎

    <Engine name="Catalina" defaultHost="localhost"> ... </Engine>

    1) name: 用于指定Engine 的名称, 默认为Catalina 。该名称会影响一部分Tomcat的 存储路径(如临时文件)。 2) defaultHost : 默认使用的虚拟主机名称, 当客户端请求指向的主机无效时, 将交 由默认的虚拟主机处理, 默认为localhost。

    defaultHost指向默认主机,在其内部配置

    9. Host

    Host 元素用于配置一个虚拟主机

    <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> ... </Host>

    主机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中添 加了域名的映射配置)

    Context标签

    Context 用于配置一个Web应用,默认的配置如下:

    <Context docBase="myApp" path="/myApp"> .... </Context> <Host name="localhost" appBase="webapps" unpackWARs="true" autoDeploy="true"> <!-- 配置context --> <Context docBase="myApp" 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>

    1) docBase:Web应用目录或者War包的部署路径。可以是绝对路径,也可以是相对于 Host appBase的相对路径。

    2) path:Web应用的Context 路径。如果我们Host名为localhost, 则该web应用访问 的根路径为: http://localhost:8080/myApp。

    Processed: 0.020, SQL: 8