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)异常处理器配置

    
    
    

4)错误页面

<%@ page language="java" contentType="text/html; charset=UTF-8"
	pageEncoding="UTF-8"%>




Insert title here



	

系统发生异常了!


异常信息


${msg }




你可能感兴趣的:(服务器端)