SpringMVC 应用开发
1 基础概念介绍
2 返回值处理
3 参数绑定处理
4 RequestMapping注解
5 RESTful支持
6 拦截器应用
7 CORS跨域解决方案
8 Mock测试(模拟测试)
9 ControllerAdvice
10 乱码解决
11 非注解开发方式
处理器拦截器 是针对 处理器进行配置。根据请求url 在处理映射器中 找对应的 处理器(Handler Controller 类)。
一、处理器拦截器介绍
- SpringMVC 拦截器( Interceptor )实现对每一个请求处理前后进行相关的业务处理,类似与
servlet 中的Filter。 - SpringMVC 中的 Interceptor 拦截请求是通过 HandlerInterceptor 接口来实现的。
在 SpringMVC 中定义一个 Interceptor 非常简单,主要有4种方式:
- 实现 SpringMVC 的 HandlerInterceptor 接口;
- 继承实现了 HandlerInterceptor 接口的类,比如 SpringMVC 已经提供的实现了
HandlerInterceptor 接口的抽象类 HandlerInterceptorAdapter ; - 实现 SpringMVC 的 WebRequestInterceptor 接口;
- 继承实现了 WebRequestInterceptor 的类;
二、定义拦截器
处理器拦截器有三种方法
- 请求过程中拦截器: perHandler
- 响应过程中拦截器:
- postHandler 没有处理 Model and View 对象之前。
- afterHandler
实现 HandlerIntercepter 接口:
public class MyHandlerIntercepter implements HandlerInterceptor {
//Handler执行前调用
// 应用场景:登录认证、身份授权
// 返回值为true则是放行,为false是不放行
@Override
public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception {
return false;
}
//进入Handler开始执行,并且在返回ModelAndView之前调用
// 应用场景:对ModelAndView对象操作,可以把公共模型数据传到前台,可以统一指定视图
@Override
public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView)
throws Exception {
}
//执行完Handler之后调用
// 应用场景:统一异常处理、统一日志处理
@Override
public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex)
throws Exception {
}
}
三、 配置拦截器
SpringMVC 拦截器是绑定在 HandlerMapping 中的,即:如果某个 HandlerMapping 中配置拦截,则
该 HandlerMapping 映射成功的 Handler 会使用该拦截器。
SpringMVC 的全局拦截器配置,其实是把配置的拦截器注入到每个已初始化的 HandlerMapping 中
了。
<!-- 配置全局mapping的拦截器 -->
<mvc:interceptors>
<!-- 公共拦截器可以拦截所有请求,而且可以有多个 -->
<bean class="com.kkb.ssm.interceptor.MyHandlerInterceptor"/>
<bean class="com.kkb.ssm.interceptor.MyHandlerInterceptor2"/>
<!-- 如果有针对特定URL的拦截器,则进行以下配置 -->
<mvc:interceptor>
<!-- /**表示所有URL和子URL路径 -->
<mvc:mapping path="/orders/**"/>
<!-- 特定请求的拦截器只能有一个 -->
<bean class="com.kkb.ssm.interceptor.MyHandlerInterceptor3"/>
</mvc:interceptor>
</mvc:interceptors>
多拦截器拦截规则
如果有多个拦截器,那么配置到springmvc.xml
中最上面的拦截器,拦截优先级最高。