1.异常出现分析

如果出现了异常,那么异常会一层层网上报,如果一直没有处理,那么错误信息就会在浏览器端显示。

但是如果我们再配置一个异常处理器,然后再配置与此相关的组件,那么异常出现之后,就会被异常处理器所处理(跳转到提示压面),而不会直接暴露给前端。

2.编写异常类

该类用于提示异常信息:

package com.eastnotes.exception;

/**
 * 自定义异常类
 */
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.模拟异常信息

@RequestMapping("/testException")
public String testException() throws Exception{
    System.out.println("testException执行了");

    try {
        int i = 10/0;
    } catch (Exception e) {
        //控制台输出信息
        e.printStackTrace();

        //抛出自定义异常提示信息
        throw new SysException("查询所有用户出现问题了");
    }

    return "success";
}

这里我们直接在Web层输出异常,捕获后网上抛出,让前端控制器去处理。

4.编写异常控制类

/**
 * 异常处理器
 */
public class SysExceptionResolver implements HandlerExceptionResolver {
    @Override
    public ModelAndView resolveException(HttpServletRequest httpServletRequest, HttpServletResponse httpServletResponse, Object o, Exception ex) {
        //获取到异常对象
        SysException e = null;
        if(ex instanceof SysException){
            e = (SysException)ex;
        }else{
            e = new SysException("系统维护中");
        }

        //创建ModelAndView对象
        ModelAndView mv = new ModelAndView();
        mv.addObject("msg",e.getMessage());
        mv.setViewName("error");

        return mv;
    }
}

函数中的ex对象是模拟异常信息时抛出的对象。

5.配置异常处理器

在SpringMVC的配置文件中,配置异常处理器,把他当做bean对象配置就可以了。

<!--配置异常处理器-->
<bean id="sysExceptionResolver" class="com.eastnotes.exception.SysExceptionResolver"></bean>

6.配置提示页面

error.jsp:

<%@ page contentType="text/html;charset=UTF-8" language="java" isELIgnored="false" %>
<html>
<head>
    <title>Title</title>
</head>
<body>
    ${errorMsg}
</body>
</html>