springmvc 全局异常解决方案

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

         系统的dao、service、controller出现都通过throwsException向上抛出,最后由springmvc前端控制器交由异常处理器进行异常处理,如下图:

springmvc 全局异常解决方案_第1张图片

springmvc提供全局异常处理器(一个系统只有一个异常处理器)进行统一异常处理。

1.自定义异常类:

package cn.itcast.ssm.exception;
 
public class CustomerException extends Exception{
	private String message;//异常信息
	public CustomerException(String message){
		this.message=message;
	}
	public String getMessage() {
		return message;
	}
	public void setMessage(String message) {
		this.message = message;
	}
}


2.定义一个全局异常处理器实现HandlerExceptionResolver接口

思路:

         系统遇到异常,在程序中手动抛出,dao抛给service、service给controller、controller抛给前端控制器,前端控制器调用全局异常处理器。

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

                  解析出异常类型

                  如果该 异常类型是系统 自定义的异常,直接取出异常信息,在错误页面展示

                  如果该 异常类型不是系统 自定义的异常,构造一个自定义的异常类型(信息为“未知错误”)

全局异常处理器类:
  1. package cn.itcast.ssm.exception;
     
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    import org.springframework.web.servlet.HandlerExceptionResolver;
    import org.springframework.web.servlet.ModelAndView;
     
    public class CustomerExceptionResolver implements HandlerExceptionResolver{
    	public ModelAndView resolveException(HttpServletRequest request,
    			HttpServletResponse response, Object handler, Exception ex) {
    		
    //		解析出异常类型
    //		如果该 异常类型是系统 自定义的异常,直接取出异常信息,在错误页面展示
    //		如果该 异常类型不是系统 自定义的异常,构造一个自定义的异常类型(信息为“未知错误”)
    		CustomerException customerException=null;
    		if(ex instanceof CustomerException){
    			customerException=(CustomerException)ex;
    		}else{
    			customerException=new CustomerException("未知错误!");
    		}
    		String message = customerException.getMessage();
    		ModelAndView modelAndView=new ModelAndView();
    		modelAndView.addObject("message", message);
    		modelAndView.setViewName("error");
    		return modelAndView;
    	}
     
    }
    


如果出现错误就转发到错误页面error.jsp,直接在error.jsp使用EL表达式获取异常信息显示:${message}

3.在sprimgmvc.xml中定义全局异常处理器类(与普通的handler配置基本相同)

  1. 
    
4.进行测试:对于修改页面抛出抛出异常信息:

1).handler层抛出异常

springmvc 全局异常解决方案_第2张图片

2).service层抛出异常信息


springmvc 全局异常解决方案_第3张图片

3)访问:

springmvc 全局异常解决方案_第4张图片


你可能感兴趣的:(Spring)