Tomcat阀即Value,是Tomcat的专有组件。顾名思义,它就好比是一道阀门,数据流在它的管道内流过,进行过滤处理。因此阀的作用是对Catalina容器接受到的HTTP进行过滤处理。

      Tomat阀基本原理
      据前文可知,Tomcat的value组件可以添加在Engine,Host,Context元素中。添加到其中的Value,用于对其所在的组件接收到的所有HTTP请求进行处理。例如,Engine中的Value会对Engine接收到的所有请求进行处理。
      添加Value组件前后,HTTP请求和响应的流程如下图:

   


 
      通常情况下,当一个用户请求HTTP连接时,会依次从Engine传递到Host,再传递到Context,然后依次返回响应。当为这些组件添加了Value组件以后,在经过每一个组件时,都会经过各自Value的处理。Engine中的Value会处理当前所有Context的请求,范围由大到小,而且,只有这些添加了Value的容器才会进行处理,Value可以添加也可以不添加。

      Tomcat阀家族关系
      根据Value的配置属性可知,添加一个Value需要指定className属性,即工作的Value类。Tomcat定义了Value的家族,其家族关系如图:

 


 
      从图中可以看出,核心是ValueBase,所有的Value类都继承自这个抽象类。该类实现了三个接口Contained,Value和MbeanRegistration。Contained表明了Value属于容器,Value是阀的最顶层接口,定义了Value必须实现的函数。

      Value实现类共有以下几种:

   信息记录:AccessLogValue,ExtendedAccessLogValue,FastCommonAccessLogValue, JDBCAccessLogValue,ErrorReportValue,                 RequestDumperValue;
   访问控制: RemoteAddrValue,RemoteHostValue,SingleSignOn;
   管理控制: PersistentValue

      除此之外,还有其他的一些实现,如Cluster的ReplicationValue。开发者也可以实现自己的Value类。这些Value类都重写了核心函数invoke(),分别用于实现不同的功能。具体的实现方法可以自行查阅源代码,这里不再继续作分析。


本篇文章来源于 IT技术 IT技术网

原文链接:http://www.chinait8.net/tech/javaopen/4093.html