springmvc 全局异常解决方案

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

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


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

1.自定义异常类:

  1. package cn.itcast.ssm.exception;  
  2.   
  3. public class CustomerException extends Exception{  
  4.     private String message;//异常信息  
  5.     public CustomerException(String message){  
  6.         this.message=message;  
  7.     }  
  8.     public String getMessage() {  
  9.         return message;  
  10.     }  
  11.     public void setMessage(String message) {  
  12.         this.message = message;  
  13.     }  
  14. }  
2.定义一个全局异常处理器实现HandlerExceptionResolver接口

思路:

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

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

                  解析出异常类型

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

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

全局异常处理器类:
  1. package cn.itcast.ssm.exception;  
  2.   
  3. import javax.servlet.http.HttpServletRequest;  
  4. import javax.servlet.http.HttpServletResponse;  
  5.   
  6. import org.springframework.web.servlet.HandlerExceptionResolver;  
  7. import org.springframework.web.servlet.ModelAndView;  
  8.   
  9. public class CustomerExceptionResolver implements HandlerExceptionResolver{  
  10.     public ModelAndView resolveException(HttpServletRequest request,  
  11.             HttpServletResponse response, Object handler, Exception ex) {  
  12.           
  13. //      解析出异常类型  
  14. //      如果该 异常类型是系统 自定义的异常,直接取出异常信息,在错误页面展示  
  15. //      如果该 异常类型不是系统 自定义的异常,构造一个自定义的异常类型(信息为“未知错误”)  
  16.         CustomerException customerException=null;  
  17.         if(ex instanceof CustomerException){  
  18.             customerException=(CustomerException)ex;  
  19.         }else{  
  20.             customerException=new CustomerException("未知错误!");  
  21.         }  
  22.         String message = customerException.getMessage();  
  23.         ModelAndView modelAndView=new ModelAndView();  
  24.         modelAndView.addObject("message", message);  
  25.         modelAndView.setViewName("error");  
  26.         return modelAndView;  
  27.     }  
  28.   
  29. }  
如果出现错误就转发到错误页面error.jsp,直接在error.jsp使用EL表达式获取异常信息显示:${message}

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

  1. <!-- 全局异常处理 -->  
  2.     <bean class="cn.itcast.ssm.exception.CustomerExceptionResolver"></bean>  
4.进行测试:对于修改页面抛出抛出异常信息:

1).handler层抛出异常

2).service层抛出异常信息



3)访问:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值