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