您的位置:首页 > 编程语言 > Java开发

springmvc注解开发-高级之异常处理

2015-12-30 14:22 429 查看

1      异常处理

1.1      异常处理思路

 

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

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



1.2      自定义异常类

 

对不同的异常类型定义异常类,继承Exception。

 为了区别不同的异常通常根据异常类型自定义异常类,这里我们创建一个自定义系统异常,如果controller、service、dao抛出此类异常说明是系统预期处理的异常信息。

 

         public
class
CustomException extends Exception {
 
   
/** serialVersionUID*/
    private
static final
long
serialVersionUID = -5212079010855161498L;
   
    public CustomException(String
message){
       super(message);
       this.message =
message;
    }
 
   
//异常信息
    private String
message;
 
    public String getMessage() {
       return
message;
    }
 
    public
void
setMessage(String message) {
       this.message = message;
    }
}
 
 

1.3自定义异常处理器

 

思路:

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

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

                  解析出异常类型

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

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

 

springmvc提供一个HandlerExceptionResolver接口

public
class
CustomExceptionResolver
implements
HandlerExceptionResolver {
 
   
@Override
    public ModelAndView resolveException(HttpServletRequestrequest,
           HttpServletResponse response, Object handler, Exceptionex) {
 
       ex.printStackTrace();
 
       CustomException customException =
null;
      
      
//如果抛出的是系统自定义异常则直接转换
       if(ex
instanceof CustomException){
           customException = (CustomException)ex;
       }else{
          
//如果抛出的不是系统自定义异常则重新构造一个未知错误异常。
           customException =
new
CustomException("未知错误,请与系统管理员联系!");
       }
      
       ModelAndView
modelAndView = new ModelAndView();
      
modelAndView.addObject("message", customException.getMessage());
      
modelAndView.setViewName("error");
 
       return
modelAndView;
    }
 
}
 

1.4错误页面

 

<%@
page language="java"contentType="text/html; charset=UTF-8"
   pageEncoding="UTF-8"%>
<%@
taglib uri="http://java.sun.com/jsp/jstl/core"prefix="c"
%>
<%@
taglib uri="http://java.sun.com/jsp/jstl/fmt" 
prefix="fmt"%>

<!DOCTYPE
htmlPUBLIC
"-//W3C//DTDHTML 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>错误页面</title>
 
</head>
<body>
您的操作出现错误如下:<br/>
${message }
</body>
 
</html>

1.5 异常处理器配置

在springmvc.xml中添加:

 

<!--
异常处理器 -->
   
<bean id="handlerExceptionResolver"class="cn.itcast.ssm.controller.exceptionResolver.CustomExceptionResolver"/>
 

1.6    异常测试

 

在controller、service、dao中任意一处需要手动抛出异常。

如果是程序中手动抛出的异常,在错误页面中显示自定义的异常信息,如果不是手动抛出异常说明是一个运行时异常,在错误页面只显示“未知错误”。

 

在商品修改的controller方法中抛出异常 .


 

 

在service接口中抛出异常:

 


如果与业务功能相关的异常,建议在service中抛出异常。

与业务功能没有关系的异常,建议在controller中抛出。

 

上边的功能,建议在service中抛出异常。

 
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: