①拦截器是基于动态代理的,而过滤器是基于函数回调。 ②拦截器不依赖于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");
}