SpringMVC学习笔记(八)
一、拦截器介绍
拦截器(Interceptor )是依赖于 Spring 框架,是 aop 的一种表现,基于 Java 的动态代理实现的。拦截器的实现原理和过滤器类似,都可以对用户发出的请求或者对服务器做出的响应进行拦截。SpringMVC提供了一个支持拦截器的HandlerInterceptor的接口,此接口的实现类就是一个拦截器。
方法 | 介绍 |
---|---|
boolean preHandle (HttpServletRequest request,HttpServletResponse response,Object handler)throws Exception | 用于拦截客户端发出的请求,此方法会在request到达前调用。如果拦截处理后,需要放行的话,返回ture;如果需要结束请求,则返回false。 |
void postHandle HttpServletRequest request,HttpServletResponse response,Object handler,ModelAndView modelAndView)throws Exception | 用于拦截服务器发出的响应。此方法会在请求处理方法之完request请求之后、服务器发出response响应到达DispatcherServlet的渲染方法之前被调用。 |
void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex)throws Exception | 此方法会在DispatcherServlet将response响应的视图渲染完毕之后被调用。 |
1.声明拦截器的类:通过实现 HandlerInterceptor 接口,实现 preHandle、postHandle 和 afterCompletion 方法。
2. 通过配置类配置拦截器:通过实现 WebMvcConfigurer 接口,实现 addInterceptors 方法。
二、拦截器的简单使用
1.创建定义拦截器
创建一个类,并实现HandlerIntercptor接口:
package com.springmvc.interceptor;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.springframework.web.servlet.HandlerInterceptor;
import org.springframework.web.servlet.ModelAndView;
public class Interceptor implements HandlerInterceptor{
//拦截客户短发出的请求
public boolean perHandle(HttpServletRequest request,HttpServletResponse response,Object handler) throws Exception{
System.out.println("拦截器的preHandler方法");
return true;//放行
}
//用于拦截服务器发出的请求
public void perHandle(HttpServletRequest request,HttpServletResponse response,Object handler,ModelAndView modelAndView)
throws Exception{
System.out.println("拦截器的postHandler方法");
}
//视图渲染完毕后使用
@Override
public void afterCompletion(HttpServletRequest request,HttpServletResponse response,Object handler,Exception ex)throws Exception{
System.out.println("拦截器的afterCompletion()方法");
}
}
2.将拦截器配置到SpringMVC的配置文件中
<!-- 配置自定义的拦截器 -->
<mvc:interceptors>
<mvc:interceptor>
<!-- 拦截的请求路径 -->
<mvc:mapping path="/**/"/>
<!-- 不拦截的请求路径 -->
<mvc:exclude-mapping path="/g/testFileUpload"/>
<bean class="com.springmvc.interceptor.Interceptor">
</bean>
</mvc:interceptor>
</mvc:interceptors>
3.创建控制类controller
//拦截器的控制器
@RequestMapping(value="/testInterceptor")
public String testInterceptor() {
System.out.println("请求处理方法");
return "s";
}
4.创建请求页面测试
<a href="g/testInterceptor">超连接测试8:testInterceptor</a>
查看结果: