0
点赞
收藏
分享

微信扫一扫

Tomcat服务器Day04-Tomcat服务器配置

七公子706 2022-02-07 阅读 42



Tomcat服务器配置


基本概念server.xml
  • Server
  • Service
  • Executor
  • Connector
  • Engine
  • Host
  • Context
  • tomcat-users.xml


基本概念

  • Tomcat的服务器配置主要集中于tomcat/conf下的文件:

  • catalina.policy
  • catalina.properties
  • context.xml
  • server.xml
  • tomcat-user.xml
  • web.xml

server.xml

  • server.xmlTomcat的核心配置文件,包含了TomcatServlet容器Catalina的所有配置

Server

  • Serverserver.xml的根元素,用于创建一个Server实例,默认使用的实现类是org.apache.catalina.core.standardServer
<server port="8005" shutdown="SHUTDOWN">
...
</server>

  • port: Tomcat监听关闭服务的接口
  • shutdown: 关闭服务器的指令字符串
  • Server中内嵌的子元素为Listener, GlobalNamingResources, Service
  • Server中默认配置5个监听器Listener:

<!-- 用于以日志形式输出服务器,操作系统,JVM的版本信息 -->
<Listener className="org.apache.catalina.startup.VersionLoggerListener"/>

<!-- 用于服务器启动加载和服务器停止销毁APR,如果找不到APR库则会输出日志,并不会影响Tomcat启动 -->
<Listener className="org.apache.catalina.core.AprLifecycleListener" SSLEngine="on"/>

<!-- 用于避免JRE内存泄漏问题 -->
<Listner className="org.apache.catalina.core.JreMemoryLeakPreventionListener"/>

<!-- 用于服务器启动加载服务器停止销毁全局资源服务 -->
<Listener className="org.apache.catalina.GlobalResouresLifecycleListener"/>

<!-- 用于在Context停止时重建Executor中的线程,以避免ThreadLocal中的内存泄漏 -->
<Listener className="org.apache.catalina.ThreadLocalLeakPreventionListener"/>
  • GlobalNamingResources中定义了全局命名服务:
<!-- 全局JNDI资源-->
<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


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

Executor


  • 默认情况下 ,Tomcat没有添加共享线程池的配置,这时Catalina各组件在用到线程池时会独自创建
  • 可以使用如下配置,在Service中添加一个线程池配置:

<Executor name="tomcatThreadPool"
namePrefix="catalina-exec-"
maxThreads="150"
maxSpareThreads="4"
maxIdleTime="60000"
maxQueueSize="Integer.MAX_VALUE"
prestartminSpareThreads="false"
threadPriority="5"
className="org.apache.catalina.core.StandardThreadExecutor"
/>

属性

描述

name

线程池名称,用于在Connector指定连接的线程池

namePrefix

创建的线程池中的线程的前缀: namePrefix + threadNumber

maxThreads

线程池中最大的线程数

minSpareThreads

活跃的核心线程数. 这些线程不会被销毁,会一直存在

maxIdleTime

线程空闲时间,超时后,空闲的线程会被销毁,默认空闲时间为60000(1分钟)

maxQueueSize

执行前最大的线程排队数,默认为Int的最大值,即广义的无限大

一般情况下,这个值不需要更改,否则会有请求不被处理的情况发生

prestartminSpareThreads

启动线程池时是否预启动minSpareThreads活跃线程,默认为false,不启动

threadPriority

线程池中的线程优先级,值为1-10,默认值为5

className

线程池的实现类

默认实现类为org.apache.catalina.core.StandardThreadExecutor

如果需要自定义线程池实现,首先需要实现org.apache.catalina.Executor接口

Connector


  • Connector用于创建连接器实例
  • 默认情况下 ,server.xml配置了一个支持HTTP协议的连接器
  • 可以根据需要配置一个支持AJP协议的连接器

<Connector port="8080" protocol="HTTP/1.1" connectionTimeout="20000" redirectPort="8443" />

  • port: 连接器的端口号

  • 用于Connector创建服务端Socket并进行监听,以等待客户端请求连接
  • 如果端口号设置为0. Tomcat 会随机选择一个可用的端口号给Connector使用

  • protocol: 连接器的访问协议

  • 默认为HTTP/1.1
  • 采用自动切换机制选择一个基于Java NIO的连接器或者基于APR的连接器,根据Tomcat本地是否含有APR库来决定
  • 如果需要明确指定协议的机制,不需要自动切换机制,可以通过自定义以下实现类:

  • HTTP协议:

  • 非阻塞的Java NIO连接器 : org.apache.coyote.http11.Http11NioProtocol
  • 非阻塞的Java NIO2连接器 : org.apache.coyote.http11.Http11Nio2Protocol
  • APR连接器 : org.apache.coyote.http11.Http11AprProtocol

  • AJP协议:

  • 非阻塞的Java NIO连接器 : org.apache.coyote.ajp.AjpNioProtocol
  • 非阻塞的Java NIO2连接器 : org.apache.coyote.ajp.AjpNio2Protocol
  • APR连接器 : org.apache.coyote.ajp.AjpAprProtocol



  • connectionTimeOut: Connector接收请求连接的等待超时时间,单位为毫秒, -1表示不超时
  • redirectPort:

  • Connector不支持HTTPS协议的SSL证书
  • 当接收到一个请求,符合security-constraint约束,需要SSL传输时 ,Catalinta会自动将请求重定向到指定的端口

  • executor: 指定共享线程池的名称
  • 也可以通过maxThreads,minSpareThreads等属性配置内部线程池
  • URIEncoding: 指定编码URI的字符编码

  • Tomcat 8.x版本默认的编码是UTF-8
  • Tomcat 7.x版本默认的编码是ISO8859-1


<Connector port="8080"
protocol="HTTP/1.1"
executor="tomcatThreadPool"
maxThreads="150"
minSpareThreads="4"
acceptCount="150"
maxConnections="150"
connectionTimeout="20000"
compression="on"
compressionMinSize="1024"
disableUploadTime="true"
redirectPort="8048"
URIEncoding="UTF-8"
/>

Engine

  • Engine作为Servlet引擎的顶级元素,内部可以嵌入:

  • Cluster
  • Listener
  • Realm
  • Valve
  • Host

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

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

Host

  • Host用于配置一个虚拟主机,内部可以嵌入:

  • Alias
  • Cluster
  • Listener
  • Valve
  • Realm
  • Context

  • 如果在Engine中配置了Realm, 那么该Realm配置将在当前Engine下的所有Host中共享
  • 如果在Host中配置了Realm, 则在当前Host下的所有Context中共享
  • Context中的Realm的优先级 > HostRealm的优先级 > EngineRealm的优先级

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

  • name: 当前Host通用的网络名称,必须与DNS服务器上的注册信息一致. Engine中的Host必须存在一个名称与Engine中设置的defaultHost值一致的Host
  • appBase: 当前Host的应用基础目录. 当前Host下部署的Web应用均在该目录下 ,appBase的值可以是绝对路径,也可以是相对路径.默认为相对路径webapps
  • unpackWARs: 配置为true,Host启动时会将appBase目录下的war包解压为目录. 配置为false,Host将直接从war包启动
  • autoDeploy: 配置Tomcat是否的运行时定时检测并自动部署新增或变更的Web应用
  • 通过给Host添加别名,可以实现同一个Host拥有多个网络名称:

<Host name="www.tomcat.com" appBase="webapps" unpackWARs="true" autoDeploy="true">
<Alias>www.tomcats.com</Alias>
</Host>
  • 只要确保hosts文件或者DNS中添加了域名的映射配置,就可以访问当前Host配置的基础目录下的应用
Context
  • Context用于配置一个Web应用,内部可以嵌入:

  • CookieProcessor
  • Loader
  • Manager
  • Realm
  • Resources
  • WatchedResources
  • JarScanner
  • Valve

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

  • docBase: Web应用目录或者是war包部署目录. 可以是绝对路径,也可以是相对于Host appBase的相对路径
  • path: Web应用的Context路径. 如果Host名称为localhost, 则对应的Web应用的Context访问路径为​​http://localhost:8080/app​​

tomcat-users.xml

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


举报

相关推荐

0 条评论