过滤器、监听器、拦截器的区别

1.过滤器:

servlet中的过滤器filter是实现了javax.servlet.Filter接口的服务器端程序,主要用途是过滤字符编码,做一些业务逻辑判断等。

工作原理:只要你在web.xml文件配置好要拦截的客户端请求,它都会帮你进行拦截到请求,此时你就可以队请求,响应统一设置编码,简化操作;同时还可以进行逻辑判断,如用户是否已经登录,有没有权限访问该页面等等的工作,它随着你的web应用启动而启动的,只初始化一次就可以拦截相关的请求,只有当你的web应用停止或者重新部署的时候才进行销毁。

主要方法:

init(FilterConfig filterConfig)用于完成过滤器初始化

destroy()用于过滤器销毁前,完成某些资源的回收

dofilter(ServletRequest request, ServletResponse response,FilterChain chain)实现过滤功能,该方法对每个请求增加额外的处理

2.拦截器:

拦截器是在面向切面编程中应用,就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法比如动态代理就是拦截器的实现,在你调用方法前打印出字符串,也可以在你调用方法后打印字符串,甚至在你抛出异常的时候做业务逻辑的操作,在springmvc在与spring整合的配置文件中进行配置

主要方法:

在springmvc中,定义拦截器要实现HandlerInterceptor接口,并实现该接口中提供的三个方法

preHandle方法:进入Handle方法之前执行,可以用于身份认证、身份授权。比如如果认证没有通过表示用户没有登陆,需要此方法拦截不再往下执行(return false),否则就放行(return true)。

postHandle方法:进入Handler方法之后,返回modelandview之前执行,可以在该方法中有一个modelandview的形参

afterCompletion方法:执行Handler完成之后执行,统一异常处理,统一日志处理等。

在springmvc中,拦截器是针对具体的HandlerMapping进行配置的,也就是说如果在某个HandlerMapping中配置拦截,经过该 HandlerMapping映射成功的handler最终使用该拦截器。

监听器:

监听器就是一个实现特定接口的普通java程序,这个程序专门用于监听另一个java对象的方法调用或属性改变,当被监听对象发生上述事件后,监听器某个方法将被立即执行

监听器涉及三个组件:事件源,事件对象,时间监听器

当事件源发生某个动作的时候,他会调用事件监听器的方法,并在调用事件监听器方法的时候把事件对象传递进去

我们在监听器中就可以通过事件对象获取得到事件源,从而对事件源进行操作!

过滤器和拦截器的区别:

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

2.过滤器依赖与servlet容器,而拦截器不依赖servlet容器

3.拦截器只对action请求起作用,过滤器几乎对所有的请求起作用

4.拦截器可以访问action的上下文,值栈里面的对象,而过滤器不可以

5.在action的声明周期中,拦截器可以多次调用,而过滤器只能在容器初始化时被调用一次

总结:

把整个项目的流程比作一条河,那么监听器的作用就是能够听到河流里的所有声音,过滤器就是能够过滤出其中的鱼,而拦截器则是拦截其中的部分鱼,并且作标记。 所以当需要监听到项目中的一些信息,并且不需要对流程做更改时,用监听器;当需要过滤掉其中的部分信息,只留一部分时,就用过滤器;当需要对其流程进行更改,做相关的记录时用拦截器。

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值