拦截器与过滤器的区别总结:

过滤器在web.xml中配置:

(1)因为一开始在过滤器中映射的url-pattern填写路径是*.action。所有的action要经过它的过滤。<url-pattern>*.action</url-pattern>

(2)因为在web.xml中配置了过滤器,所以,执行过程所有程序都经过struts2过滤器(路径是:/*),首先过滤自己相关的程序,如xx.action,先处理,如果是.html或者.jsp就不会处理,直接放行。

解决方法:把过滤器映射路径改为:/*  ,即全部过滤处理。

<url-pattern>/*</url-pattern>

过滤器和拦截器不同,struts中拦截器是核心。

理解

(1)过滤器(Filter):当你有一堆东西的时候,你只希望选择符合你要求的某一些东西。定义这些要求的工具,就是过滤器。(理解:就是一堆字母中取一个B)

(2)拦截器(Interceptor):在一个流程正在进行的时候,你希望干预它的进展,甚至终止它进行,这是拦截器做的事情。(理解:就是一堆字母中,干预他,通过验证的少点,顺便干点别的东西)。

拦截器 :是在面向切面编程的就是在你的service或者一个方法,前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业务逻辑的操作),也可以在你调用方法后打印出字符串,甚至在你抛出异常的时候做业务逻辑的操作。

过滤器:是在javaweb中,你传入的request、response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts的action进行业务逻辑,比如过滤掉非法url(不是login.do的地址请求,如果用户没有登陆都过滤掉),或者在传入servlet或者 struts的action前统一设置字符集,或者去除掉一些非法字符.。

拦截器与过滤器使用场景:

spring Web MVC的处理器拦截器类似于Servlet开发中的过滤器Filter,用于对处理器进行预处理和后处理。

1、日志记录:记录请求信息的日志,以便进行信息监控、信息统计、计算PV(Page View)等。

2、权限检查:如登录检测,进入处理器检测检测是否登录,如果没有直接返回到登录页面;

3、性能监控:有时候系统在某段时间莫名其妙的慢,可以通过拦截器在进入处理器之前记录开始时间,在处理完后记录结束时间,从而得到该请求的处理时间(如果有反向代理,如apache可以自动记录);

4、通用行为:读取cookie得到用户信息并将用户对象放入请求,从而方便后续流程使用,还有如提取Locale、Theme信息等,只要是多个处理器都需要的即可使用拦截器实现。

5、OpenSessionInView:如hibernate,在进入处理器打开Session,在完成后关闭Session。

具体区别

拦截器是AOP( Aspect-Oriented Programming)的一种实现,底层通过动态代理模式完成。

区别:

(1)拦截器是基于java的反射机制的,而过滤器是基于函数回调。

(2)拦截器不依赖于servlet容器,而过滤器依赖于servlet容器。

(3)拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用。

(4)拦截器可以访问action上下文、值栈里的对象,而过滤器不能。

(5)在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次。

两者的本质区别:从灵活性上说拦截器功能更强大些,Filter能做的事情,他都能做,而且可以在请求前,请求后执行,比较灵活。Filter主要是针对URL地址做一个编码的事情、过滤掉没用的参数、安全校验(比较泛的,比如登录不登录之类),太细的话,还是建议用interceptor。不过还是根据不同情况选择合适的。

filter

Interceptor

多个的执行顺序

根据filter mapping配置的先后顺序

按照配置的顺序,但是可以通过order控制顺序

规范

在Servlet规范中定义的,是Servlet容器支持的

spring容器内的,是Spring框架支持的。

使用范围

只能用于Web程序中

既可以用于Web程序,也可以用于Application、Swing程序中。

深度

Filter在只在Servlet前后起作用

拦截器能够深入到方法前后、异常抛出前后等

补充说明:Spring的拦截器与Servlet的Filter有相似之处,比如二者都是AOP编程思想的体现,都能实现权限检查、日志记录等。不同的是:使用范围不同:Filter是Servlet规范规定的,只能用于Web程序中。而拦截器既可以用于Web程序,也可以用于Application、Swing程序中。规范不同:Filter是在Servlet规范中定义的,是Servlet容器支持的。而拦截器是在Spring容器内的,是Spring框架支持的。使用的资源不同:同其他的代码块一样,拦截器也是一个Spring的组件,归Spring管理,配置在Spring文件中,因此能使用Spring里的任何资源、对象,例如Service对象、数据源、事务管理等,通过IoC注入到拦截器即可;而Filter则不能。深度不同:Filter在只在Servlet前后起作用。而拦截器能够深入到方法前后、异常抛出前后等,因此拦截器的使用具有更大的弹性。所以在Spring构架的程序中,要优先使用拦截器。实际上Filter和Servlet极其相似,区别只是Filter不能直接对用户生成响应。实际上Filter里doFilter()方法里的代码就是从多个Servlet的service()方法里抽取的通用代码,通过使用Filter可以实现更好的复用。filter是一个可以复用的代码片段,可以用来转换HTTP请求、响应和头信息。Filter不像Servlet,它不能产生一个请求或者响 应,它只是修改对某一资源的请求,或者修改从某一的响应。JSR中说明的是,按照多个匹配的Filter,是按照其在web.xml中配置的顺序 来执行的。 所以这也就是,把自己的Filter或者其他的Filter(比如UrlRewrite的Filter)放在Struts的 DispatcherFilter的前面的原因。因为,它们需要在请求被Struts2框架处理之前,做一些前置的工作。 当Filter被调用,并且进入了Struts2的DispatcherFilter中 后,Struts2会按照在Action中配置的Interceptor Stack中的Interceptor的顺序,来调用Interceptor。

拦截器过滤器使用场景和作用相关推荐

  1. java过滤器原理,拦截器,过滤器,监听器 区别及执行顺序

    本文引用该作者(花开半夏)著作内容,觉得写的很好,记录一下便于回看防止失踪,更多详情请查看原作者. 同时还搜罗了其他便于理解的博文感兴趣的可以看看促进理解 拦截器,过滤器,监听器执行顺序(被拦截个人过 ...

  2. 拦截器 过滤器 监听器 的区别

    面试的时候突然被问了这么个问题 本来知道点啥的 脑子一热 啥也没说出来总结一下 以下内容均摘自网络 但是 读完之后 应该会对它们有更清晰的认识.1.1 什么是拦截器: 拦截器,在AOP(Aspect- ...

  3. spring拦截器-过滤器的区别

    1.  理解 拦截器 :是在面向切面编程的时候,在你的 service 或者一个方法前调用一个方法,或者在方法后调用一个方法:比如动态代理就是拦截器的简单实现,在你调用方法前打印出字符串(或者做其它业 ...

  4. java中拦截器 过滤器 监听器都有什么区别

    过滤器,是在java web中,你传入的request,response提前过滤掉一些信息,或者提前设置一些参数,然后再传入servlet或者struts2的action进行业务逻辑,比如过滤掉非法u ...

  5. Struct2_定义拦截器并使用注解方式作用在Action的方法中

    一.目的:通过在方法上加注解控制哪些方法需要登陆后才能访问 二.方式:利用拦截器判断用户是否登陆   三.实现步骤 定义配置文件 struts.xml添加节点 1 2 3 4 5 6 7 8 9 10 ...

  6. spring boot拦截器 过滤器

    1.拦截器 登录拦截 自定义拦截路径 //全局配置继承WebMvcConfigurer接口 @Configuration public class MyHandler implements WebMv ...

  7. 真正理解mybatis拦截器以及Interceptor和Plugin作用

    看了很多博客文章和,mybatis 的拦截器概念还是不能很好理解, 可能是因为自己基础不好或者理解方式和他人不同吧,所以决定自己花时间好好捋捋, 然后把理解后的总结记录下来,供他人参考,也许你们的理解 ...

  8. SpringBoot 拦截器 过滤器

    1.过滤器和拦截器触发时机不一样,过滤器是在请求进入容器后,但请求进入servlet之前进行预处理的.请求结束返回也是,是在servlet处理完后,返回给前端之前. 2.拦截器可以获取IOC容器中的各 ...

  9. Spring Boot 拦截器无效,不起作用

    这个问题一般是解决WebMvcConfigurerAdapter过时问题造成的.导致这个问题可能有两个原因:一个是拦截器写错了,另一个是拦截器配置错了. 1.需求是这样的 拦截所有的api请求,判断其 ...

  10. Spring MVC中的拦截器/过滤器HandlerInterceptorAdapter的使用

    转载自 https://www.cnblogs.com/EasonJim/p/7704740.html 一般情况下,对来自浏览器的请求的拦截,是利用Filter实现的 而在Spring中,基于Filt ...

最新文章

  1. ImportError: cannot import name 'AccessCalendar'
  2. r语言x%3c-读取文件,R语言读写最灵活的文件——txt文件
  3. Oracle-Listener log解读
  4. 【网络安全】域渗透之完全绕开安全组件
  5. Jdk1.8新特性(二)——lambda表达式(参数列表)-{}和函数式接口@FunctionalInterface
  6. 无法载入 mysql 扩展
  7. C++中const使用总结
  8. 安捷伦or是德信号源+频谱仪操作: 从程控到自动测试 (五)频谱仪截屏到U盘的程控实现
  9. 服务器性能测试 iometer 测试io
  10. CES2013前瞻:1080p屏幕手机集中爆发
  11. SPSSPRO模型归纳整理
  12. React-native android App项目搭建
  13. 小程序----文字竖排
  14. 英特尔核显驱动hd630_秒速开机快如闪电 英特尔EVO平台惹人爱!
  15. 最新小程序授权+php后端(附demo源码)
  16. 原子物理与原子核物理知识结构(含链接)
  17. 针对JWT简介与原理,代码实例,以及oauth2+JWT+RSA的集成配置
  18. 企业服务业务系统-业务模型梳理(中)
  19. 小陈学js While循环
  20. 27岁才开始学习编程靠谱吗?40岁都不晚

热门文章

  1. 摩尔庄园不同服务器账号互通吗,摩尔庄园手游服务器互通吗?摩尔庄园手游不同区可以一起玩吗?...
  2. 如何快速实现一个颜色选择器
  3. jtopo 实现一键布局
  4. MATLAB 入门之旅【官方基础教程】
  5. Mouse Without Borders 使用经验
  6. SOUI自定义控件(4)
  7. 2009福布斯最具潜力中小企业榜
  8. java基于springboot的酒店预约管理平台系统
  9. Jrebel 最新激活方式(2018.07.26)
  10. php支付宝h5接口,支付宝H5支付plus版接口文档.PDF