【异常的由来】
任务与预先设定的规则不相符的情况都可以称之为异常。但凡业务逻辑操作,都会划定一些边界或规则,但是往往事与愿违,总会有调皮鬼来挑战系统的健壮性。这些调皮鬼包括:
1、系统用户。用户并不都是知道潜规则的,比如用户的银行账户中只有100块钱,但是用户不查询就直接取200块。
2、开发人员。码农有时候太过自信了,比如你在编写文件下载功能时忽略了文件有可能不存在这个分支流程。
3、运行环境。软件系统也是要靠天吃饭的,谁都保不准网络一直畅通,硬盘一直稳定。
【异常处理框架】
有问题我们就要解决问题,如果问题解决不了,那么就把问题的影响面降到最低。对于异常也是如此,为了提高健壮性,需要对于异常进行兼容。处理异常一个很重要的原则是不逃避,不歪曲。吞异常与提供错误的异常信息一样罪恶。对于异常的处理框架可以大致分为以下几点:
1、异常类封装。根据异常产生的原因,我们把异常封装为两类,分别是业务逻辑异常(BusinessException)和系统编程异常(ProgramException),分类的目的是进行分类处理。
2、异常检测类。这是产生异常的地方,包括了业务逻辑检测(对于不符合业务逻辑的情况封装异常抛出),还包括了对于底层异常的转化封装(比如将数据库操作产生的异常捕获并封装为ProgramException)。
3、异常处理类。这是异常的终点,在此异常会以一种比较合适的方式对系统运维人员和系统的用户进行优雅的展示(比如记录日志或者页面提示)。
同时,为了统一的编码风格,我们对于异常的处理做如下约定:
1、只有最靠近用户的层面才会最终处理异常。这个用户包括了系统真实的自然人用户,也包括了一些系统,比如定时器或者命令行交互等。其他各层只负责捕获底层的异常并向上传递即可。
2、对于系统编程异常,对用户进行统一的提示语,并记录异常日志,通过监控系统用户系统运维人员进行监控告警。
3、对于业务逻辑异常,需要根据不同的异常类型以及上下文情况,对用户进行友好性的提示。同时考虑到对于用户的提示属于产品文案的一部分,可能会经常变化的特点,需要把提示语通过“错误码--提示语”的形式进行配置。
4、为了便于对错误码进行统一管理,约定一下错误码的编码规则:[错误消息类型(一位)] + [系统组编号(两位数字)] + [子系统编号(两位数字)] + [顺序编号(两位数字)]。
5、其中错误消息类型取值:E——普通错误消息;W——警告类消息;Q——询问类消息;F——致命错误消息
【WEB工程异常处理】
对于WEB系统,由于我们使用的是Spring MVC框架,因为针对此种框架进行说明。
1、封装两个实体类:BisinessException和SystemException。
2、增加HandlerExceptionResolver 接口的实现类MyExceptionHandler,代码如下:
public class MyExceptionHandler implements HandlerExceptionResolver {
public ModelAndView resolveException(HttpServletRequest request, HttpServletResponse response, Object handler,
Exception ex) {
Map<String, Object> model = new HashMap<String, Object>();
model.put("ex", ex);
// 根据不同错误转向不同页面
if(ex instanceof BusinessException) {
return new ModelAndView("error-business", model);
}else if(ex instanceof ParameterException) {
return new ModelAndView("error-parameter", model);
} else {
return new ModelAndView("error", model);
}
}
}
3、在Spring的配置文件applicationContext.xml中增加以下内容:
<bean id="exceptionHandler" class="cn.basttg.core.exception.MyExceptionHandler"/>
4、对于Unchecked Exception而言,增加对应的errorpage:
<error-page>
<exception-type>java.lang.Throwable</exception-type>
<location>/500.jsp</location>
</error-page>
<error-page>
<error-code>500</error-code>
<location>/500.jsp</location>
</error-page>
<error-page>
<error-code>404</error-code>
<location>/404.jsp</location>
</error-page>
5、系统采用与系统风格统一的的error page页面。
【参考资料】
1、http://cgs1999.iteye.com/blog/1547197
分享到:
相关推荐
Java异常处理策略研究
随着J2EE应用系统业务逻辑日益复杂和规模不断扩大,传统的异常处理仅依赖Java异常处理机制,缺失层次性和分类性,存在异常处理散乱、扩展困难和异常日志混乱等问题。从J2EE应用系统架构的层次性着手,建立异常层次...
Java编程中异常处理的优劣之道 Java编程中的异常处理是一个很常见的话题了,几乎任何一门介绍性的Java课程都会提到异常处理。不过,我认为很多人其实并没有真正...本文就对三种不同程度和质量的Java异常处理进行了讨论
非常实用的java代码优化策略详解,从变量声明、初始化、字符串链接、异常处理、IO、数组等各个方面进行优化,非常有参考价值。
2、统一异常处理。 3、分页功能:aop实现默认分页赋值。 4、统一结果返回。 5、策略工厂模式:用于不同业务逻辑的实现。 6、uid生成工具。 7、集成swagger在线接口文档。 8、文件上传功能。 9、excel文件解析功能:...
目的 通过 Java异常处理的特点和机制,处理程序中出现的错误。方法 根据 Java异常捕获、异常抛出的要求,分析异常处理的方法。结果 结合实际,提出了如何有效地抛出异常和捕获异常的实用策略。结论 异常处理提高了程序...
• 熟悉常见异常分类以及处理,熟悉反射、注解、内部类、泛型、序列化、深浅复制 • 熟悉Java多线程并发中线程基本方法,线程池,线程生命周期,熟悉Java锁中常见锁分类(乐观/悲观锁、自旋锁、独/共享锁、可重入锁、...
高级特性篇:涵盖Java中的高级特性,如集合框架、泛型、异常处理、多线程、网络编程等,帮助读者提升Java编程能力。 框架篇:介绍Java中常用的框架,如Spring、Hibernate、MyBatis等,使读者能够快速掌握框架的使用...
十、 异常★★★★ 34 十一、 包(package) 37 十二、 多线程★★★★ 39 为什么要使用多线程 39 创建线程和启动 39 线程的生命周期 44 线程管理 45 线程同步 49 线程通信 52 线程池 58 死锁 64 线程相关类 65 十三...
6、处理程序异常,能够采用自定义异常; 7、可设置不同的起始URL; 8、代码采用模块化设计,特别是使用面向对象封装,类的定义、包的定义合理,内部类和匿名类合理; 9、使用Java集合类处理工作列表; 10、Java语言...
全面而深入的覆盖:我们的Java面试资料涵盖了Java编程语言的各个方面,包括基础知识、面向对象编程、多线程、集合框架、异常处理、IO操作、数据库连接、设计模式等。无论您是初学者还是经验丰富的开发者,我们的资料...
随着J2EE应用系统业务逻辑日益复杂和规模不断扩大,传统的异常处理仅依赖Java异常处理机制,缺失层次性和分类性,存在异常处理散乱、扩展困难和异常日志混乱等问题。从J2EE应用系统架构的层次性着手,建立异常层次...
<HTML><HEAD>关于java异常处理(讲义)--JSP中文网 ; charset=gb2312" http-equiv=Content-Type> 关于java异常处理(讲义),JSP中文网> 关于java异常处理(讲义)> href=...
全面而深入的覆盖:我们的Java面试资料涵盖了Java编程语言的各个方面,包括基础知识、面向对象编程、多线程、集合框架、异常处理、IO操作、数据库连接、设计模式等。无论您是初学者还是经验丰富的开发者,我们的资料...
全面而深入的覆盖:我们的Java面试资料涵盖了Java编程语言的各个方面,包括基础知识、面向对象编程、多线程、集合框架、异常处理、IO操作、数据库连接、设计模式等。无论您是初学者还是经验丰富的开发者,我们的资料...
JavaSE核心 异常处理、多线程基础、IO系统、网络编程、Java反射机制、JVM性能调优(JVM内存结构剖析、GC分析及调优、JVM内存参数优化)、Java泛型、JDK新特性 熟练掌握JavaSE核心内容,特别是IO和多线程;...
全面而深入的覆盖:我们的Java面试资料涵盖了Java编程语言的各个方面,包括基础知识、面向对象编程、多线程、集合框架、异常处理、IO操作、数据库连接、设计模式等。无论您是初学者还是经验丰富的开发者,我们的资料...
全面而深入的覆盖:我们的Java面试资料涵盖了Java编程语言的各个方面,包括基础知识、面向对象编程、多线程、集合框架、异常处理、IO操作、数据库连接、设计模式等。无论您是初学者还是经验丰富的开发者,我们的资料...