• filter、servlet、interceptor的执行顺序


    1. Filter可认为是Servlet的一种“变种”,它主要用于对用户请求进行预处理,也可以对HttpServletResponse进行后处理,是个典型的处理链。它与Servlet的区别在于:它不能直接向用户生成响应。完整的流程是:Filter对用户请求进行预处理,接着将请求交给Servlet进行处理并生成响应,最后Filter再对服务器响应进行后处理。

    struts2

    通过上图可以看到,顺序应该是我们配的filter在前,之后是struts2的FilterDispatcher,然后是各个拦截器,最后原路返回。

    2. Servlet  Filter  Struts2的DispatcherFilter的执行顺序。

    在Servlet JSR中说明了Servlet和Filter执行的顺序:

    如果一个请求匹配了一个Serlvet,并且该Servlet配置了一个或者多个Filter,毫无疑问,先执行Filter,再执行Servlet。

    对与多个匹配的Filter,哪个先执行呢?

    JSR中说明的是,按照多个匹配的Filter,是按照其在web.xml中配置的顺序来执行的。

    所以这也就是,把自己的Filter或者其他的Filter(比如UrlRewrite的Filter)放在Struts的DispatcherFilter的前面的原因。因为,它们需要在请求被Struts2框架处理之前,做一些前置的工作。

    当Filter被调用,并且进入了Struts2的DispatcherFilter中后,Struts2会按照在Action中配置的Interceptor Stack中的Interceptor的顺序,来调用Interceptor。

  • 相关阅读:
    洛谷 P3850 [TJOI2007]书架
    洛谷 P2073 送花
    洛谷 P2343 宝石管理系统
    浅谈 fhq-treap(无旋treap)
    洛谷 P4568 [JLOI2011]飞行路线
    洛谷 T59576 下一个回文树(zhoutbafo)
    求SG函数(两种方法)
    python3+Appium自动化08-数据配置yaml
    python3+Appium自动化07-滑动操作以及滑动方法封装
    python3+Appium自动化06-屏幕截图
  • 原文地址:https://www.cnblogs.com/sdream/p/5871211.html
Copyright © 2020-2023  润新知