概念:
-
<Listener>
是监听器标签,可以在特定事件发生时执行特定的操作,被监听的事件通常是Tomcat的启动和停止。
-
监听器可以在
<Server>
、 <Engine>
、 <Host>
或 <Context>
中。
- 监听器不允许内嵌其他组件。
- 监听器需要配置的最重要的属性是className,该属性规定了监听器的具体实现类,该类必须实现了org.apache.catalina.LifecycleListener接口。
接口 |
描述 |
VersionLoggerListener
|
当Tomcat启动时,该监听器记录Tomcat、Java和操作系统的信息,该监听器必须是配置的第一个监听器。 |
AprLifecycleListener
|
Tomcat启动时,检查APR库,如果存在则加载。APR,即Apache Portable Runtime,是Apache可移植运行库,可以实现高可扩展性、高性能,以及与本地服务器技术更好的集成。 |
JreMemoryLeakPreventionListener
|
与类加载器导致的内存泄露有关。 |
GlobalResourcesLifecycleListener
|
通过该监听器,初始化 < GlobalNamingResources>
标签中定义的全局JNDI资源,如果没有该监听器,任何全局资源都不能使用。 |
ThreadLocalLeakPreventionListener
|
当Web应用因thread-local导致的内存泄露而要停止时,该监听器会触发线程池中线程的更新。当线程执行完任务被收回线程池时,活跃线程会一个一个的更新。只有当Web应用(即Context元素)的 renewThreadsWhenStoppingContext
属性设置为 true
时,该监听器才有效。 |
JasperListener
|
在Web应用启动之前初始化Jasper,Jasper是JSP引擎,把JVM不认识的JSP文件解析成java文件,然后编译成class文件供JVM使用。 |
2. <GlobalNamingResources>
标签
概念: <GlobalNamingResources>
负责定义了全局资源,其中的 <Resource>
可以读取了某个配置文件的信息,本例中读取了 conf/tomcat-users.xml
文件的信息
配置:
<GlobalNamingResources>
<!-- 是一个可编辑的用户数据库的映射--》
<!-- <Realm>可以使用这个<Resource>进行安全验证用户 -->
<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>
复制代码
3. <Realm>
标签
概念:
-
<Realm>
是 <Engin>
中的一个子标签,它提供了一种用户密码与web应用的映射关系,从而达到角色安全管理的作用。
-
<Realm>
的配置使用 name
为 UserDatabase
的资源实现,该资源在 <Server>
元素中使用 <GlobalNamingResources>
配置。
配置:
<!-- 使用LockOutRealm实现可以阻止恶意攻击猜测账号密码 -->
<Realm className="org.apache.catalina.realm.LockOutRealm">
<!-- 这个realm领域指向了UserDatabase -->
<!-- 对此UserDatabase执行的任何编辑都可立即供Realm使用 -->
<Realm className="org.apache.catalina.realm.UserDatabaseRealm" resourceName="UserDatabase"/>
</Realm>
复制代码
属性 |
描述 |
className
|
安全管理的某种实现类 |
resourceName
|
这个实现是在 <GlobalNamingResources>
中配置的 |
4. <Valve>
标签
概念:
-
单词Valve的意思是"阀门",在Tomcat中代表了请求处理流水线上的一个组件,Valve可以与Tomcat的容器中的
<Engine>
、 <Host>
或 <Context>
关联。
-
不同的Valve有不同的特性,AccessLogValve的作用是通过日志记录其所在的容器中处理的所有请求,Valve放在
<Host>
下,便可以记录该Host处理的所有请求。
-
AccessLogValve
记录的日志就是访问日志,每天的请求会写到一个日志文件里。
配置:
<Valve
className="org.apache.catalina.valves.AccessLogValve"
directory="logs"
prefix="localhost_access_log"
suffix=".txt"
pattern="%h %l %u %t "%r" %s %b" />
复制代码
属性 |
描述 |
className
|
规定了Valve的类型为AccessLogValve。 |
directory
|
指定日志存储的位置为 %TOMCAT_HOME%/logs
目录下。 |
prefix
|
指定了日志文件的前缀为 localhost_access_log
。 |
suffix
|
指定了日志文件的后缀为 .txt
。 |
pattern
|
指定记录日志的格式为 %h %l %u %t "%r" %s %b
。 |
占位符 |
描述 |
%h
|
远程主机名或IP地址:如果有nginx等反向代理服务器进行请求分发,该主机名/IP地址代表的是nginx,否则代表的是客户端。 |
%l
|
远程逻辑用户名,一律是"-",可以忽略 |
%u
|
授权的远程用户名,如果没有,则是"-" |
%t
|
访问的时间 |
%r
|
请求的第一行,即请求方法(get/post等)、uri、及协议 |
%s
|
响应状态,200,404等等 |
%b
|
响应的数据量,不包括请求头,如果为0,则是"-" |
原文
https://juejin.im/post/5e9d0c23f265da47f144c14f