Tomcat——Tomcat 服务器配置

2021-11-15  本文已影响0人  小波同学

前言

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

一、server.xml

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

1.1 Server

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

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

port : Tomcat 监听的关闭服务器的端口。
shutdown: 关闭服务器的指令字符串。
Server内嵌的子元素为 Listener、GlobalNamingResources、Service。

默认配置的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" />

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

<!--Global JNDI resources Documentation 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>

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

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+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接口。

如果不配置共享线程池,那么Catalina 各组件在用到线程池时会独立创建。

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

属性说明:

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 链接器

完整的配置如下:

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

1.5 Engine

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

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

属性说明:

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添加别名,我们可以实现同一个Host拥有多个网络名称,配置如下:

<Host name="www.web1.com" appBase="webapps" unpackWARs="true" autoDeploy="true"> 
    <Alias>www.web2.com</Alias> 
</Host>

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

1.7 Context

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

<Context docBase="myApp" path="/myApp">
    ....
</Context>

属性描述:

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

二、tomcat-users.xml

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

从早期的Tomcat版本开始,就提供了Web版的管理控制台,他们是两个独立的Web应用,位于webapps目录下。Tomcat 提供的管理应用有用于管理的Host的\host-manager 和用于管理Web应用的 manager。

2.1 host-manager

Tomcat启动之后,可以通过 http://localhost:8080/host-manager/html 访问该Web应用。 host-manager 默认添加了访问权限控制,当打开网址时,需要输入用户名和密码 (conf/tomcat-users.xml中配置) 。所以要想访问该页面,需要在conf/tomcat- users.xml 中配置,并分配对应的角色:

配置如下:

<role rolename="admin‐gui"/>
<role rolename="admin‐script"/>
<user username="yibo" password="yibo" roles="admin‐script,admin‐ gui"/>

登录:


界面:


2.2 manager

manager的访问地址为 http://localhost:8080/manager, 同样, manager也添加了页 面访问控制,因此我们需要为登录用户分配角色为:

<role rolename="manager‐gui"/>
<role rolename="manager‐script"/>
<user username="yibo" password="yibo" roles="admin‐script,admin‐ gui,manager‐gui,manager‐script"/>

Server Status


三、web.xml——web应用配置

web.xml 是web应用的描述文件, 它支持的元素及属性来自于Servlet 规范定义 。 在 Tomcat 中, Web 应用的描述信息包括 tomcat/conf/web.xml 中默认配置 以及 Web 应用 WEB-INF/web.xml 下的定制配置。

3.1 ServletContext 初始化参数

我们可以通过 添加ServletContext 初始化参数,它配置了一个键值对,这样我们可以在 应用程序中使用 javax.servlet.ServletContext.getInitParameter()方法获取参数。

<context‐param> 
    <param‐name>contextConfigLocation</param‐name> 
    <param‐value>classpath:applicationContext‐*.xml</param‐value> 
    <description>Spring Config File Location</description> 
</context‐param>

3.2 会话配置

用于配置Web应用会话,包括 超时时间、Cookie配置以及会话追踪模式。它将覆盖 server.xml 和 context.xml 中的配置。

<session‐config>
    <session‐timeout>30</session‐timeout> 
    <cookie‐config> 
        <name>JESSIONID</name> 
        <domain>www.itcast.cn</domain> 
        <path>/</path> 
        <comment>Session Cookie</comment> 
        <http‐only>true</http‐only> 
        <secure>false</secure> 
        <max‐age>3600</max‐age> 
    </cookie‐config> 
    <tracking‐mode>COOKIE</tracking‐mode> 
</session‐config>

配置解析:

3.3 Servlet配置

Servlet 的配置主要是两部分, servlet 和 servlet-mapping :

<servlet>
    <servlet‐name>myServlet</servlet‐name>
    <servlet‐class>cn.itcast.web.MyServlet</servlet‐class>
    <init‐param>
        <param‐name>fileName</param‐name>
        <param‐value>init.conf</param‐value>
    </init‐param>
    <load‐on‐startup>1</load‐on‐startup>
    <enabled>true</enabled>
</servlet>

<servlet‐mapping>
    <servlet‐name>myServlet</servlet‐name>
    <url‐pattern>*.do</url‐pattern>
    <url‐pattern>/myservet/*</url‐pattern>
</servlet‐mapping>

配置说明:

Servlet 中文件上传配置:

<servlet>
<servlet‐name>uploadServlet</servlet‐name>
<servlet‐class>cn.itcast.web.UploadServlet</servlet‐class>
<multipart‐config>
    <location>C://path</location>
    <max‐file‐size>10485760</max‐file‐size>
    <max‐request‐size>10485760</max‐request‐size>
    <file‐size‐threshold>0</file‐size‐threshold>
</multipart‐config>
</servlet>

配置说明:

3.4 Listener配置

Listener用于监听servlet中的事件,例如context、request、session对象的创建、修 改、删除,并触发响应事件。Listener是观察者模式的实现,在servlet中主要用于对 context、request、session对象的生命周期进行监控。在servlet2.5规范中共定义了8中 Listener。在启动时,ServletContextListener 的执行顺序与web.xml 中的配置顺序一 致, 停止时执行顺序相反。

<listener> 
    <listener‐ class>org.springframework.web.context.ContextLoaderListener</listener‐ class>
</listener>

3.5 Filter配置

filter 用于配置web应用过滤器, 用来过滤资源请求及响应。 经常用于认证、日志、加 密、数据转换等操作, 配置如下:

<filter>
    <filter‐name>myFilter</filter‐name>
    <filter‐class>cn.itcast.web.MyFilter</filter‐class>
    <async‐supported>true</async‐supported>
    <init‐param>
        <param‐name>language</param‐name>
        <param‐value>CN</param‐value>
    </init‐param>
</filter>

<filter‐mapping>
    <filter‐name>myFilter</filter‐name>
    <url‐pattern>/*</url‐pattern>
</filter‐mapping>

配置说明:

3.6 欢迎页面配置

welcome-file-list 用于指定web应用的欢迎文件列表。

<welcome‐file‐list>
    <welcome‐file>index.html</welcome‐file>
    <welcome‐file>index.htm</welcome‐file>
    <welcome‐file>index.jsp</welcome‐file>
</welcome‐file‐list>

尝试请求的顺序,从上到下。

3.7 错误页面配置

error-page 用于配置Web应用访问异常时定向到的页面,支持HTTP响应码和异常类两种形式。

<error‐page>
    <error‐code>404</error‐code>
    <location>/404.html</location>
</error‐page>

<error‐page>
    <error‐code>500</error‐code>
    <location>/500.html</location>
</error‐page>

<error‐page>
    <exception‐type>java.lang.Exception</exception‐type>
    <location>/error.jsp</location>
</error‐page>

四、JVM 配置

最常见的JVM配置当属内存分配,因为在绝大多数情况下,JVM默认分配的内存可能不能 够满足我们的需求,特别是在生产环境,此时需要手动修改Tomcat启动时的内存参数分配。

4.1 JVM内存模型图

4.2 JVM配置选项

set JAVA_OPTS=‐server ‐Xms2048m ‐Xmx2048m ‐XX:MetaspaceSize=256m ‐XX:MaxMetaspaceSize=256m ‐XX:SurvivorRatio=8
JAVA_OPTS="‐server ‐Xms1024m ‐Xmx2048m ‐XX:MetaspaceSize=256m ‐ XX:MaxMetaspaceSize=512m ‐XX:SurvivorRatio=8"

参数说明 :

配置之后, 重新启动Tomcat,访问 :

上一篇下一篇

猜你喜欢

热点阅读