ContainerBase对Pipeline接口的实现完全依赖于其内部的一个Pipeline类型的成员pipeline(实现类为StandardPipeline)。
在Tomcat的doc中这样介绍Pipeline接口:该接口的invoke()方法被调用时,将会引发一系列Value对象的序列调用。要求一个Pipeline中的存在一个Value对象(多为最后一个Value对象)完成对request的处理,并生成相应的response,而不能试图将Request继续传递给其它Value对象(这个Value对象被称为Basic)。通常,每个Container对象都持有一个Pipline类型(实际上为StandardPipeline)的成员。在Pipeline的doc中,方法getBasic,getFirst两个方法的Method Summary完全一样,Apache的牛人们也不能免俗啊。
StandardPipeline除实现Pipeline接口外,也实现了Lifecycle接口。这个类的start和stop方法,首先检查是否已经被start或stop,如果是则会抛出一个LifecycleException的异常,否则便fire和生命期改变的相关事件,并调用其内部valve对象(如果该valve对象也实现了Lifecycle接口)的start和stop方法。addValve方法用来向StandardPipeline中加入Valve对象,新加入的Value对象被放在一个叫做Basic的特殊Valve(就是一个Pipeline的最后一个Valve)的前面,如果在添加Valve的时候该StandardPipeline已经处于start状态,则会进行一些注册(调用apache commons库的一个类,完全没有看懂这个地方是什么作用>_<)