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
implementsHandlerExceptionResolver {
@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中抛出异常。
相关文章推荐
- 40个Java多线程问题总结
- struts2.1.8和hibernate4.3.11整合遇到的问题
- Java I/O模型与NIO解析
- 从头认识java-15.7 Map(1)-使用数组来简单模拟Map的创建
- java相关类型知识学习
- java中map,list一些知识点的总结
- Java和js时间格式化
- Java JDK源码
- Spring使用xml配置bean,主要是constructor-arg
- Spring文件上传配置
- Java常用工具类总结(二)
- day03-----------java 语言基础(基础语法)(传智视频)
- spring与timer的定时任务详解
- [Java开发之路](8)输入流和输出流
- java线程的全面讲解
- java3----java环境---jdk,jre(3)-----jdk和jre的理解3
- Java笔记12:Java对象排序
- java.lang.IllegalArgumentException: MALFORMED jar解析中文报错问题
- Java的接口与抽象类
- Genymotion关于eclipse和android stdio中的安装