一:拦截器的HelloWorld
1.首先自定义拦截器
只要实现接口就行。
1 package com.spring.it.interceptors; 2 3 import javax.servlet.http.HttpServletRequest; 4 import javax.servlet.http.HttpServletResponse; 5 6 import org.springframework.web.servlet.HandlerInterceptor; 7 import org.springframework.web.servlet.ModelAndView; 8 9 public class FirstInterceptor implements HandlerInterceptor{ 10 11 @Override 12 public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3) 13 throws Exception { 14 System.out.println("afterCompletion"); 15 16 } 17 18 @Override 19 public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3) 20 throws Exception { 21 System.out.println("postHandle"); 22 23 } 24 25 @Override 26 public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception { 27 System.out.println("preHandle"); 28 return true; 29 } 30 }
2.自定义拦截器
1 <mvc:interceptors> 2 <!-- 配置自定义拦截器 --> 3 <bean class="com.spring.it.interceptors.FirstInterceptor"></bean> 4 5 <!-- 配置LocaleChangeInterceter拦截器 --> 6 <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean> 7 </mvc:interceptors>
3.效果
重启,然后随便点一个链接
4.说明
preHandler:如果返回true,则继续调用后续的拦截器和目标方法
如果返回false,则不再进行调用后续的拦截器和目标方法
可以考虑做权限,日志,事务
postHandler:调用目标方法之后,但是在渲染视图之前
可以对请求域中的属性或者视图做出修改。
dftercompletion:渲染视图之后被调用
释放资源。
5.调用顺序
二:拦截器的配置
1.配置拦截器的作用路径
1 <mvc:interceptors> 2 <!-- 配置自定义拦截器 --> 3 <bean class="com.spring.it.interceptors.FirstInterceptor"></bean> 4 <!-- 配置拦截器的作用路径 --> 5 <mvc:interceptor> 6 <mvc:mapping path="/emps"/> 7 <bean class="com.spring.it.interceptors.SecondInterceptor"></bean> 8 </mvc:interceptor> 9 10 <!-- 配置LocaleChangeInterceter拦截器 --> 11 <bean class="org.springframework.web.servlet.i18n.LocaleChangeInterceptor"></bean> 12 </mvc:interceptors>
2.效果
三:拦截器的执行顺序
1.图说明
2.注意点
如果second中的preHandler中返回false。
虚线中的都不再执行。