HandlerInterceptorAdapter中有三个方法:方别是preHandle,postHandle, afteCompletion。当我们需要使用的HandlerInterceptorAdapter实现相应的功能的时候(配置一个拦截器),就需要继承HandlerInterceptorAdapter,并实现其中相应的方法。现在就来介绍一下HandlerInterceptorAdapter三方法。
一、三个方法的执行顺序
请看下图:
当执行以上代码时候,会看到,三个方法的执行顺序为:preHandle-->postHanle-->afterCompletion。如下图:
具体来说,preHandle会在请求到达控制器前被调用;postHandle会在请求完成后,在视图被渲染前被调用;afterCompletion在视图被渲染后被调用。
值得注意的是,当preHandle中的返回值为false时(默认情况下为true),将不会调用postHandle和afterCompletion。
二、三个方法中的参数
1、三个方法中三个共同的参数
HttpServletRequest request, HttpServletResponse response, Object handler
HttpServletRequest request——包含所有请求的内容;
HttpServletResponse response——包含所有响应的内容;
Object handler——表示被拦截的请求的目标对象。
2、postHandle中的特殊参数
ModelAndView modelAndView
可以通过ModelAndView的参数来修改显示的视图,或修改发往视图的方法。
3、afterCompletion中的特殊参数
Exception ex
当ex!=null时,表示在请求的过程中发生了错误,ex会携带错误相关的信息。