1 / 5
文档名称:

Tomcat源码分析容器处理链接之责任链模式.doc

格式:doc   大小:22KB   页数:5页
下载后只包含 1 个 DOC 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

Tomcat源码分析容器处理链接之责任链模式.doc

上传人:一花一世 2019/3/1 文件大小:22 KB

下载得到文件列表

Tomcat源码分析容器处理链接之责任链模式.doc

相关文档

文档介绍

文档介绍:Tomcat源码分析(四)容器处理链接之责任链模式目标:().invoke(request,response);调用容器的invoke后是怎么传递到servlet或者jsp的?StandardEngine没有invoke方法,它继承与ContainerBase(事实上所有的容器都继承于ContainerBase,在ContainerBase类有一些容器的公用方法和属性),抽象类ContainerBase的invoke方法如下:[java]protectedPipelinepipeline=newStandardPipeline(this);//标准管道的实现StandardPipelinepublicvoidinvoke(Requestrequest,Responseresponse)throwsIOException,ServletException{(request,response);//调用管道里的invoke}由代码可知ContainerBase的invoke方法是传递到Pipeline,调用了Pipeline的invoke方法。这里要说一下Pipeline这个类,这是一个管道类,每一个管道类Pipeline包含数个阀类,阀类是实现了Valve接口的类,Valve接口声明了invoke方法。管道和阀的概念跟servlet编程里面的过滤器机制非常像,管道就像过滤器链,阀就好比是过滤器。不过管道中还有一个基础阀的概念,所谓基础阀就是在管道中当管道把所有的普通阀都调用完成后再调用的。不管是普通阀还是基础阀,都实现了Value接口,也都继承于抽象类ValveBase。在tomcat中,当调用了管道的invoke方法,管道则会顺序调用它里面的阀的invoke方法。先看看管道StandardPipeline的invoke方法:[java]publicvoidinvoke(Requestrequest,Responseresponse)throwsIOException,ServletException{//InvokethefirstValveinthispipelineforthisrequest(newStandardPipelineValveContext()).invokeNext(request,response);}其中StandardPipelineValveContext是管道里的一个内部类,内部类的作用是帮助管道顺序调用阀Value的invoke方法,下面看它的定义代码:[java]protectedclassStandardPipelineValveContextimplementsValveContext{protectedintstage=0;publicStringgetInfo(){returninfo;}publicvoidinvokeNext(Requestrequest,Responseresponse)throwsIOException,ServletException{intsubscript=stage;//阀的访问变量stage=stage+1;//当前访问到第几个阀//InvoketherequestedValvef