一、UML图:
1、Tomcat中Wrapper代表一个独立的servlet实例,StandardWrapper类是Wrapper接口的标准实现类,StandardWrapper类还实现了SelvletConfig接口,同时其从ContainerBase类继承过来,表示他是一个容器,只是他是最底层的容器,不能再含有任何的子容器了,且其父容器只能是context;
2、Valve接口代表阀门实现,StandardWrapperValve作为StandardWrapper的Basic Valve阀门的标准实现类,从ValveBase类继承过来;
3、StandardWrapper有一个管道Pipeline实例,pipeline中有一个Basic Valve阀门,就是StandardWrapperValve类的实例;
二、调用流程:
1、从上图的流程可以看到Wrapper.invoke方法会调用pipeline.invoke方法,pipeline.invoke循环调用管道里面所有的valve阀门,最后再调用Basic Valve阀门,而Wrapper的Basic Valve阀门是StandardWrapperValve类的实现;
2、StandardWrapper类中最重要的两个方法是allocate和loadServlet,实现流程如下:
3、StandardWrapperValve的invoke方法实现流程如下: