day14-异常处理

[复制链接]
发表于 2023-2-19 22:51:14 | 显示全部楼层 |阅读模式
异常处理

1.基本介绍


  • SpringMVC 通过 HandlerExceptionResolver 处理程序的异常,包括 Handler映射、数据绑定以及目标方法执行时发生的异常
  • 有两种方案来进行异常处理:
    a.在本类编写处理异常的方法,将抛出的异常视为局部异常处理
    b.额外编写处理异常的类,将抛出的异常视为全局异常处理
  • 主要处理的是 Handler 中使用了 @ExceptionHandler 注解修饰的方法(局部异常处理)
  • ExceptionHandlerMethodResolver 内部若找不到上述 @ExceptionHandler 注解修饰的方法,就会去找有 @ControllerAdvice 注解修饰的类中含有  @ExceptionHandler 注解的方法,被 @ControllerAdvice 修饰的类称为全局处理器(全局异常处理)
  • 异常处理时,局部异常优先级高于全局异常
2.局部异常

2.1应用实例

(1)创建 MyExceptionHandler.java,在这个 Handler 中模拟各种出现的异常,并在本类添加处理可能出现的异常的方法(局部异常)
局部异常的处理方法只能处理本类中出现的异常。
  1. package com.li.web.exception;
  2. import org.springframework.stereotype.Controller;
  3. import org.springframework.web.bind.annotation.ExceptionHandler;
  4. import org.springframework.web.bind.annotation.RequestMapping;
  5. import javax.servlet.http.HttpServletRequest;
  6. /**
  7. * @author 李
  8. * @version 1.0
  9. */
  10. @Controller
  11. public class MyExceptionHandler {
  12.     /**
  13.      * 1.localException()方法处理局部异常
  14.      * 2.指定处理 算术异常、空指针异常
  15.      * 3. Exception ex 本类生成的异常对象,会传递给ex,通过ex可以拿到相关信息,
  16.      *      在这里可以加入业务逻辑
  17.      * @param ex
  18.      * @param request
  19.      * @return
  20.      */
  21.     @ExceptionHandler({ArithmeticException.class, NullPointerException.class})
  22.     public String localException(Exception ex, HttpServletRequest request) {
  23.         System.out.println("局部异常信息是=" + ex.getMessage());
  24.         //如何将异常的信息带到下一个页面(根据你的业务逻辑)
  25.         request.setAttribute("reason", ex.getMessage());
  26.         return "exception_mes";
  27.     }
  28.     /**
  29.      * 1.编写方法,模拟异常-算术异常
  30.      * 2.如果我们不做异常处理,是由tomcat默认页面处理
  31.      * @param num
  32.      * @return
  33.      */
  34.     @RequestMapping(value = "/testException01")
  35.     public String test01(Integer num) {
  36.         int i = 9 / num;
  37.         return "success";
  38.     }
  39. }
复制代码
(2)exception_mes.jsp
  1. <%@ page contentType="text/html;charset=UTF-8" language="java" %>
  2. <html>
  3. <head>
  4.     <title>异常信息</title>
  5. </head>
  6. <body>
  7. <h1>异常信息提示</h1>
  8. <h4>${requestScope.reason}</h4>
  9. </body>
  10. </html>
复制代码
(3)测试,直接访问 http://localhost:8080/springmvc/testException01?num=0,显示结果如下:
捕获到了异常,SpringMVC 底层反射调用了 localException 方法进行异常处理,跳转到了 exception_mes.jsp 页面提示异常信息。
如果我们没有处理异常,默认是由 tomcat 进行异常处理
2.2执行流程

从发生异常到捕获异常并调用处理方法,局部异常处理的整个执行流程是怎样的呢?
第一步:浏览器访问目标方法,如果出现异常,会到 ExceptionHandlerMethodResolver 类中执行 resolveMethodByExceptionType() 方法
第二步:执行resolveMethodByExceptionType() 方法,得到处理异常的方法。
[code]@Nullablepublic Method resolveMethodByExceptionType(Class

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
回复

使用道具 举报

登录后关闭弹窗

登录参与点评抽奖  加入IT实名职场社区
去登录
快速回复 返回顶部 返回列表