是先进行filter还是先进行action拦截器?

解决方案 »

  1.   

    struts1里面有filter 确切的说好象是servlet里面有filter 至于拦截那是2里面
      

  2.   

    我用的是struts2     来用了过滤器来进行权限验证    我是想知道过滤器和拦截器 哪个先执行
      

  3.   

    仔细看一下WEB.XML  <filter>
    <filter-name>httpContFilter</filter-name>
    <filter-class>XXXXX</filter-class>
    </filter> <filter-mapping>
    <filter-name>httpContFilter</filter-name>
    <url-pattern>*.do</url-pattern>
    </filter-mapping>
    <filter-mapping>
    <filter-name>httpContFilter</filter-name>
    <url-pattern>*.jsp</url-pattern>
    </filter-mapping>这是不用STRUCTS的,任何这样的 ,都会直接调到你的类配置的类中  , STRUCTS是基于这层基础上做的 
      

  4.   

    我觉得 应该是 action 先执行吧,跟他们在 web.xml中的位置也有关系吧
      

  5.   

    action拦截器 > filter 
      

  6.   

    我感觉跟web.xml中配置顺序有关
      

  7.   

    当接收到一个httprequest , 
    a) 当外部的httpservletrequest到来时 
    b) 初始到了servlet容器 传递给一个标准的过滤器链 
    c) FilterDispatecher会去查找相应的ActionMapper,如果找到了相应的ActionMapper它将会将控制权限交给ActionProxy 
    d) ActionProxy将会通过ConfigurationManager来查找配置struts.xml 
           i. 下一步将会 通过ActionInvocation来负责命令模式的实现(包括调用一些拦截Interceptor框架在调用action之前) 
           ii. Interceptor做一些拦截或者初始的工作 
    e) 一旦action返回,会查找相应的Result 
    f) Result类型可以是 jsp或者freeMark 等 
    g) 这些组件和ActionMapper一起返回给请求的url(注意拦截器的执行顺序) 
    h) 响应的返回是通过我们在web.xml中配置的过滤器 
    i) 如果ActionContextCleanUp是当前使用的,则FilterDispatecher将不会清理sreadlocal ActionContext;如果ActionContextCleanUp不使用,则将会去清理sreadlocals。 
     
     
    1、拦截器是基于java反射机制的,而过滤器是基于函数回调的。
    2、过滤器依赖于servlet容器,而拦截器不依赖于servlet容器。
    3、拦截器只能对Action请求起作用,而过滤器则可以对几乎所有请求起作用。
    4、拦截器可以访问Action上下文、值栈里的对象,而过滤器不能。
    5、在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次。
      

  8.   

    执行的顺序与web.xml filter上下位置有关