教你如何配置Tomcat服务器

mac2024-05-12  31

Tomcat服务器的配置主要集中与tomcat/conf下的catalina.policy、catalina.properties、context.xml、server.xml、tomcat-user.xml、web.xml文件。

4.1 server.xml

server.xml是tomcat服务器的核心配置文件,包含了Tomcat的Servlet容器(Catalina)的所有配置。由于配置的属性特别多,我们在这里主要讲解其中的一部分重要配置。

4.1.1 Server

Server是server.xml的根元素,用于创建一个Server实例,默认使用的实现类是org.apache.catalina.core.StandardServer。

<Server port="8005" shutdown="SHUTDOWN"> ... </Server>

port:Tomcat监听的关闭服务器的端口。

shutdown:关闭服务器的指令字符串。

Server内嵌的子元素为Listener、GloableNamingResources、Service。 默认配置的5个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" />

GloableNamingResources中定义了全局命名服务:

<!--Global JNDI resourcesDocumentation 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>

4.1.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服务。

4.1.3 Executor

默认情况下,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"/>

属性说明:

属性含义name线程池名称,用于Connector中指定。namePrefix所创建的每个线程池的名称前缀,一个单独的线程名称为namePrefix+threadNumbermaxThreads池中最大线程数。minSpareThreads活跃线程数,也就是核心线程数,这些线程不会被销毁,会一直存在。maxIdleTime线程空闲时间,超过该时间后,空闲线程会被销毁,默认值为6000(1秒钟)单位毫秒maxQueueSize在被执行前最大线程排队数目,默认为Int的最大值,也就是广义的无限。除非特殊情况,这个值不需要修改,否则会有请求不会被处理的情况发生。prestartminSpareThreads启动线程池时是否启动minSpareThreads部分线程。默认值为false,即不启动。threadPriority线程池中线程优先级,默认值为5,值从1到10。className线程池实现类,未指定情况下,默认实现类为org.apache.catalina.core.StandardThreadExecutor.如果想使用自定义线程池首先需要实现org.apache.catalina.Executor接口。

使用JDK自带的Jconsole.exe程序查看: 如果不配置共享线程池,那么Catalina各组件在用到线程池时会独立创建。

4.1.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-constant约束,需要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" />

4.1.5 Engine

Engine作为Servlet引擎的顶级元素,内部可以嵌入:Cluster、Listener、Realm、Valve和Host。

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

属性说明:

1)name:用于指定Engine的名称,默认为Catalina。该名称会影响一部分Tomcat的存储路径(如临时文件)。

2)defaultHost:默认使用的虚拟主机名称,当客户端请求指向的主机无效时,将交由默认的虚拟主机处理,默认为localhost。

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

这个时候,我们就可以通过两个域名访问当前Host下的应用(需要确保DNS或hosts中添加了域名的映射配置)。

4.1.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 &quot;%r&quot; %s %b" /> </Host>

4.2 tomcat-users.xml

该配置文件中共,主要配置的是Tomcat的用户,角色等信息,用来控制Tomcat中manager,host-manager的访问权限。

最新回复(0)