1.异常处理
定义异常处理类,HandlerExceptionResolver: SpringMVC提供异常处理接口
ModelAndView mv = new ModelAndView();
//设置错误页面
mv.setViewName("error");
//设置错误提示
mv.addObject("error",e.getMessage());
有两种方式让异常处理类生效:1.在异常处理类注释@Component 2.在springMVC.xml配置<bean class="com.it.controller.exceptions.MyExceptionHandler"/>
2.拦截器
- springmvc的拦截器是属于springmvc的技术,只能在使用springmvc的技术上,才可以使用其拦截器
- 拦截的请求: 只能拦截springmvc的请求(只能拦截控制器)
- 作用:同filter
过滤器Filter的作用范围比拦截器大。
定义拦截器,HandlerInterceptor: SpringMVC拦截器接口
preHandle: 在执行控制器的方法之前被调用
返回值:
false: 不放行,不会执行目标控制器的方法
true: 放行。接着执行目标控制器的方法。且afterCompletion方法在true的时候,必定会执行。
postHandle: 在执行控制器的方法成功(没有异常)的之后才会被调用
afterCompletion: 在控制器方法执行的最终被调用(不管控制器的方法有无异常) 类似finally
配置拦截器:
<!-- 配置拦截器 -->
<mvc:interceptors>
<!-- mvc:interceptor: 配置拦截器 -->
<mvc:interceptor>
<!--
path: 需要拦截的路径
/* : 拦截当前目录下(一级目录)的所有资源
例如: /account OK
/account/save 不OK
/**: 拦截当前目标任意目录(包括子目录,孙目录等)
例如: /account OK
/account/save OK
/account/save/list OK
-->
<mvc:mapping path="/**"/>
<bean class="com.it.controller.b_interceptor.Demo1Interceptor"/> //目标地址
</mvc:interceptor>
</mvc:interceptors>
多个拦截器的执行顺序:1.Demo1的preHandle 2.Demo2的preHandle 3.控制器的方法(目标) 4.Demo2的postHandle 5.Demo1的postHandele 6.Demo2.afterCompletion 7.Demo1的AfterCompletion