SpringMVC(5)

SpringMVC(5)

SpringMVC的异常处理

异常处理流程:

dao ==> service ==> web ==> 前端控制器 ==> 页面
如果不处理异常,那么直接会将异常抛到页面上

解决方法:

在前端控制器中配置异常处理器,进行异常处理

(1)编写自定义异常类,做提示信息的
(2)编写异常处理器
(3)配置异常处理器,用于跳转异常页面

具体代码:

index.jsp首页:

<a href="user/testException">testException</a>

SysException.java自定义的异常类:系统异常

public class SysException extends Exception{

    // 存储提示信息
    private String message;

    public String getMessage() {
        return message;
    }

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

    public SysException(String message) {
        this.message = message;
    }
}

SysExceptionResolver.java异常处理器类:需要实现HandlerExceptionResolver接口

public class SysExceptionResolver implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler, Exception ex) {
        // 获取到异常对象
        SysException e = null;
        if (ex instanceof SysException){
            e = (SysException) ex;
        }else {
            e = new SysException("系统正在维护");
        }

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

        return mv;
    }
}

springmvc.xml:配置异常处理器,用于跳转异常页面

<bean id="sysExceptionResolver" class="com.Lemon.exception.SysExceptionResolver"/>

UserController控制器类:

@Controller
@RequestMapping("/user")
public class UserController {

    /**
     * SpringMVC的异常处理
     */
    @RequestMapping("/testException")
    public String testException() throws Exception{
        System.out.println("testException执行了...");

        // 模拟异常
        try {
            int a = 10 / 0;
        } catch (Exception e) {
            // 打印异常信息
            e.printStackTrace();
            // 抛出自定义异常信息
            throw new SysException("查询所有用户出现错误了...");
        }

        return "success";
    }

}

error.jsp页面:

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

    ${errorMsg}

</body>
</html>

由于在异常处理器类SysExceptionResolver中创建ModelAndView对象:

        ModelAndView mv = new ModelAndView();
        mv.addObject("errorMsg", e.getMessage());
        mv.setViewName("error");

当有异常时,SpringMVC会将异常捕获,并把异常存储到ModelAndView对象中(mv.addObject("errorMsg", e.getMessage());),同时设置了跳转的视图页面(mv.setViewName("error");)。

因此出现异常,不会跳转到success.jsp页面,而是跳转到error.jsp页面。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值