SpringMVC的拦截器就是替代的Web中的过滤器呢,其实就是一个类,只是这个类的某些方法可以在控制器执行的时候执行而已。
使用步骤:
1、创建类,实现HandlerIntercept接口
2、重写对应的抽象方法
3、配置拦截器即可
public class HelloIntercept implements HandlerInterceptor{
//结束---url请求结束---视图解析结束
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception exception)
throws Exception {
// TODO Auto-generated method stub
System.out.println("afterCompletion");
}
//后处理---后置---控制器映射方法执行结束之后
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView mv)
throws Exception {
// TODO Auto-generated method stub
System.out.println("postHandle");
}
//预处理--前置:返回值:是否继续访问,false:不继续,拦截,true:继续访问,放行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
// TODO Auto-generated method stub
System.out.println("preHandle");
return true;
}
必须要知道这三个方法的执行时机:
preHandle:先执行,返回值标记是否继续执行
就是在控制器的方法执行前执行
postHandle:后执行,这时拥有了ModelAndView
就是控制器的方法执行后才执行
afterCompletion:结束执行,当前URL请求结束了
就是视图解析器渲染之后执行,所以此时的request拥有Model中的数据
<!--配置拦截器 -->
<mvc:interceptors>
<!--配置自定义拦截器 -->
<mvc:interceptor>
<!-- 配置拦截规则,也就是触发拦截器类的规则 -->
<mvc:mapping path="/*"/>
<!--忽略的url请求格式 -->
<mvc:exclude-mapping path="/*.html"/>
<!--配置具体的拦截器对象 -->
<bean class="org.qf.web.intercept.HelloIntercept"></bean>
</mvc:interceptor>
</mvc:interceptors>
接下来运行即可。