SpringMVC框架 - 异常处理 - 指南

异常处理

什么叫异常处理?

异常处理:是指程序在运行过程中出现错误或异常情况时,通过特定机制来捕获、处理和恢复的过程。

异常处理机制

  1. 捕获异常:try - catch - finally
  2. 声明异常:throws
  3. 抛出异常:throw
  4. 自定义异常

为什么要进行异常处理?

为了增强程序的健壮性和可用性。

  1. 防止程序崩溃;
  2. 将错误处理代码与核心业务逻辑分离;
  3. 提供错误信息和定位问题;
  4. 确保资源被正确释放

如果不进行异常处理,会造成什么问题?

  1. 程序崩溃
  2. 资源泄露
  3. 数据不一致
  4. 安全问题

异常处理的场景

  1. I/O操作
  2. 网络通信
  3. 数据库操作
  4. 参数验证

SpringMVC框架 - 异常处理

异常处理思路

Controller层调用Service层,Service层调用Dao层,异常都是向上抛出,最终由DispatcherServlet(前端控制器)找异常处理器进行异常的处理。

使用try - catch处理异常

package com.qcby.demo3;
import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.RequestMapping;
@RequestMapping("/role")
@Controller
public class RoleController {
/**
* 自己处理异常
* @return
*/
@RequestMapping("/findAll.do")
public String findAll(){
try {
System.out.println("执行了……");
// 模拟异常
int a = 10/0;
}catch (Exception e){
e.printStackTrace();
}
return "suc";
}
}

自定义异常处理

  1. Controller代码
    package com.qcby.demo3;
    import org.springframework.stereotype.Controller;
    import org.springframework.web.bind.annotation.RequestMapping;
    @RequestMapping("/role")
    @Controller
    public class RoleController {
    /**
    * 使用异常处理器方式
    * @return
    */
    @RequestMapping("/findAll.do")
    public String findAll(){
    System.out.println("执行了……");
    // 模拟异常
    int a = 10/0;
    return "suc";
    }
    }
  2. 自定义异常类
    package com.qcby.demo3;
    // 普通类继承异常类,
    public class SysException extends Exception {
    private String message;
    @Override
    public String getMessage() {
    return message;
    }
    public void setMessage(String message) {
    this.message = message;
    }
    public SysException(String message) {
    this.message = message;
    }
    }
  3. 自定义异常处理器
    package com.qcby.demo3;
    import org.springframework.web.servlet.HandlerExceptionResolver;
    import org.springframework.web.servlet.ModelAndView;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    /**
    * 异常处理器
    */
    public class SysExceptionResolver implements HandlerExceptionResolver {
    /**
    * 程序出现异常,调用异常处理器中的方法
    * @param httpServletRequest
    * @param httpServletResponse
    * @param o
    * @param e
    * @return
    */
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
    // 在控制台打印异常信息
    e.printStackTrace();
    // 做强转
    SysException exception = null;
    // 判断
    // instanceof父子类之间的强转,判断是否为某个类的真身
    if(e instanceof  SysException){
    exception = (SysException)e;
    }else {
    exception = new SysException("系统正在维护,请联系管理员");
    }
    // 存入异常提示信息
    ModelAndView mv = new ModelAndView();
    mv.addObject("errorMsg",e.getMessage());
    // 设置跳转的页面
    mv.setViewName("error");
    return mv;
    }
    }
  4. 在springmvc.xml中配置异常处理器
    <!--配置异常处理器-->
    <bean id="sysExceptionResolver" class="com.qcby.demo3.SysExceptionResolver"></bean>
  5. jsp页面
    <%@ page contentType="text/html;charset=UTF-8" language="java" %>
    
    
        错误提示页面
    
    
        

    错误的友好提示页面

    异常处理器 ${errorMsg}
posted @ 2025-12-18 17:49  clnchanpin  阅读(49)  评论(0)    收藏  举报