监听器需要配置的最重要的属性是className,该属性规定了监听器的具体实现类,该类必须实现了org.apache.catalina.LifecycleListener接口 。
下面依次介绍例子中配置的监听器:
- VersionLoggerListener:当Tomcat启动时,该监听器记录Tomcat、JAVA和操作系统的信息 。该监听器必须是配置的第一个监听器 。
- AprLifecycleListener:Tomcat启动时,检查APR库,如果存在则加载 。APR,即Apache Portable Runtime,是Apache可移植运行库,可以实现高可扩展性、高性能,以及与本地服务器技术更好的集成 。
- JasperListener:在Web应用启动之前初始化Jasper,Jasper是JSP引擎,把JVM不认识的JSP文件解析成java文件,然后编译成class文件供JVM使用 。
- JreMemoryLeakPreventionListener:与类加载器导致的内存泄露有关 。
- GlobalResourcesLifecycleListener:通过该监听器,初始化< GlobalNamingResources>标签中定义的全局JNDI资源;如果没有该监听器,任何全局资源都不能使用 。< GlobalNamingResources>将在后文介绍 。
- ThreadLocalLeakPreventionListener:当Web应用因thread-local导致的内存泄露而要停止时,该监听器会触发线程池中线程的更新 。当线程执行完任务被收回线程池时,活跃线程会一个一个的更新 。只有当Web应用(即Context元素)的renewThreadsWhenStoppingContext属性设置为true时,该监听器才有效 。
第一部分的例子中,Engine组件下定义了Realm组件:

文章插图
Realm,可以把它理解成“域”;Realm提供了一种用户密码与web应用的映射关系,从而达到角色安全管理的作用 。在本例中,Realm的配置使用name为UserDatabase的资源实现 。而该资源在Server元素中使用GlobalNamingResources配置:

文章插图
GlobalNamingResources元素定义了全局资源,通过配置可以看出,该配置是通过读取$TOMCAT_HOME/ conf/tomcat-users.xml实现的 。
关于Tomcat域管理的更多内容,可以参考:Realm域管理
3、Valve
在第一部分的例子中,Host元素内定义了Valve组件:

文章插图
单词Valve的意思是“阀门”,在Tomcat中代表了请求处理流水线上的一个组件;Valve可以与Tomcat的容器(Engine、Host或Context)关联 。
不同的Valve有不同的特性,下面介绍一下本例中出现的AccessLogValve 。
AccessLogValve的作用是通过日志记录其所在的容器中处理的所有请求,在本例中,Valve放在Host下,便可以记录该Host处理的所有请求 。AccessLogValve记录的日志就是访问日志,每天的请求会写到一个日志文件里 。AccessLogValve可以与Engine、Host或Context关联;在本例中,只有一个Engine,Engine下只有一个Host,Host下只有一个Context,因此AccessLogValve放在三个容器下的作用其实是类似的 。
本例的AccessLogValve属性的配置,使用的是默认的配置;下面介绍AccessLogValve中各个属性的作用:
(1)className:规定了Valve的类型,是最重要的属性;本例中,通过该属性规定了这是一个AccessLogValve 。
(2)directory:指定日志存储的位置,本例中,日志存储在$TOMCAT_HOME/logs目录下 。
(3)prefix:指定了日志文件的前缀 。
(4)suffix:指定了日志文件的后缀 。通过directory、prefix和suffix的配置,在$TOMCAT_HOME/logs目录下,可以看到如下所示的日志文件 。

文章插图
(5)pattern:指定记录日志的格式,本例中各项的含义如下:
- %h:远程主机名或IP地址;如果有nginx等反向代理服务器进行请求分发,该主机名/IP地址代表的是nginx,否则代表的是客户端 。后面远程的含义与之类似,不再解释 。
- %l:远程逻辑用户名,一律是”-”,可以忽略 。
- %u:授权的远程用户名,如果没有,则是”-” 。
- %t:访问的时间 。
- %r:请求的第一行,即请求方法(get/post等)、uri、及协议 。
- %s:响应状态,200,404等等 。
- %b:响应的数据量,不包括请求头,如果为0,则是””- 。

文章插图
pattern的配置中,除了上述各项,还有一个非常常用的选项是%D,含义是请求处理的时间(单位是毫秒),对于统计分析请求的处理速度帮助很大 。
推荐阅读
- 以MySQL为例,详解数据库索引原理及深度优化
- 详解 Linux 中的虚拟文件系统
- 常见交通标志详解
- 一文搞懂Nginx限流,原来这么简单
- 详解sqlplus设定行大小、页大小、字符列格式、数字列格式、清屏
- 2019年Facebook广告创建教程详解
- Linux Netcat 命令—超级网络工具详解
- 民事诉讼?流程及执行宝典 一文看懂,打官司全流程!
- 带你全面了解抖音星图平台!
- 一张图带你看透抖音养号技巧 制定一套流水化的运营流程
