springmvc中的异常处理

异常分类

异常分类包括可预期的异常和运行时异常,一般开发人员主要关注可预期异常。
可预期异常即在开发中,开发人员可以预料的异常,所以开发人员可以通过定义不同的异常类型,并对其进行管理,根据类型有针对的进行异常处理。
对于运行时异常,应该在系统测试阶段加强测试,将运行时异常测试出来修改bug,从而降低运行时异常的出现概率。如果系统运行时出现运行时异常,一般提示“系统繁忙,,系统出错请与管理员联系。。。”

  • 自定义异常类型
    步骤:
    1.创建一个类,使这个类继承Exception类
    2.创建一个成员变量,用于表示异常信息,并提供get、set方法
    3.创建构造函数,并将异常信息传递进去
    代码实现:
public class CustomException extends Exception {
    private static final long serialVersionUID = 1L;

    // 定义一个成员变量,用于接收异常信息
    private String message;

    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    // 创建一个构造方法
    public CustomException(String message) {
        super(message);
        this.message = message;
    }
}
springmvc进行异常处理

springmvc提供的异常处理器接口HandlerExceptionResolver,开发者可以通过自定义异常处理器对系统中异常进行处理。
- 异常处理器:
就是定义一个类,让其去实现HandlerExceptionResolver接口,重写resolveException方法——-此处如果不明白,请继续往下看
- 异常处理流程:
1.异常发生(一般发生在controller、service、dao)—-一般service和dao层的异常都是抛出到controller层进行try…catch处理
2.自定义异常处理器捕获到异常
3.判断异常类型并进行处理
这里写图片描述
- 异常处理原理:
在dao中预期异常抛给service,service又抛给controller,controller将异常抛给前端控制器,由前端控制器去调用异常处理器执行异常,参考下边的源代码:
这里写图片描述

自定义异常处理器
  • 实现流程
    1.创建一个类,实现Handler’ExceptionResolver接口
    2.重写resolveException方法
    3.判断抛出的异常是否与自定义异常类型一致
    4.如果一致,将异常转换为对应的自定义异常类型
    5.如果不一致,创建自定义异常,并通过有参构造设置message
    6.创建ModelAndView
    7.将异常的message设置到session中
    8.设置逻辑视图
    9.返回ModelAndView
    10.在springmvc.xml中配置自定义处理器
  • 实现代码
public class CustomExceptionResolver implements HandlerExceptionResolver {

    private CustomException customException = null;

    /**
     * 参数分析: handler:通过url映射找到的处理器的对象 ex:异常对象
     */
    @Override
    public ModelAndView resolveException(HttpServletRequest request,
            HttpServletResponse response, Object handler, Exception ex) {
        // 判断异常是否与自定义异常相同instanceof执行以下操作,判断是否为true
        //----ex.getPrototypeOf(o) ===CustomException.prototype
        if (ex instanceof CustomException) {
            // 找到自定义异常类型,将异常转换为自定义异常类型----生名一个成员变量
            customException = (CustomException) ex;
        } else {
            // 没有找到,说明不是预期异常,创建自定义异常并给错误信息赋值
            customException = new CustomException("请联系管理员");
        }

        // 创建ModelAndView对象,将异常信息放入session中
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("message", customException.getMessage());
        // 设置跳转逻辑视图
        modelAndView.setViewName("error");
        // 返回ModelAndView对象
        return modelAndView;
    }
}
springmvc.xml中:
<bean class="自定义异常处理器的全路径"></bean>
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值