过滤器与拦截器的具体区别

转载 2015年07月10日 13:43:31
Filter基于回调函数,我们需要实现的filter接口中doFilter方法就是回调函数,而interceptor则基于java本身的反射机制,这是两者最本质的区别。
Filter是依赖于servlet容器的,即只能在servlet容器中执行,很显然没有servlet容器就无法来回调doFilter方法。而interceptor与servlet容器无关。
Filter的过滤范围比Interceptor大,Filter除了过滤请求外通过通配符可以保护页面,图片,文件等等,而Interceptor只能过滤请求。

Filter的过滤例外一般是在加载的时候在init方法声明,而Interceptor可以通过在xml声明是guest请求还是user请求来辨别是否过滤

简单的总结理解:
1:Filter 对在web.xml中该filter配置的路径进行单向拦截, request匹配Filter的路径时做一次拦截!  这个底层实现没想过, 嘿嘿!
2:interceptor的拦截处理其实就是代理机制! 
Struts2官方文档那个图画的相当明了了。既然是代理,那么是双向拦截,拦截器在action的方法之前执行一次, 之后执行一次!
根据那个图,你可以再对应的去看下StrutsPrepareAndExecuteFilter的源代码,前面一段代码产生Action的环境,判断mapping之类的, 可以跟进ExecuteOperations execute这个成员变量,下面如果前面一系列判断都满足的话, 会调用execute.executeAction, 这个里面的实现就是产生action的代理, 然后通过配置信息, 去获得这个action身上配置了哪些拦截器,然后执行拦截器的代码,拦截器中用ActionInvocation去通知下一个拦截器执行, 等到所有的拦截器都拦完了以后,执行action, 随后拦截器又会反向执行一遍(官方确实是这个意思, LZ可以自己写两个拦截器测试下看是不是这么会是)
所以对于Interceptor是不对request进行处理的, 它只是对action起作用。Struts的那个核心过滤器拦截了action的请求之后产生action的代理后进行处理的!


相关文章推荐

过滤器,拦截器,监听器具体应用上的区别

过滤器 拦截器 监听器

过滤器与拦截器的区别

  • 2014年12月27日 16:22
  • 25KB
  • 下载

Struts 2 过滤器和拦截器的区别

  • 2012年01月31日 15:01
  • 26KB
  • 下载

Java过滤器与SpringMVC拦截器之间的关系与区别

今天学习和认识了一下,过滤器和SpringMVC的拦截器的区别,学到了不少的东西,以前一直以为拦截器就是过滤器实现的,现在想想还真是一种错误啊,而且看的比较粗浅,没有一个全局而又细致的认识,由于已至深...

拦截器和过滤器的区别

  • 2012年08月20日 20:52
  • 12KB
  • 下载

拦截器和过滤器的区别

  • 2011年11月04日 00:10
  • 25KB
  • 下载

过滤器(filter)和拦截器(intercept)的区别

1.filter:在javaEE中filter是在传入request和response前提前过滤一些信息,或者提前设置一些参数,然后在传到servlet或struts的action中进行业务的处理。例...

过滤器和拦截器区别区别

  • 2011年07月27日 16:19
  • 29KB
  • 下载

Struts2中过滤器和拦截器的区别

拦截器和过滤器的区别: 1、拦截器是基于java的反射机制的,而过滤器是基于函数回调 2、过滤器依赖与servlet容器,而拦截器不依赖与servlet容器 3、拦截器只能对action请求起作...

java web 过滤器跟拦截器的区别和使用

java web 过滤器和拦截器的区别和使用 1、首先要明确什么是拦截器、什么是过滤器    1.1 什么是拦截器:      拦截器,在AOP(Aspect-Oriented Progra...
  • ccecwg
  • ccecwg
  • 2015年01月12日 17:29
  • 269
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:过滤器与拦截器的具体区别
举报原因:
原因补充:

(最多只允许输入30个字)