Tomcat的valve、filter和servlet的执行顺序
来源:互联网 发布:淘宝大v达人怎么申请 编辑:程序博客网 时间:2024/06/05 08:51
Tomcat中valve、filter和servlet的加载和执行顺序是:valve->filter->servlet。本篇文章从源码分析的角度讲述它们在tomcat中的调用关系。
Tomcat中有四大容器类StandardEngine,StandardHost,StandardContext及StandardWrapper。在每个容器对象里面都有一个pipeline及valve模块。它们是容器类必须具有的模块。容器类生成对象时,都会生成一个pipeline对象,同时,生成一个缺省的valve实现,并将这个标准的valve对象绑定在其pipeline上。每个容器缺省的标准valve分别是:
Engine:org.apache.catalina.core.StandardEngineValve
Host:org.apache.catalina.core.StandardHostValve
Context:org.apache.catalina.core.StandardContextValve
Wrapper:org.apache.catalina.core.StandardWrapperValve
Pipeline就像是每个容器的逻辑总线。在pipeline上按照配置的顺序,加载各个valve,其中缺省的标准valve处在pipeline的尾端。
先看一下pipeline及valve的逻辑概念图。
先看一下四大容器的标准valve的调用逻辑图。从中可以梳理出标准valve的逻辑。注意此图只是在缺省配置下的状态,也就是说每个pipeline只包含一个标准valve的情况。
图中显示的是各个容器默认的valve之间的实际调用情况。从StandardEngineValve开始,一直到StandardWrapperValve,完成整个消息处理过程。注意每一个上层的valve都是在调用下一层的valve返回后再返回的,这样每个上层valve不仅具有request对象,同时还能拿到response对象。
在最后一个Valve—StandardWrapperValve中会根据Tomcat/conf/web.xml和webapp/web-info/web.xml中的配置形成一个filter-servlet链,其中servlet在链表的尾端。webapp下的web.xml中filter配置先于tomcat/conf的filter。其中每一个filter都是在下一层的filter返回之后再返回的。所以可以在filter中先调用chain.dofilter()方法来执行后面的逻辑(包括servlet的执行)。在调用又返回当前filter时再处理从servlet中得到的response。
参考出处:gearever.iteye.com/blog/1536022
- Tomcat的valve、filter和servlet的执行顺序
- Filter、Servlet和Interceptor的执行顺序
- Filter和Servlet的执行顺序与实例
- ServletContext,Listener,Filter和自启动Servlet的执行顺序
- servlet 和filter区别和servlet、filter、interceptor的执行顺序
- [转]servlet 和filter区别和servlet、filter、interceptor的执行顺序
- servlet 和filter区别和servlet、filter、interceptor的执行顺序
- Servlet 中 Filter的执行顺序
- [转]filter、servlet、interceptor的执行顺序
- servlet 和 filter执行顺序
- servlet:servlet的执行顺序和生命周期
- FILTER的执行顺序
- filter的执行顺序
- Listener,Filter,Servlet执行顺序和生命周期
- Listener,Filter,Servlet执行顺序和生命周期
- Servlet中filter的执行顺序以及urlPatterns和servletNames之间的关系
- 容器执行Servlet API (ServletContext、ServletContextListener、Filter、Servlet的执行顺序)
- Servlet Filter的调用顺序
- 【存储专题】西瓜哥带您学习高端存储
- Android开发中使用adb shell命令出现sqlite3 : not found 问题
- artTemplate和tmodjs使用小记
- Unity4.6 UGUI 图片打包设置(小图打包成图集 SpritePacker)
- IOS 单例的两种方法
- Tomcat的valve、filter和servlet的执行顺序
- node.js自学笔记(5)-module
- windows 7 docker oralce安装和使用
- MATLAB画图常用调整代码
- Javascript URL 编码区别及转义字符处理
- 解决ssh连接提示Connection closed by xx
- Android开发中使用adb shell命令出现sqlite3 : not found 问题
- 内存管理第二谈:内存分配机制
- 跟hoowa学做智能路由(五):熟悉OpenWRT