54、错误处理-【源码流程】异常处理流程

54、错误处理-【源码流程】异常处理流程

#### 异常处理流程概述

1. **执行目标方法**:

   - 程序执行目标方法,期间若发生异常,会被捕获并记录,标志当前请求结束。

   - 将异常信息赋值给 `dispatchException` 变量。

2. **进入视图解析流程**:

   - 调用 `processDispatchResult` 方法,处理请求结果和异常。

3. **处理异常**:

   - **遍历异常解析器**:

     - 调用所有注册的 `HandlerExceptionResolver` 解析器,尝试处理异常。

   - **系统默认异常解析器**:

     - `DefaultErrorAttributes` 将异常信息保存到 `request` 域的 `ERROR_ATTRIBUTE` 中,并返回 `null`。

     - 由于默认情况下没有其他解析器能处理异常,异常会被继续抛出。

4. **转发到错误处理页面**:

   - 底层检测到未处理的异常后,会转发请求到 `/error` 路径。

   - `BasicErrorController` 处理 `/error` 请求:

     - 获取异常信息,设置响应状态码。

     - 查找并渲染错误页面视图:

       - 若存在对应的错误页面(如 `error/500.html`),则返回该页面。

       - 若未找到,则返回默认的 `error` 视图。

#### 关键组件

1. **`HandlerExceptionResolver`**:

   - 异常解析器接口,用于处理控制器中抛出的异常。

   - `DefaultErrorAttributes` 实现了该接口,负责保存异常信息。

2. **`BasicErrorController`**:

   - 处理 `/error` 请求的控制器,负责返回错误响应。

   - 根据请求类型和错误信息,选择合适的视图进行渲染。

3. **`DefaultErrorViewResolver`**:

   - 默认的错误视图解析器,根据响应状态码查找对应的错误页面。

#### 总结

该异常处理流程通过多层机制,确保异常信息能够被捕获并展示给用户或开发者,提升了应用程序的健壮性和可维护性。

你可能感兴趣的:(java,服务器,前端,高考,javascript)