Spring MVC异常处理

异常处理思路
Spring MVC 在处理请求过程中出现异常信息交由异常处理器进行处理,自定义异常处理器可以实现一个系统的异常处理逻辑。
系统的 dao service controller 出现都通过 throws Exception 向上抛出,最后由 Spring MVC 的前端控制器交由异常处理器进行异常处理。
编写自定义异常实现类,并将实现类配置到 spring 容器中。
Spring MVC 中的异常处理特别有用,运行时的错误信息基本上都能够捕获到。

异常处理:服务器端进行异常补获,直接返回给前端。(如果服务器端代码出了异常)

自定义异常类
为了区别不同的异常 , 通常根据异常类型进行区分,这里我们创建一个自定义系统异常。

1)自定义异常类

package com.awb.exception;

/**
 * 自定义异常类
 */
public class AWBException extends Exception {

    private String errMessage;

    public AWBException() {
        super();
    }

    public AWBException( String errMessage) {
        super(errMessage);
        this.errMessage = errMessage;
    }

    public String getErrMessage() {
        return errMessage;
    }

    public void setErrMessage(String errMessage) {
        this.errMessage = errMessage;
    }
}

2)自定义异常处理器(//obj:当前发生异常的地方,包名+类名+方法名(形参)

package com.awb.exception;

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

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.PrintWriter;
import java.io.StringWriter;
import java.io.Writer;

/**
 * 自定义异常处理器
 */
public class CustomHandlerException implements HandlerExceptionResolver {

    @Override
    public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response,
                                         Object handler, Exception exception) {
        // 定义异常信息
        String msg;
        // 判断异常类型
        if (exception instanceof AWBException) {
            // 如果是自定义异常,读取异常信息
            msg = exception.getMessage();
        } else {
            // 如果是运行时异常,则取错误堆栈,从堆栈中获取异常信息
            Writer out = new StringWriter();
            PrintWriter s = new PrintWriter(out);
            exception.printStackTrace(s);
            msg = out.toString();
        }
        // 把错误信息发给相关人员,邮件,短信等方式
        // TODO

        // 返回错误页面,给用户友好页面显示错误信息
        ModelAndView modelAndView = new ModelAndView();
        modelAndView.addObject("msg", msg);
        modelAndView.setViewName("error");
        return modelAndView;
    }
}

3)异常处理器配置

    <!--spring mvc中的异常处理器配置-->
    <!--交由Spring框架,实例化CustomHandlerException,帮助我们创建对象。-->
    <bean id="customHandlerException" class="com.awb.exception.CustomHandlerException"/>

4)错误页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>Insert title here</title>
</head>
<body>

	<h1>系统发生异常了!</h1>
	<br />
	<h1>异常信息</h1>
	<br />
	<h2>${msg }</h2>

</body>
</html>



评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值