SSM整合之异常处理

1 篇文章 0 订阅

异常处理思路

系统中异常包括两类:预期异常和运行时异常RuntimeException,前者通过捕获异常从而获取异常信息,后者主要通过规范代码开发、测试通过手段减少运行时异常的发生。

系统的dao、service、controller出现都通过throws Exception向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图:
在这里插入图片描述
springmvc提供全局异常处理器进行统一的异常处理,一个系统只有一个异常处理器

自定义异常类

对不同的异常类型定义异常类,继承Exception。

package com.hrm.error;
/*
*  系统自定义异常类*/
public class CustomException extends Exception{
    //异常信息
    public String message;
    public CustomException(String message){
        super(message);
        this.message = message;
    }

    @Override
    public String getMessage() {
        return message;
    }

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

全局异常处理器

思路:

系统遇到异常时,在程序中手动抛出,dao抛给service,service再抛给Controller,最后Controller抛给前端控制器,前端控制器调用全局异常处理器

全局异常处理器处理思路:

解析出异常类型,若该异常类型是系统自定义的异常,直接取出异常信息在错误页面展示即可。
如果不是系统自定义异常,构造一个系统自定义的异常类型,信息为“未知错误”

springmvc提供一个HandlerExceptopnResolver

package com.hrm.error;

import org.springframework.web.servlet.HandlerExceptionResolver;
import org.springframework.web.servlet.ModelAndView;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class CustomExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception e) {
        // 解析出异常类型
        CustomException customException = null;
        // 若该异常类型是系统自定义的异常,直接取出异常信息在错误页面展示即可。
        if(e instanceof CustomException){
            customException = (CustomException)e;
        }else{
            // 如果不是系统自定义异常,构造一个系统自定义的异常类型,信息为“未知错误”
            customException = new CustomException("未知错误");
        }
        //错误信息
        String message = customException.getMessage();
        ModelAndView modelAndView = new ModelAndView();
        //将错误信息传到页面
        modelAndView.addObject("message",message);
        //指向错误页面
        modelAndView.setViewName("/jsp/error.jsp");
        return modelAndView;


    }
}

错误页面

<%--
  Created by IntelliJ IDEA.
  User: 15757
  Date: 2019/4/10
  Time: 16:38
  To change this template use File | Settings | File Templates.
--%>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
    <title>页面出错,请稍后访问</title>
</head>
<body>

${message}

</body>
</html>

springmvc.xml中的配置全局异常处理器

<!-- 配置异常解析器 -->
    <bean class="com.hrm.error.CustomExceptionResolver"></bean>
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
SSM框架的全局异常处理一般可以通过以下步骤实现: 1. 在Spring配置文件中配置异常解析器(HandlerExceptionResolver),以捕获所有Controller中出的异常。 2. 实现一个自定义异常类,并继承Exception类,用于在程序中出自定义异常。 3. 在Controller中出自定义异常,并在自定义异常类中添加构造函数,以方便传递异常信息。 4. 在异常解析器中处理异常,根据异常类型返回不同的错误信息。 下面是一个简单的实现示例: 1. 在Spring配置文件中配置异常解析器: ``` <bean class="org.springframework.web.servlet.handler.SimpleMappingExceptionResolver"> <property name="exceptionMappings"> <props> <prop key="java.lang.Exception">error</prop> </props> </property> <property name="defaultErrorView" value="error"/> </bean> ``` 2. 自定义异常类: ``` public class MyException extends Exception { public MyException(String message) { super(message); } } ``` 3. 在Controller中出自定义异常: ``` @RequestMapping("/test") public String test() throws MyException { throw new MyException("test exception"); } ``` 4. 在异常解析器中处理异常: ``` @Override public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) { ModelAndView modelAndView = new ModelAndView(); if (ex instanceof MyException) { modelAndView.addObject("message", ex.getMessage()); modelAndView.setViewName("error"); } else { modelAndView.addObject("message", "unknown error"); modelAndView.setViewName("error"); } return modelAndView; } ``` 在上面的示例中,如果Controller中出MyException异常,则异常解析器会返回错误信息"test exception",否则返回"unknown error"。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值