拦截器跟过滤器的区别
定义过滤器
@WebFilter("/*")
public class MyFilter implements Filter {
@Override
public void init(FilterConfig filterConfig) throws ServletException {
}
@Override
public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain filterChain) throws IOException, ServletException {
System.out.println("===================过滤器前===================");
filterChain.doFilter(servletRequest,servletResponse);
System.out.println("===================过滤器后===================");
}
@Override
public void destroy() {
}
}
定义拦截器
public class MyFirstInterceptor implements HandlerInterceptor {
@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");
}
}
运行结果:
===================过滤器前===================
---------方法后执行,在渲染之前--------------preHandle
请求方法执行中...
----------方法后执行,在渲染之前--------------postHandle
--------- 在视图渲染之后--------------afterCompletion
===================过滤器后===================
过滤器Filter执行了两次,拦截器Interceptor只执行了一次。
过滤器和拦截器区别:
1、过滤器是基于函数回调的,而拦截器是基于java反射的
在我们自定义的过滤器中都会实现一个 doFilter()方法,这个方法有一个FilterChain 参数,而实际上它是一个回调接口。ApplicationFilterChain是它的实现类, 这个实现类内部也有一个 doFilter() 方法就是回调方法。
public interface FilterChain {
void doFilter(ServletRequest var1, ServletResponse var2) throws IOException, ServletException;
}
过滤器和拦截器区别:
1、过滤器是基于函数回调的,而拦截器是基于java反射的
在我们自定义的过滤器中都会实现一个 doFilter()方法,这个方法有一个FilterChain 参数,而实际上它是一个回调接口。ApplicationFilterChain是它的实现类, 这个实现类内部也有一个 doFilter() 方法就是回调方法。
public interface FilterChain {
void doFilter(ServletRequest var1, ServletResponse var2) throws IOException, ServletException;
}