Servlet过滤器与拦截器区别

2021-10-08 15:06:33 浏览数 (1)

  ①拦截器是基于动态代理的,而过滤器是基于函数回调。   ②拦截器不依赖于servlet容器,通过动态代理实现,过滤器依赖于servlet容器。   ③拦截器可以在方法前后,异常前后等调用,而过滤器只能在请求前和请求后各调用一次。   ④拦截器可以利用依赖注入,因此在Spring框架程序中,优先拦截器。

1.过滤器是JavaEE标准,采用函数回调的方式进行。是在请求进入容器之后,还未进入Servlet之前进行预处理,并且在请求结束返回给前端这之间进行后期处理。

代码语言:javascript复制
    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException {
        System.out.println("before...");
        chain.doFilter(request, response);
        System.out.println("after...");
    }

2.拦截器是被包裹在过滤器之中的。

代码语言:javascript复制
    @Override
    public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
        System.out.println("preHandle");
        return true;
    }

    @Override
    public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
        System.out.println("postHandle");
    }

    @Override
    public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
        System.out.println("afterCompletion");
    }

0 人点赞