SSM|SpringMVC拦截器 & SpringMVC异常处理


文章目录

  • SpringMVC拦截器 & SpringMVC异常处理
  • 一、拦截器(interceptor)的作用
    • 1、拦截器于过滤器的区别
  • 二、拦截器的使用
  • 三、SpringMVC异常处理概论
    • 1、SpringMVC异常处理的方式
      • 1.1、简单异常处理器SimpleMappingExceptionResolver
      • 1.2、自定义自己的异常处理器

SpringMVC拦截器 & SpringMVC异常处理 一、拦截器(interceptor)的作用
SpringMVC的拦截器与JavaWeb阶段的Servlet开发中的过滤器Filter非常相像。
其作用是用来对处理器进行预处理和后处理。
当多个拦截器按照一定的顺序结成一条链,那么这条链就被称为拦截器链(Interceptor Chain)
在访问被拦截的方法或字段时,拦截器链中的拦截器就会按其之前定义的顺序被调用。拦截器也是AOP思想的具体实现。
1、拦截器于过滤器的区别
区别 过滤器 拦截器
使用范围 是servlet规范的一部分,任何JavaWeb工厂都可以使用 是springMVC框架自己使用的,只有使用了springMVC框架的工程才能用
拦截范围 在url-pattern中配置了/*之后,可以对所有要访问的资源拦截 在< mvc:mapping path=“”/ >中配置了/**之 后,也可以多所有资源进行拦截,但是可以通 过标签 排除不需要拦截的资源
二、拦截器的使用
  1. 创建拦截器类实现HandlerInterceptor接口
  2. 配置拦截器
  3. 测试拦截器的拦截效果
public class PrivilegeIntercepetor implements HandlerInterceptor {@Override public boolean preHandle(HttpServletRequest request, HttpServletResponse response, Object handler) throws Exception { //在目标方法执行之前执行(这个经常用) //比如用于判断用户是否已经登录 }@Override public void postHandle(HttpServletRequest request, HttpServletResponse response, Object handler, ModelAndView modelAndView) throws Exception { //目标方法执行之后,视图对象返回之前执行 //这里有一个ModelAndView,可以用于修改controlet存进域里面的数据 }@Override public void afterCompletion(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) throws Exception { //在目标方法执行之后,视图对象返回之前执行 //不常用,一般用来收尾 } }

SSM|SpringMVC拦截器 & SpringMVC异常处理
文章图片

三、SpringMVC异常处理概论
学习Java以来,遇到的异常主要是两种
  • 预期异常:通过捕获异常进而获取异常信息(try …catch…)
  • 运行时异常RuntimeException:通过规范代码开发、测试等手段减少运行时异常的出现
在SpringMVC框架中,系统产生的异常都可以由框架统一处理,从而返回特定的报错视图或者把错误信息存进日志
系统的Dao、Service、Controller出现异常的时候,都用throw Exception向上抛出,最后Spring前端控制器交由异常处理器进行处理
SSM|SpringMVC拦截器 & SpringMVC异常处理
文章图片

1、SpringMVC异常处理的方式
  • 使用Spring MVC提供的简单异常处理器SimpleMappingExceptionResolver
  • 实现Spring的异常处理接口HandlerExceptionResolver 自定义自己的异常处理器
1.1、简单异常处理器SimpleMappingExceptionResolver
简单异常处理器的使用就很简单了,SpringMVC已经自定义好了该类型转换器,使用的时候只需要根据项目进行相应异常与视图的映射配置即可
SSM|SpringMVC拦截器 & SpringMVC异常处理
文章图片

这里的视图显示顺序也很简单,首先会寻找Spring处理的异常是否在map里面,如果是是则执行对应的代码返回对应的视图,如果不是则在显示默认错误视图
1.2、自定义自己的异常处理器
步骤:
① 创建异常处理器类实现HandlerExceptionResolver
public class MyExceptionResolver implements HandlerExceptionResolver { @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { //判断该异常是否是自己想要处理的异常 if(e instandceof MyException){ //处理异常的代码实现 //创建ModelAndView对象 ModelAndView modelAndView = new ModelAndView(); //返回对应的错误视图 modelAndView.setViewName("exceptionPage"); } return modelAndView; } }

② 配置异常处理器

③ 编写异常页面
【SSM|SpringMVC拦截器 & SpringMVC异常处理】④ 测试异常跳转

    推荐阅读