tomcat的核心配置在conf/server.xml中。


<Server>   根元素

<Server>即Catalina Servlet组件。

<Server port="" shutdown="SHUTDOWN">

常用属性

  • Address—Tomcat监听shutdown命令的地址,默认为localhost
  • className—指定实现org.apache.catalina.Server接口的类,默认值为org.apache.catalina.core.StandardServer
  • port-Tomcat监听shutdown命令的端口。设置为-1,则禁止通过端口关闭Tomcat,同时shutdown.bat也不能使用
  • shutdown-通过指定的地址(Address)、端口(port)关闭Tomcat所需的字符串。

远程关闭tomcat示例

启用Telnet:(Telnet是windows自带的与其它主机通信的程序)

win+s,输入telnet,匹配“启用或关闭windows功能”,回车,勾选telent

命令行输入  telnet  启动Telnet

输入 telnet localhost 8005 连接到指定主机(此处为本地主机)

输入 SHUTDOWN 即可关闭Tomcat

输入 quit 可退出Telnet

<Server>有3个子元素:<Listener>、<GlobalNamingResources>、<Service>。


<Listener>

Listener即监听器,负责监听特定的事件,当特定事件触发时,Listener会捕捉到该事件,并做出相应处理。

Listener通常用在Tomcat的启动和关闭过程,可嵌在Server、Engine、Host、Context内。

  <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" />
<!--Initialize Jasper prior to webapps are loaded. Documentation at /docs/jasper-howto.html -->
<Listener className="org.apache.catalina.core.JasperListener" />
<!-- 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" />

常用属性:

  • className-指定org.apache.catalina.LifecycleListener接口的实现类

<GlobalNamingResources>

GlobalNamingResources用于配置JNDI,默认只加载conf/tomcat-users.xml中的用户配置。

  <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>包含<Executor>、<Connector>、<Engine>3个组件|子元素,组成一个完整的服务。一个<Server>可以包含多个<Service>。

  <Service name="Catalina">
    <Executor />
   <Connector />
   <Engine></Engine>
</Service>

常用属性:

  • name—<Service>的名字,需唯一
  • className—指定org.apache.catalina. Service接口的实现类,默认值为org.apache.catalina.core.StandardService

<Service>的子元素

(1)<Executor>

Executor即Service提供的线程池,供Service内各组件使用。

    <!--
<Executor name="tomcatThreadPool" namePrefix="catalina-exec-"
maxThreads="" minSpareThreads=""/>
-->

这个是tomcat提供的配置示例,并不是默认配置。

常见属性:

  • name-线程池的名称
  • className-指定实现org.apache.catalina. Executor接口的类,默认值为org.apache.catalina.core. StandardThreadExecutor
  • daemon-线程池内的线程是否为守护线程,默认值为true
  • threadPriority  线程池内线程的优先级,默认值5
  • namePrefix-线程名的前缀。线程名通常为namePrefix+ threadNumber
  • maxThreads-线程池内线程数上限,默认值200
  • minSpareThreads-线程池内线程数下限,默认值10
  • maxIdleTime-空闲线程的存活时间(单位:ms),默认值60000,即1min
  • maxQueueSize-线程池满的情况下会将请求放在队列中排队等待,此属性设置队列大小(可容纳的请求个数),默认值100,超过此值,将拒绝连接
  • prestartminSpareThreads-是否在Executor启动时,就生成minSpareThreads个线程。默认值false
  • threadRenewalDelay-重建线程的时间间隔。重建线程池内的线程时,为了避免线程同时重建,每隔threadRenewalDelay(单位:ms)重建一个线程。默认值1000,设置为负则不重建

<Executor>配置的线程池,是此<Service>中的所有<Host>(所有webapp)共享的。

(2)<Connector>

Connector负责与其它机器(客户端、其它服务器)的通信、建立连接。

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

<!--
<Connector executor="tomcatThreadPool"
port="" protocol="HTTP/1.1"
connectionTimeout=""
redirectPort="" />
-->

<!--
<Connector port="" protocol="org.apache.coyote.http11.Http11Protocol"
maxThreads="" SSLEnabled="true" scheme="https" secure="true"
clientAuth="false" sslProtocol="TLS" />
-->

<!--
<Connector protocol="AJP/1.3"
address="::1"
port=""
redirectPort="" />
-->

有两种:HTTP Connector和AJP Connector,分别是使用http协议建立http连接、使用ajp协议建立ajp连接。

HTTP Connector负责与客户端通信,AJP Connector负责与其它web容器(apache、其他tomcat)通信。

nginx+tomcat的架构模式使用http,用不上ajp,可以将ajp连接注释掉。

默认只配置了http请求,客户端以http://ip|host:8080/的方式请求tomcat。

如果要使用安全的http协议,需要取消https的注释,客户端就可以通过https://ip|host:8443/的方式请求tomcat,或者以https://ip|host:8080/来请求tomcat(https+8080),会自动重定向到8443端口(https)。https可以看做数据加密的http,使用的是BIO,安全但是效率低。

默认都是使用tomcat默认配置的线程池,可以用executor属性引用自己配置的线程池。

<Connector>的常用属性:

  • port-监听|接收请求的端口
  • protocol-使用的协议
  • connectionTimeout-连接超时时间,默认单位ms
  • redirectPort-如果对方以https向http的端口(默认8080)发起请求时,将请求重定向到https的端口(默认8443)
  • executor-指定线程池。也可以直接在<Connector>标签内设置maxThreads(默认200)、minSpareThreads(默认10)
  • acceptCount-Connector请求队列的上限,默认值100,超过100,将拒绝连接

(3)<Engine>

Engine负责处理所有的请求:接收来自Connector的请求,传给对应的Host处理,Host调用对应的Context(webapp)来处理,处理完将结果一级一级往上传。

一个<Service>内必须包含、且只能包含一个<Engine>,可以包含一个或多个<Connector>,这些<Connector>共用一个<Engine>。

    <!--
<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
--> <Engine name="Catalina" defaultHost="localhost"> <!--
<Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
-->

<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.authenticator.SingleSignOn" />
     -->     <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> </Engine>

<Engine>的常用属性:

  • name-Engine的名字
  • defaultHost-指定默认的Host。Engine接收来自Connector的请求,传给对应的Host来处理,如果找不到对应的host,就使用默认的host来处理。
  • className-指定实现org.apache.catalina. Engine接口的类,默认值为org.apache.catalina.core. StandardEngine
  • backgroundProcessorDelay-Engine及其部分子组件(Host、Context)调用backgroundProcessor方法的时间间隔,默认值10,负值表示不调用backgroundProcessor

  Tomcat启动后,Engine、Host、Context都会启动一个后台线程,定期调用backgroundProcessor方法

  backgroundProcessor方法主要用于重新加载Web应用程序的类文件和资源、扫描Session过期

  • jvmRoute-Tomcat集群节点的id,tomcat路由时使用此属性。

session共享

session原本是储存在tomcat服务器上的:

这次可能用tomcat1处理此用户的请求,此次的session数据保存在tomcat1上;

下次可能使用tomcat2处理此用户的请求,tomcat2在本机上找不到此用户的session数据(因为储存在tomcat1上),而这次产生的session数据保存在tomcat2上,tomcat1上的session数据没有更新。

数据不同步是分布式系统(集群、微服务)都会遇到的问题。

Tomcat集群,tomcat之间要共享session等数据,常见的做法有2种:

  • 使用redis,把要共享的数据都放到redis上(推荐)
  • 使用tomcat的路由|广播

tomcat路由

conf/server.xml中配置:

<Engine name="Catalina" defaultHost="localhost" jvmRoute="jvm1">
   <Cluster className="org.apache.catalina.ha.tcp.SimpleTcpCluster"/>
   <!--其它配置-->
</Engine>

指定jvmRoute,指定路由的实现类。

jvmRoute相当于组名,会把jvmRoute值相同的tomcat划为一组,比如要使用session,会在这组tomcat中找到SessionId为xxx的所有Session,组合成一个完整的session来使用。

属性名中有jvm,是因为tomcat是运行在jvm上的(依赖jdk),session等数据实际都是在jvm中,相当于是jvm的路由。

使用redis做数据共享

把session等数据保存到redis上,而非tomcat本地,要用时从redis上取出。

遍历一组tomcat节点很花时间,尤其是session钝化后需要从硬盘加载,很花时间,比起redis这种内存数据库,性能差太多。

不推荐使用tomcat路由,尽量使用redis做数据共享。


<Engine>常见的子元素

1、<Cluster />

tomcat路由时使用

2、<Realm>

Realm可以理解为包含用户、密码、角色的”数据库”。

Tomcat定义了多种Realm实现:JDBC Database Realm、DataSource Database Realm、JNDI Directory Realm、UserDatabase Realm等。

     <Realm className="org.apache.catalina.realm.LockOutRealm">
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>

默认只配置了UserDatabaseRealm,使用从conf/tomcat-users.xml中加载的tomcat用户信息。

3、<Host>

一个<Host>即一个虚拟主机,比如www.chy.com,需要在DNS上注册才可以正常使用(绑定ip),不然只能使用本地的localhost(对应ip127.0.0.1)。

一个tomcat上可以设置多个host,比如www.a.com、www.b.com都在一个tomcat上,对应一个ip,这是可以的。

可以配置多个<Host>,也可以在tomcat控制台 -> Host Manager中添加虚拟主机。

默认只设置了一个虚拟主机:

        <Host name="localhost"  appBase="webapps" unpackWARs="true" autoDeploy="true">
    <!--
    <Valve className="org.apache.catalina.authenticator.SingleSignOn" />
     -->     <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>

常用属性:

  • appBase-web项目的部署目录,默认值webapps
  • unpackWARs-如果appBase下有war包,是直接使用war包部署,还是先将war包解压,使用解压得到的文件夹来部署。

  unpack即不打包,默认为true——先解压,使用解压得到的文件夹来部署。

  • autoDeploy-是否开启自动部署,默认为true。

  开启自动部署的效果:tomcat会监听appBase下的文件|文件夹变化,放进来一个web项目时会自动部署,修改已部署的项目中的文件时会自动同步(重新部署)

  • startStopThreads-Tomcat启动|关闭时,此Host要使用几个线程来部署|卸载web应用。

  默认值1,部署|卸载webapp很慢,可以使用多个线程并行部署|卸载,减少tomcat的启动|关闭所需的时间。

  • name-Host的名字,即主机名,要对应域名

  比如主机名是localhost,那就只能以http://localhost:8080/来访问,因为域名都要转换为ip,所以可以在地址栏输入对应的ip。

  如果主机名是www.chy.com,那就要以http://www.chy.com:8080/来访问,需要在DNS上注册这个域名,将域名与ip绑定,才可以使用。

  当然本地模拟的话,在host文件中加一行:

192.168.1.6  www.chy.com

   把本机的ip加上去,开启tomcat,浏览器地址栏输入http://www.chy.com:8080也是可以的:

只能使用本机的实际ip,不能写127.0.01,因为127.0.0.1 <=> localhost是写死的,修改不了。

<Context>

一个<Context>即一个webapp的部署配置,一个<Host>中可以有多个<Context>。

<Context docBase="helloApp" path="/helloApp" debug="" reloadable="false"/>

常用属性:

  • docBase - 指定项目路径,相对于appBase,也可以使用绝对路径
  • path - 指定该webapp的映射地址

  比如映射为/test,就以http://ip|host:port/test来访问,/表示host的根目录。

  默认为/war包名,或/部署的文件夹名。

  • debug - 调试级别,值为0-9,数值越大,日志输出的调试信息越详细。
  • reloadable-是否监控此webapp的/WEB-INF/classes/和/WEB-INF/lib的变化,检测到变化时,会重新部署此webapp,同步改变。

  通常开发时设为true,方便调试;正式上线|发布则设为false,减轻服务器的负担、提高服务器性能。

  默认为false。

  • crossContext-是否将本webapp的session共享给同一host下的其它webapp,默认为false

  Context代表一个webapp,crossContext即数据穿过当前webapp,共享给同一host下的其它webapp。

tomcat默认没有设置<Context />,里面的属性均使用默认值。

<Valve>

Valve可以理解为Tomcat的拦截器,可以用于Tomcat的日志、权限等,可嵌在Engine、Host、Context内使用。

        <!--
<Valve className="org.apache.catalina.authenticator.SingleSignOn" />
--> <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下的其它webapp共享。

使用AccessLogValve记录此host处理的所有的请求的日志,每天的日志记录到一个新的文件中,

指定了日志文件目录、日志文件名的前缀、后缀,pattern指定日志格式。

<Value>同样可以使用debug属性设置调试级别。


session超时设置

conf/web.xml,搜索session:

  <!-- ==================== Default Session Configuration ================= -->
<!-- You can set the default session timeout (in minutes) for all newly -->
<!-- created sessions by modifying the value below. --> <session-config>
<session-timeout></session-timeout>
</session-config>

默认30min。


说明

Tomcat的操作手册即在webapps/docs,都是些html文档,可直接查看,也可启动tomcat,地址栏输入localhost:8080/docs查看。

tomcat的配置手册在webapps/docs/conf下。

也可以到tomcat官网查看文档。

最新文章

  1. PHP多条件搜索ShopNc实例
  2. js中的this指针(三)
  3. .NET 产品版权保护方案 (.NET源码加密保护) (转载)
  4. vsftp软链接ln遇到550错误
  5. 剑指OFFER之二进制中1的个数(九度OJ1513)
  6. 【App FrameWork】框架的页面布局
  7. jQuery 遍历同胞(siblings)
  8. jquery datepicker日期控件用法
  9. Iterator(迭代器模式)--(超市管理者)
  10. C#根据汉字生成拼音首字母全称
  11. 如何提取出ppt中的文字?
  12. ABP官方文档翻译 3.2 值对象
  13. ngix请求转发
  14. 查看CentOS版本
  15. windows安装oracle遇INS 30131 错误
  16. LR回放https协议脚本失败:[GENERAL_MSG_CAT_SSL_ERROR]connect to host &quot;XXX&quot; failed:[10054] Connection reset by peer [MsgId:MERR-27780]
  17. 【NOIP2018 Day1】题解
  18. Linux:使用rpcgen实现64位程序调用32位库函数
  19. [PHP] 6种负载均衡算法
  20. python 中为什么不需要重载

热门文章

  1. 机器学习环境配置系列四之theano
  2. Dynamics 365 CRM 在 Connected Field Service 中部署 IoT Central (三)- 发送 work order 和 booking 信息给 IoT Central
  3. a标签跳转小程序
  4. vscode python开发插件推荐
  5. windows配置Lua开发环境
  6. string method 字符串常用方法讲解
  7. linux man指令的详解
  8. Redis 通用方法 存储DataTable DataRow DataSet
  9. Web 开发工具类(5) | DateUtils
  10. win10下Java12环境变量设置