Tomcat源码分析(4)容器处理链接之责任链模式

Tomcat源码分析(4)容器处理链接之责任链模式

ID:41127496

大小:30.50 KB

页数:5页

时间:2019-08-17

Tomcat源码分析(4)容器处理链接之责任链模式_第1页
Tomcat源码分析(4)容器处理链接之责任链模式_第2页
Tomcat源码分析(4)容器处理链接之责任链模式_第3页
Tomcat源码分析(4)容器处理链接之责任链模式_第4页
Tomcat源码分析(4)容器处理链接之责任链模式_第5页
资源描述:

《Tomcat源码分析(4)容器处理链接之责任链模式》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库

1、智慧人大有能力    诚信・正直・创新有知识的人力上加力Tomcat源码分析(四)容器处理链接之责任链模式目标:在这篇文章希望搞明白connector.getContainer().invoke(request,response);调用容器的invoke后是怎么传递到servlet或者jsp的?StandardEngine没有invoke方法,它继承与ContainerBase(事实上所有的容器都继承于ContainerBase,在ContainerBase类有一些容器的公用方法和属性),抽象类ContainerBase的invoke方法如下:[java]prot

2、ectedPipelinepipeline=newStandardPipeline(this);//标准管道的实现StandardPipelinepublicvoidinvoke(Requestrequest,Responseresponse)throwsIOException,ServletException{pipeline.invoke(request,response);//调用管道里的invoke}由代码可知ContainerBase的invoke方法是传递到Pipeline,调用了Pipeline的invoke方法。这里要说一下Pipeline这个类,

3、这是一个管道类,每一个管道类Pipeline包含数个阀类,阀类是实现了Valve接口的类,Valve接口声明了invoke方法。管道和阀的概念跟servlet编程里面的过滤器机制非常像,管道就像过滤器链,阀就好比是过滤器。不过管道中还有一个基础阀的概念,所谓基础阀就是在管道中当管道把所有的普通阀都调用完成后再调用的。不管是普通阀还是基础阀,都实现了Value接口,也都继承于抽象类ValveBase。在tomcat中,当调用了管道的invoke方法,管道则会顺序调用它里面的阀的invoke方法。先看看管道StandardPipeline的invoke方法:[java

4、]publicvoidinvoke(Requestrequest,Responseresponse)throwsIOException,ServletException{//InvokethefirstValveinthispipelineforthisrequest(newStandardPipelineValveContext()).invokeNext(request,response);}其中StandardPipelineValveContext是管道里的一个内部类,内部类的作用是帮助管道顺序调用阀Value的invoke方法,下面看它的定义代码:[ja

5、va]protectedclassStandardPipelineValveContextimplementsValveContext{protectedintstage=0;publicStringgetInfo(){returninfo;}HansonTel:15360452825.Mail:hansonjan@163.com智慧人大有能力    诚信・正直・创新有知识的人力上加力publicvoidinvokeNext(Requestrequest,Responseresponse)throwsIOException,ServletException{int

6、subscript=stage;//阀的访问变量stage=stage+1;//当前访问到第几个阀//InvoketherequestedValveforthecurrentrequestthreadif(subscript

7、管道的基础阀的invoke阀}else{thrownewServletException(sm.getString("standardPipeline.noValve"));}}}内部类StandardPipelineValveContext的invokeNext方法通过使用局部变量来访问下一个管道数组,管道类的变量stage保存当前访问到第几个阀,valves保存管道的所有阀,在调用普通阀的invoke方法是,会把内部类StandardPipelineValveContext本身传进去,这样在普通阀中就能调用invokeNext方法以便访问下一个阀的invoke

8、方法,下面

当前文档最多预览五页,下载文档查看全文

此文档下载收益归作者所有

当前文档最多预览五页,下载文档查看全文
温馨提示:
1. 部分包含数学公式或PPT动画的文件,查看预览时可能会显示错乱或异常,文件下载后无此问题,请放心下载。
2. 本文档由用户上传,版权归属用户,天天文库负责整理代发布。如果您对本文档版权有争议请及时联系客服。
3. 下载前请仔细阅读文档内容,确认文档内容符合您的需求后进行下载,若出现内容与标题不符可向本站投诉处理。
4. 下载文档时可能由于网络波动等原因无法下载或下载错误,付费完成后未能成功下载的用户请联系客服处理。