1.定义自己的spring mvc拦截器需要实现HandlerInterceptor 接口或者继承HandlerInterceptorAdapter
2.boolean preHandle()方法在controller被调用之前调用;
3.void postHandle()方法在controller被调用之后调用,可在modelandview中加入数据,比如当前时间;
4.void afterCompletion()在呈现视图之后调用,可用于清理资源等;
5.当设置多个拦截器时,先按顺序调用preHandle方法,然后逆序调用每个拦截器的postHandle和afterCompletion方法

6.拦截器代码
public class MyInterceptor1 extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("-------preHandle1-------");
return true;//如果返回false,则不再调用之后的方法
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("-------postHandle1-------");
if(modelAndView != null){ //加入当前时间
modelAndView.addObject("now", new Date());
}
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("-------afterCompletion1-------");
}
}
public class MyInterceptor2 extends HandlerInterceptorAdapter {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("-------preHandle2-------");
return true;//如果返回false,则不再调用之后的方法
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("-------postHandle2-------");
if(modelAndView != null){ //加入当前时间
modelAndView.addObject("now", new Date());
}
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("-------afterCompletion2-------");
}
}
7.配置
<mvc:interceptors>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.nexusy.web.interceptor.MyInterceptor1" />
</mvc:interceptor>
<mvc:interceptor>
<mvc:mapping path="/**"/>
<bean class="com.nexusy.web.interceptor.MyInterceptor2" />
</mvc:interceptor>
</mvc:interceptors>
8.输出
-------preHandle1-------
-------preHandle2-------
-------controller-------
-------postHandle2-------
-------postHandle1-------
-------afterCompletion2-------
-------afterCompletion1-------
本文介绍如何在SpringMVC中定义和使用自定义拦截器,包括实现HandlerInterceptor接口或继承HandlerInterceptorAdapter类,并详细说明了preHandle、postHandle及afterCompletion方法的作用与调用顺序。
1310

被折叠的 条评论
为什么被折叠?



