总的对比:参考自:https://blog.csdn.net/reggergdsg/article/details/52962774
过滤器Filter
当浏览器发送请求给服务器的时候,先执行过滤器,然后才访问Web的资源。服务器响应Response,从Web资源抵达浏览器之前,也会途径过滤器。
过滤器可以做:
过滤一些敏感的字符串【规定不能出现敏感字符串】、
避免中文乱码【规定Web资源都使用UTF-8编码】、
权限验证【规定只有带Session或Cookie的浏览器,才能访问web资源】等等等,
过滤器的作用非常大,只要发挥想象就可以有意想不到的效果;也就是说:当需要限制用户访问某些资源时、在处理请求时提前处理某些资源、服务器响应的内容对其进行处理再返回、我们就是用过滤器来完成的!
拦截器的概念
java里的拦截器是动态拦截Action调用的对象,它提供了一种机制可以使开发者在一个Action执行的前后执行一段代码,也可以在一个Action
执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。在AOP中,拦截器用于在某个方法或者字段被访问之前,进行拦截
然后再之前或者之后加入某些操作。目前,我们需要掌握的主要是Spring的拦截器,Struts2的拦截器不用深究,知道即可。
过滤器与拦截器的区别
过滤器可以简单的理解为“取你所想取”,过滤器关注的是web请求;
拦截器可以简单的理解为“拒你所想拒”,拦截器关注的是方法调用,比如拦截敏感词汇。
1,拦截器是基于java反射机制来实现的,而过滤器是基于函数回调来实现的。(有人说,拦截器是基于动态代理来实现的)
2,拦截器不依赖servlet容器,过滤器依赖于servlet容器。
3,拦截器只对Action起作用,过滤器可以对所有请求起作用。
4,拦截器可以访问Action上下文和值栈中的对象,过滤器不能。
5,在Action的生命周期中,拦截器可以多次调用,而过滤器只能在容器初始化时调用一次。
监听器(listener)就是application、session、request三个对象创建、销毁或者往其中添加修改删除属性时自动执行代码的功能组件,如下所示:
①ServletContextListener:对Servlet上下文的创建和销毁进行监听。
②ServletContextAttributeListener:监听Servlet上下文属性的添加、删除和替换。
③HttpSessionListener:对Session的创建和销毁进行监听。
常见的监听器用途主要包括:网站在线人数技术、监听用户的行为(管理员踢人)。