拦截器和过滤器区别

1、拦截器和过滤器区别

1)、过滤器是基于servlet的一种函数回调,依赖servlet容器
2)、拦截器是基于java反射机制,不依赖servlet容器
3)、拦截器只能对action请求起作用,而过滤器则对几乎所有的请求起作用
4)、拦截器可以访问action上下文、值栈里的对象,而过滤器不能访问
5)、在action的生命周期中,拦截器可以多次被调用,而过滤器只能被调用一次
6)、拦截器可以获取IOC容器中的各个bean,而过滤器不行,在拦截器里注入一个service,可以调用对应的业务逻辑
7)、拦截器是spring容器的,是spring支持的,过滤器不是

2、触发时机:

1)、过滤器是在请求进入容器后,但请求进入serlvet之前进行预处理的。请求结束返回也是,在servlet处理之后,返回给前端之前
  • 总结:过滤器包裹住servlet,servlet包裹住拦截器

3、过滤器核心方法:实现(Filter)接口

//初始化
void init(FilterConfig filterConfig);

//调用过滤器处理
void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
     System.out.println("before...");
     chain.doFilter(request, response);
      System.out.println("after...");
}

//销毁
void destroy();

4、拦截器核心方法:——>继承(HandlerInterceptorAdapter)类 -->实现HandlerInterceptor接口

//前置操作在业务处理器处理请求之前被调用
boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler)throws Exception {
    System.out.println("preHandle");
    return true;
}

//在业务处理器处理请求完成之后,生成视图之前执行
void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
      System.out.println("postHandle");
}

//在DispatcherServlet完全处理完请求之后被调用,可用于清理资源
void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
      System.out.println("afterCompletion");
}



a.preHandle()这个方法是在过滤器的chain.doFilter(request, response)方法的前一步执行,也就是在 [System.out.println("before...")][chain.doFilter(request, response)]之间执行。
b.preHandle()方法之后,在return ModelAndView之前进行,可以操控Controller的ModelAndView内容。
c.afterCompletion()方法是在过滤器返回给前端前一步执行,也就是在[chain.doFilter(request, response)][System.out.println("after...")]之间执行。

5、SpringMVC的机制是由同一个Servlet来分发请求给不同的Controller,其实这一步是在Servlet的service()方法中执行的。所以过滤器、拦截器、service()方法,dispatch()方法的执行顺序应该是这样

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
拦截器过滤器是在开发中常用的两种设计模式,用于在请求处理的不同阶段对请求进行处理和拦截。它们的区别主要体现在使用场景和功能上。 拦截器(Interceptor)是一种在请求处理的不同阶段进行拦截并插入自定义逻辑的机制。它通常用于对请求进行预处理或后处理,例如记录日志、验证权限、设置上下文环境等。拦截器可以在请求的开始、结束或异常抛出等时机进行拦截,并且可以被链式调用,即一个拦截器可以调用多个其他拦截器拦截器通常与框架或中间件紧密结合,在请求的处理过程中按照一定的顺序依次执行。 过滤器(Filter)是一种在请求到达目标处理程序之前或之后对请求进行过滤和处理的机制。它通常用于对请求进行预处理、过滤或修改,例如字符编码转换、参数校验、防止跨站点脚本攻击等。过滤器可以在请求被处理前进行处理(前置过滤器),也可以在请求被处理后进行处理(后置过滤器)。过滤器通常与Web容器(如Servlet容器)紧密结合,在请求的处理过程中按照一定的顺序依次执行。 总结来说,拦截器过滤器的主要区别在于使用场景和功能。拦截器更适合进行请求的预处理和后处理,而过滤器更适合对请求进行过滤和修改。拦截器一般与框架紧密结合,可以链式调用,而过滤器一般与Web容器紧密结合,按照一定的顺序依次执行。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值