Java Web中的Filter、Interceptor、Listener

一、Filter、Interceptor、Listener简介

1. Filter:即过滤器。它是处于客户端与服务器资源文件之间的一道过滤网,在访问资源文件之前,通过一系列的过滤器对请求进行修改、判断等,把不符合规则的请求在中途拦截或修改。也可以对响应进行过滤,拦截或修改响应。

2. Interceptor:拦截器是动态拦截Action所调用的对象;它提供了一种可以使开发者在一个Action执行前后执行一段代码的机制,可以在一个Action执行前阻止其执行,同时也提供了一种可以提取Action中可重用部分代码的方式。

注:在AOP中,拦截器用于在某个方法或者字段被访问之前进行拦截,然后在之前或之后加入某些操作。

3. Listener:监听器用于监听web应用中某些对象、信息的创建、销毁、增加,修改,删除等动作的发生,然后作出相应的响应处理。当范围对象的状态发生变化的时候,服务器自动调用监听器对象中的方法。

注:常用于统计在线人数和在线用户,系统加载时进行信息初始化,统计网站的访问量等等。

二、Filter、Interceptor、Listener的作用

1. Filter:用于设置字符编码、URL级别的权限控制、敏感词汇过滤;

2. Interceptor:拦截未登录的用户;其功能与过滤器相似;

3. Listener:主要用于监听对应事件的发生;主要有:ServletContext、HttpSession、ServletRequest对象的创建和销毁、属性的增加或删除,HttpSession中对象的绑定和解绑;

三、Filter、Interceptor、Listener的执行顺序

1. Filter:过滤器依赖web容器而存在,在web.xml中配置,会在请求进入Servlet之前或出Servlet之后调用;

2. Interceptor:拦截器依赖web框架(Spring、Struts),在web框架的配置文件中配置,在请求进入Servlet之后且进入对应的Controller之前,或出Controller之后且出Servlet之前调用;

3. Listener:依赖web容器存在,在web.xml中配置,在时间触发时调用;

所以,从执行顺序上来看:

chain.doFilter()之前的代码 --> interceptor.preHandle() --> service() --> interceptor.postHandler() --> interceptor.afterCompletion() --> chain.doFilter()之后的代码

四、Filter和Interceptor的区别

过滤器、拦截器、监听器被称之为Javaweb中的三大器,除监听器是有针对性的作用之外,前两者在功能上是具有一定的相似性的,在此对二者的功能作以区别:

1. 实现方式:拦截器是基于Java反射机制来实现的;而过滤器是基于回调函数实现的;

2. 容器依赖性:拦截器不依赖Servlet容器;而过滤器依赖于Servlet容器;

3. 作用点:拦截器只对Action起作用;而过滤器可以对所有的请求起作用;

4. 对象访问权限:拦截器可以访问Action上下文和值栈中的典型;而过滤器不能;

5. 调用次数:在Action的生命周期中,拦截器可以多次调用;而过滤器只能在容器初始化时调用一次;

五、Filter、Interceptor、Listener配置及实现方式

这里仅收集一些理论上的东西,关于三大器的配置及其实现方式可参考如下链接文档:

1. Filter:https://blog.youkuaiyun.com/reggergdsg/article/details/52821502

2. Interceptor:https://blog.youkuaiyun.com/reggergdsg/article/details/52962774

3. Listener:https://blog.youkuaiyun.com/reggergdsg/article/details/52891311

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值