天天看点

023 SpringMVC拦截器

一:拦截器的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.效果

  重启,然后随便点一个链接

  

023 SpringMVC拦截器

4.说明

  preHandler:如果返回true,则继续调用后续的拦截器和目标方法

        如果返回false,则不再进行调用后续的拦截器和目标方法

        可以考虑做权限,日志,事务

  postHandler:调用目标方法之后,但是在渲染视图之前

        可以对请求域中的属性或者视图做出修改。

  dftercompletion:渲染视图之后被调用

          释放资源。

5.调用顺序

023 SpringMVC拦截器

二:拦截器的配置

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.效果

023 SpringMVC拦截器

三:拦截器的执行顺序

1.图说明

023 SpringMVC拦截器

2.注意点

  如果second中的preHandler中返回false。