0%

tomcat之server配置文件

server.xml配置文件

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
<Server port="8005" shutdown="SHUTDOWN">
<Listener className="org.apache.catalina.startup.VersionLoggerListener" />
<!-- Security listener. Documentation at /docs/config/listeners.html
<Listener className="org.apache.catalina.security.SecurityListener" />
-->
<!--APR library loader. Documentation at /docs/apr.html -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on" />
<!-- Prevent memory leaks due to use of particular java/javax APIs-->
<Listener className="org.apache.catalina.core.JreMemoryLeakPreventionListener" />
<Listener className="org.apache.catalina.mbeans.GlobalResourcesLifecycleListener" />
<Listener className="org.apache.catalina.core.ThreadLocalLeakPreventionListener" />
<Service name="Catalina">
<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443"/>
<Engine name="Catalina" defaultHost="localhost">
<Host name="localhost" appBase="webapps"
unpackWARs="true" autoDeploy="true">
<Context>
</Context>
</Host>
</Engine>
</Service>
</Server>

Server节点

Server节点是server.xml的根元素,用于创建Server实例,代表整个Servlet容器组件,是整个Tomcat启动的入口,可包含一个或多个Service元素

属性

  • port 端口

  • shutdown 关闭服务器的指令字符串,在对应端口输入该命令就会关闭tomcat服务器

    1
    2
    telnet 127.0.0.1 8005
    >SHUTDOWN

子节点

内嵌子元素为Service、GlobalNamingResources和Listener

GlobalNamingResources定义了全局的命名服务

Listener用于为Server添加生命周期监听器

Service节点

用于创建Service实例,用于将多个Connector与一个Engine组合成一个服务,可配置多个

默认情况下,tomcat指定了Service的名称,值为Catalina

子节点

子节点为Listener、Executor、Connector、Engine

Executor用于配置Service共享线程池

Connector用于配置Service包含的链接器

Engine用于配置Service中链接器对应的Servlet容器引擎

Executor节点

文档为tomcat下webapps/docs/config/executor.html

默认没有配置共享线程池

1
2
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="150" minSpareThreads="4"/>

属性

  • name Executor名称,唯一
  • namePrefix 创建的线程名称前缀
  • maxThreads 此线程池中活动线程的最大数目,默认200
  • minSpareThreads 此线程池的最小数量,默认25
  • maxIdleTime 空闲线程关闭的毫秒数,默认60000
  • maxQueueSize 队列最大可排队数量,默认Integer.MAX_VALUE
  • prestartminSpareThreads 启动Executor时是否启动minSpareThreads,默认false

注意配置后要在Connector节点中使用对应的executor才会生效

1
2
3
4
<Connector executor="tomcatThreadPool" port="8082" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" URIEncoding="UTF-8" relaxedPathChars="|{}[],%"
relaxedQueryChars="|{}[],%"/>

Connector节点

文档为tomcat下webapps/docs/config/http.html

默认配置了两个连接器,一个支持HTTP协议,一个支持AJP协议,用于接收外部请求,并将其交给内部的Engine处理

1
2
3
4
5
6
<!-- 客户端可以使用http协议访问8080端口,如果是https则重定向到8443端口 -->
<Connector port="8000" protocol="HTTP/1.1"
connectionTimeout="20000"
redirectPort="8443" />
<!-- 客户端可以使用ajp协议访问8009端口 -->
<Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />

属性

公共属性
  • allowTrace 启用或禁用TRACE HTTP方法
  • asyncTimeout 异步请求的默认超时时间,单位毫秒,默认30000
  • maxHeaderCount 请求头的最大数量,超过则会被拒绝,默认100,小于0表示没有限制
  • maxParameterCount 参数键值对最大数量,超过则被忽略,默认10000,小于0表示没有限制
  • maxPostSize post请求form表单在url中最大字节数,默认2M,小于0表示没有限制
  • maxSavePostSize post请求form表单,缓存的最大字节数,默认4K,-1表示没有限制
  • port 端口号
  • protocol 当前Connector支持的访问协议
  • connectionTimeout 等待超时时间,-1表示不超时
  • redirectPort 如果当前Connector支持non-ssl请求,并且接收到有个请求,符合约束,需要SSL传输,Catalina自动将请求重定向到此处指定的端口
  • URIEncoding URI编码 默认为ISO-8859-1
  • useBodyEncodingForURI 使用contentType中设置的编码,而不使用URIEncoding
  • enableLookups true表示调用request.getRemoteHost()将执行DNS查询 false直接返回IP
Standard实现的属性
  • acceptCount 最大接收连接数(当所有可以使用的线程数都被使用时,可以放入处理队列中的请求数),用于控制Socket的排队连接的最大个数,大于acceptCount时,将拒绝新的连接请求,默认100
  • acceptorThreadCount 请求连接线程数,默认1
  • executor 线程池,指定线程池名称
  • compression GZIP压缩,compression设置为on表示开启压缩
  • compressableMimeType表示指定哪些类型的响应可以压缩,默认text/html,text/xml,text/plain,text/css,text/javascript,application/javascript,application/json,application/xml
  • compressionMinSize指定响应内容大小的限制,当响应大于该值时,才会压缩,默认2048
  • noCompressionUserAgent用于指定正则表达式,对于user-agent头信息匹配的HTTP请求不进行压缩
  • maxConnections 在给定时间接收和处理的最大连接数
  • maxThreads 最大请求处理线程数,默认200
  • minSpareThreads 线程的最小数量

Engine节点

为特定的Service组件处理所有用户请求,其默认的Host是localhost,一个Service中只能有一个Engine

1
<Engine name="Catalina" defaultHost="localhost">

子节点

Cluster、Listener、Realm、Value、Host

属性

  • name 指定Engine的名称,默认为Catalina
  • defaultHost 默认使用的虚拟主机名称,当客户端请求指向的主机无效时,将交由默认虚拟主机处理。默认localhost
  • jvmRoute 用于负载均衡场景下启用粘性会话,使得将来自于某个特定会话的请求定向到同一个Tomcat实例

Host节点

用于配置一个虚拟主机,一个Host代表一个Web站点,为特定的虚拟主机处理所有用户请求

1
2
<Host name="localhost"  appBase="webapps"
unpackWARs="true" autoDeploy="true">

内部配置的Value,就是虚拟主机内部的一个个阀门,整个请求在经过Value时,会触发其内部定义的逻辑

子节点

Alias、Cluster、Listener、Value、Realm、Context

属性

  • name 当前Host通用的网络名称,必须与DNS服务器上的注册信息一致
  • appBase 当前Host的应用基础目录,默认为webapps
  • unpackWARs true表示Host在启动时会将appBase目录下的WAR包解压成目录 false直接从WAR文件中启动web应用
  • autoDeploy true表示tomcat将定期检查appBase和xmlBase目录,部署新发现的web应用或者context描述文件

Context节点

用于配置web应用,相当于web站点中的虚拟子目录,为特定的Web应用处理所有用户请求

子节点

CookieProcessor、Loader、Manager、Realm、Resources、WatchResource、JarScanner、Value

属性

  • docBase web应用目录或者WAR包的部署路径
  • path web应用的context路径
  • className 指定实现Context组件的java类的名字,该类需要实现org.apache.catalina.Context接口,默认为org.apache.catalina.core.StandardContext
  • reloadable 如果为true,则Tomcat服务器在运行时会监视WEB-INF/classes和WEB-INF/lib下class文件的改动,以及Web应用中WEB-INF/web.xml文件的改动,如果改动,服务器自动重新加载web应用,默认为false
1
2
<!-- 将d:\myweb目录映射到Web站点的/test虚拟子目录上 -->
<Context path="/test" docBase="d:\myweb">

CookieProcessor节点

用于将HTTP请求中的cookie头信息转为javax.servlet.http.Cookie对象,或者将Cookie对象转为HTTP响应中的Cookie头信息

Loader节点

用于配置当前Context对应的web应用的类加载器,默认为org.apache.catalina.loader.WebappLoader

属性
  • delegate 控制类加载顺序 true表示采用标准的java委派模式加载类,先尝试从父类加载器加载,然后才会从web应用的类加载器加载 false先从web应用的类加载器加载,然后从父类加载器加载 默认false
  • reloadable true catalina监控WEB-INF/classes和WEB-INF/lib的变更,自动重新加载web应用
  • loaderClass 指定Loader创建的web应用类加载器的具体实现

Manager节点

用于配置当前web应用的会话管理器

tomcat提供了独立管理和集群管理两种方式

独立会话管理器
  • org.apache.catalina.session.StandardManager 简单的会话存储,在Tomcat正常停止时,会将所有会话串行化到一个文件(默认SESSION.ser),在Tomcat启动时,加载有效会话

  • org.apache.catalina.session.PersistentManager 在每次会话过期检测之后,将超过配置数量的活跃会话以及空闲会话持久化到文件或者数据库,即使tomcat强制关闭,也只会丢失没有持久化的会话

    包含两种会话持久化存储方案

    • org.apache.catalina.session.FileStore

      1
      2
      3
      4
      5
      6
      7
      8
      9
      <Context docBase="myApp" path="/myApp">
      <Manager className="org.apache.catalina.session.PersistentManager"
      saveOnRestart="true"
      maxActiveSession="-1"
      minIdleSwap="30"
      maxIdleBackup="0">
      <Store className="org.apache.catalina.session.FileStore" directory="sessions"></Store>
      </Manager>
      </Context>
  • org.apache.catalina.session.JDBCStore

    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    <Context docBase="myApp" path="/myApp">
    <Manager className="org.apache.catalina.session.PersistentManager"
    saveOnRestart="true"
    maxActiveSession="-1"
    minIdleSwap="30"
    maxIdleBackup="0">
    <Store className="org.apache.catalina.session.JDBCStore"
    driverName="com.mysql.jdbc.Driver"
    connectionURL="jdbc:mysql://localhost:3306/demo?user=&password="
    sessionTable="session_table"
    sessionIdCol="id"
    sessionDataCol="data"
    sessionValidCol="valid"
    sessionMaxInactiveCol=""
    sessionLastAccessedCol=""
    sessionAppCol=""></Store>
    </Manager>
    </Context>

欢迎关注我的其它发布渠道