拦截器: 从字面意思来讲,他的功能就是进行拦截操作,Spring MVC中拦截器主要是通过 HandlerInterceptor来实现的,主要功能是拦截用户的 URL请求并进行相应的处理,比如说用来判断用户是否登录了,进行权限验证等。
实现拦截器的方式
实现 HandlerInterceptor接口实现 WebRequestInterceptor接口
实现 HandlerInterceptor接口
public class Interceptor implements HandlerInterceptor {
@Override
default boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return true;
}
@Override
default void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable ModelAndView modelAndView) throws Exception {
}
@Override
default void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, @Nullable Exception ex) throws Exception {
}
}
实现 WebRequestInterceptor接口
三个方法的作用和执行顺序可参考上面 HandlerInterceptor的解释
public class Interceptor implements WebRequestInterceptor {
public void preHandle(WebRequest request) throws Exception {
}
public void postHandle(WebRequest request, ModelMap model) throws Exception {
}
public void afterCompletion(WebRequest request, Exception ex) throws Exception {
}
}
过滤器: 从字面意思来讲,它就是对请求进行一个过滤,它不能产生请求,也不能进行响应。但可以用来转换HTTP请求、响应和头信息。它可以修改对某一资源的请求,或者修改某一资源的响应。
创建一个Filter的步骤
创建Filter 处理类:
在web.xml 文件中配置Filter 。
// 用于完成Filter的初始化。 void init(FilterConfig config): // 用于Filter 销毁前,完成某些资源的回收。 void destroy(): // 实现过滤功能,该方法就是对每个请求及响应增加的额外处理。 void doFilter(ServletRequest request, ServletResponse response,FilterChain chain):
拦截器与过滤器的区别
- 拦截器是基于Java的反射机制的,而过滤器是基于函数回调过滤器依赖与servlet容器,而拦截器不依赖与servlet容器拦截器只能对action请求起作用,而过滤器则可以对几乎所有的请求起作用拦截器可以访问action上下文、值栈里的对象,而过滤器不能在action的生命周期中,拦截器可以多次被调用,而过滤器只能在容器初始化时被调用一次
监听器: 它是实现了javax.servlet.ServletContextListener接口的服务器端程序,随着Web容器的启动而启动,只加载一次,主要作用是:做一些初始化的内容添加工作、设置一些基本的内容、就是spring容器启动的时候加载一些数据。
在javax.servlet.ServletContextListener接口中定义了2种方法:
void contextInitialized(ServletContextEvent sce) 监听器的初始化
void contextDestroyed(ServletContextEvent sce) 监听器销毁
@Override
public void contextInitialized(ServletContextEvent sce) {
// TODO Auto-generated method stub
}
@Override
public void contextDestroyed(ServletContextEvent sce) {
// TODO Auto-generated method stub
}
详细解释可参考:过滤器,拦截器,监听器的区别 - Rooker - 博客园 (cnblogs.com)



