在前面我们已经逐个分析了Tomcat的后端核心容器组件和其配置,在后端核心容器组件的流转中,Valve和Listener扮演者“加工过滤”的作用,其和后端核心容器组件的的pipeline相得益彰,发挥着非常大的作用。
本系列主要讲解Valve,本文首先先来看看Valve的分类
先来看看一张图:
如上图,我们可以给Valve分个类:
1.Basic Valve
核心容器组件的Valve,如StandardEngineValve,StandardHostValve,StandardContextValve,StandardWrapperValve。。
之所以叫这些Valve为Basic Valve,是因为这些Valve都是包裹这容器核心组件执行的,其调用核心容器组件都是在这些Valve中进行的,
我们来看一个StardEngineValve的源码:
invoke方法是借助于StandardEngine的PipeLine继续向下一步去执行,而StandardEngineValve的作用就是从request找到host,然后继续执行;
对于其它的Basic Valve也是类似;
我们可以从源码中得出结论,Basic Valve是Tomcat容器后端组件不可拆卸的一部分,也是重要的组成环节;
2.Tomcat 内置Valve与分类
Tomcat的内置Valve,如上面的图是Tomcat提供的一系列的功能Valve,可以灵活的配置在后端容器组件中;
如我们前面讲过的AccessLog,其访问日志就是一个Valve:
如上,配置在了Host中,也就是说当前虚拟主机如果有请求访问,其中的所有应用都会被记录;
当然,你觉得范围过大,你也可以配置在Context级别中,只对1个应用起作用;
而这就是其Tomcat内置Valve的灵活性了;
Tomcat基于一些相对常用功能,搞出了一系列的Valve,如下:
后续,我们会分成4节,逐一的源码分析这些Valve;
总之,Tomcat的内置Valve是Tomcat预先定义好的一些常用功能,可以灵活的配置在Tomcat后端容器组件的各个级别中;
3.自定义Valve
内置Valve毕竟还是不够的,依据Tomcat内置Valve的机制,可以自定义如下的:
RequestDumperValve是对于请求进行dump的Valve,自己基于业务逻辑进行定义的,这个前面有一篇专门讲过这块,这里就不再花精力缀余;
后面几篇文章,我们继续逐个分析Tomcat的内置Valve,敬请期待!