java web 过滤器 拦截器 监听器_Java中的拦截器和过滤器,可不是同一个东西

过滤器(Filter)

8ba407c4f8017ec2254dbe86ec21a1ce.png

过滤器就如上面的水质过滤器一样,把管道中的水进行一遍过滤再使用。过滤器基于filter接口中的doFilter回调函数,主要的用途是设置字符集、控制权限、控制转向、做一些业务逻辑判断等。我们通常使用过滤器的做法如下:

encodingorg.springframework.web.filter.CharacterEncodingFilterencodingUTF-8forceEncodingtrue

可以了解到它的基本工作原理就是,在web.xml文件配置好要拦截的客户端请求,它都会帮你拦截到请求,这个时候就可以对请求或响应(Request、Response)统一设置编码,简化操作。

可以说是一种加强版的 Servlet。所以我们大概可以知道它的一些优势:

  • 在请求到达Servlet进行拦截,对其数据进行验证,同时也可以修改请求头信息和数据信息,过滤那些不用的数据信息。
  • 在响应回到客户端之前,也可以对数据进行相应的修改操作。

拦截器(Interceptor)

2f166eefe0c0113536204551d9d2b3d6.png

拦截器也如上图一样,有邮件进来的时候,我判断它如果是垃圾邮件的话,那我拒收。要实现拦截器也很简单,通过实现接口HandlerInterceptor(spring提供的拦截器接口)就行了。

在实现上是基于Java的反射机制,属于面向切面编程(AOP)的一种运用,就是在你的service或者一个方法前调用一个方法,或者在方法后调用一个方法,例如我们通常可以通过面向切面来实现日记记录、参数校验等功能。简单示例如下:

public class BaseInterceptor implements HandlerInterceptor{      /**      * 在DispatcherServlet之前执行      * */      public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {          System.out.println("aaaa");          return true;      }      /**      * 在controller执行之后的DispatcherServlet之后执行      * */      public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) throws Exception {          System.out.println("bbbb");      }      /**      * 在页面渲染完成返回给客户端之前执行      * */      public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)              throws Exception {          System.out.println("cccc");      }  }  

区别

1、Filter基于回调函数,Interceptor则基于Java反射机制;

2、Filter是依赖于servlet容器的,没有servlet容器就没办法回调doFilter方法,所以说你就别在Swing程序中使用Filter了,没用的,而Interceptor与servlet无关,只需要实现框架接口就行。

3、从过滤范围来说,Filter更广,Interceptor只能过滤action,而过滤器则可以对几乎所有的请求起作用。

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

5、拦截器可以被多次调用,而过滤器只能在容器初始化时被调用一次。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值