问题描述
如题:在web.xml中配置了两个或者多个的filter,他们的执行顺序是什么,是依次执行(也就是按顺序执行,配置在前的先执行,配置在后的后执行),还是怎么回事:如下代码: 这是公司一个项目的架构,我在研究的时候发现的,始终搞不明白:web.xml的部分配置文件: <!--配置的filter--> <filter><filter-name>struts2Filter</filter-name><filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class></filter><!-- UrlRewrite filter --><filter><filter-name>urlRewriteFilter</filter-name><filter-class>org.tuckey.web.filters.urlrewrite.UrlRewriteFilter</filter-class></filter> <!--配置的filtermapping--> <filter-mapping><filter-name>struts2Filter</filter-name><url-pattern>*.action</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher></filter-mapping><filter-mapping><filter-name>urlRewriteFilter</filter-name><url-pattern>/*</url-pattern><dispatcher>REQUEST</dispatcher><dispatcher>FORWARD</dispatcher></filter-mapping>就像这两个,到底谁先执行,谁后执行?
解决方案
filter的执行类似于栈,执行顺序是按照在配置文件中配置的顺序执行的,比如定义两个filter(f1,f2),过滤的对象为index.jsp,则客户的请求(req)和响应(res)顺序是req->f1->f2>index.jsp->f2->f1->res。