一. 第一个拦截器例子
-
FirstInterceptor
需要实现org.springframework.web.servlet.HandlerInterceptor
接口
package com.atguigu.springmvc.interceptors;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
/**
* springMVC下第一个拦截器学习
* @author lxf
*
*/
public class FirstInterceptor implements HandlerInterceptor{
/**
* 在渲染视图之后被调用, 释放资源
*/
@Override
public void afterCompletion(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, Exception arg3)
throws Exception {
System.out.println("FirstInterceptor afterCompletion");
}
/**
* 调用目标方法之后但渲染视图之前被调用
* 可以对请求域中的属性修改
*/
@Override
public void postHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2, ModelAndView arg3)
throws Exception {
System.out.println("FirstInterceptor postHandle");
}
/**
* 在目标方法调用之前被调用
* 若返回值为true, 则继续调用后续的拦截器和目标方法
* 若返回值为false, 则不会调用后续的拦截器和目标方法
*/
@Override
public boolean preHandle(HttpServletRequest arg0, HttpServletResponse arg1, Object arg2) throws Exception {
System.out.println("FirstInterceptor preHandle");
return true;
}
}
- 配置
springmvc.xml
配置文件
<mvc:interceptors>
<!-- 配置自定义的拦截器 -->
<bean class="com.atguigu.springmvc.interceptors.FirstInterceptor"></bean>
</mvc:interceptors>
-
在访问任何一个控制器的目标方法的时候, 该自定义的拦截器都会先后执行, 执行顺序图解:
Paste_Image.png -
还可以实现指定目标方法的拦截,
springmvc.xml
配置如下:
<mvc:interceptors>
<!-- 配置拦截器 起/不起 作用的路径,也就是针对指定目标方法实现拦截 -->
<mvc:interceptor>
<mvc:mapping path="/emp" />
<bean class="com.atguigu.springmvc.interceptors.SecondInterceptor"></bean>
</mvc:interceptor>
</mvc:interceptors>
以上配置说明 SecondInterceptor
拦截器只拦截 /emp
目标方法
5.多个拦截器的执行顺序
Paste_Image.png Paste_Image.png
网友评论