SpringMVC之拦截器
拦截器概述
1.1什么是拦截器(HandleUbterceper)
拦截器可以在目标方法执行之前进行一些拦截工作,或者在目标方法执行过后进行一些操作.在javaWeb的学习当中我们就学过了拦截器,当然在SpringMVC也为我们提供了新的拦截器,在本篇文章中我们就来研究SpringMVC中的拦截器.
1.2拦截器的定义
1.编写类实现HandlerInterceptor
接口
2.继承HandlerInterceptor
接口的实现类(如HandlerInterceptorAdapter
)来定义。
3.通过实现WebRequestInterceptor
接口
4.继承WebRequestInterceptor
接口的实现类来定义。
栗子
下面我们以实现HandleInterceptor接口来举个栗子
public class SpringFilterTest implements HandlerInterceptor {
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
System.out.println("1....preHandle...执行了");
return true;//当它为true时放行
}
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception {
System.out.println("1....postHandle.....执行了");
}
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception {
System.out.println("1....afterCompletion.....执行了");
}
}
方法
preHandle()方法
preHande()
方法会在控制器方法前进行调用,其返回值决定是否中断后续操作.返回值为true表示继续执行,返回值false表示中断后续操作(包括下一个拦截器或者控制器的方法执行)
postHandle()方法
postHandle()
方法在目标方法执行后执行,且在视图解析器前执行,我们可以在此中对视图进行修改.
afterCompletion()方法
afterCompletion()
方法在整个请求执行完毕后执行,既视图渲染完成后执行.我们可以记录一些日志,缓存清理等.
配置
在编写了自定义的拦截器后,拦截器并不能工作,现在的我们需要对拦截器进行配置
<mvc:interceptors>
<!--会拦截所有Controller类的所有方法-->
<bean class="net.Arenly.utils.FilterTest"></bean>
<mvc:interceptor>
<!--配置单方法拦截-->
<mvc:mapping path="/test01"/>
<bean class="net.Arleny.service.DownloadT"/>
</mvc:interceptor>
<mvc:interceptor>
<!--拦截所有请求,排除拦截 /test01 请求-->
<mvc:mapping path="/**"/>
<mvc:exclude-mapping path="/test01"/>
<bean class="net.Arleny.service.DownloadT"/>
</mvc:interceptor>
</mvc:interceptors>
运行结果
1....preHandle...执行了
test执行了
1....postHandle.....执行了
页面执行了
1....afterCompletion.....执行了
通过控制台打印的数据我们可以看出来 preHandle放在在目标方法执行之前,postHandle在页面渲染之前,afterCompltion方法在页面渲染完成之后。
吾生也有涯,而知也无涯。——庄子
![](https://imgkr2.cn-bj.ufileos.com/e8801c81-574d-4574-86ff-7c1768c13af3.jpg?UCloudPublicKey=TOKEN_8d8b72be-579a-4e83-bfd0-5f6ce1546f13&Signature=DoGKEo46pXBqX3bXEkcejb3fgkw%253D&Expires=1599729573)
微信号 : Arenly-
bilibili : 爱无理取闹的猪