- 浏览: 318000 次
- 性别:
- 来自: 北京
文章分类
最新评论
-
ayidaweiwei:
上面已经写得很清楚了,吧里data 里面的数据定义成一个Bea ...
json对象转换成复杂Bean(包括bean、list<Bean>、Object) -
chaohua2012:
你好,如果json是这种形式呢"type" ...
json对象转换成复杂Bean(包括bean、list<Bean>、Object) -
a6892509:
大神呀
Java异常处理心得 -
liubaolin123:
请问有源码么?
restlet2.0.6+spring3.2.2+mybatis3.2.3 集成 -
xiangqian0505:
xiangqian0505 写道duan_1991 写道文章不 ...
Java异常处理心得
项目是基于公司内部的一个开发平台,对java基本的一些处理都封装好了, 异常处理也就变得尤为重要了。
在写代码的时候,我之前的宗旨是,不提示要try catch 一般不会去处理。 如果程序在正常情况下问题也不会出现错误, 可是在测试的过程中,发现了不少令人头疼问题。
方法抛出运行时的异常是不自动提示异常捕捉的,所以我在写代码的时候忽略了对这些异常处理。导致一系列非正常运行情况下总出现问题。
用一段代码详细的讲解。
try{ //获得用户ID String userId=getUserInfo().getUserId(); String status=bean.getStatus(); //保存数据 if("1".equals(status)){ //保存 evectionExpenseFormService.doSave(bean,detailBean,userId); }else if("2".equals(status)){ //提交 //提交流程处理 completeTaskResult=evectionExpenseFormService.doSubmit(bean,getUserInfo(),category,bean.getProcessinsId()); } //返回id和申请编号,前台处理 setResult("result",bean.getId()+"&"+bean.getApplyNo()+"&"+JSONObject.fromObject(completeTaskResult)); } catch (SessionTimeoutException stex) { //Session超时异常 log.error(stex); //使用拦截器处理异常信息 //ALMOND_MVC_00006 是错误信息国际化的编码,会返回对应的错误提示信息 throw AmondException.ThrowAmondException("ALMOND_MVC_00006"); //如果不使用拦截器处理异常,可以通过这种方式把错误信息传到前台 //this.setErrorMessage("TOFT_MVC_00006"); //return RLOGIN; } catch (SaveFormException savefex){ //保存表单数据异常 log.error(savefex); throw AmondException.ThrowAmondException("ALMOND_MVC_00007"); } catch(UnexpectedRollbackException urex){ //保存表单数据异常 回滚异常 log.error(urex); throw AmondException.ThrowAmondException("ALMOND_MVC_00008"); } catch (SubmitFormException subfex){ //提交表单数据异常 log.error(subfex); throw AmondException.ThrowAmondException("ALMOND_MVC_00009"); } catch (JSONException jsonex){ //JSON异常 log.error(jsonex); throw AmondException.ThrowAmondException("ALMOND_MVC_00010"); } catch (Exception ex){ log.error(ex); this.setErrorMessage(ex.getMessage()); return ERROR; }
上面代码中获取用户id会抛出自定义SessionTimeoutException异常,在保存数据的时候我把所有的异常汇总成自定义SaveFormException异常,提交数据的也把所有的异常汇总成自定义SubmitFormException异常。这样碰到异常就能准确的把错误提示信息传给前台进行alert。当然还有比较重要的一点,大家可能不是很明白这个自定义回滚异常,回滚异常是当程序碰到异常的时候触发回滚时抛出的异常。上段代码保存和提交我都用到了事务,碰到运行时异常就会触发回滚,比如对数据库执行的一些操作。 Json转换的时候也是抛出运行时的异常(RuntimeException),不try catch也不会提示的。刚开始我也这段代码的时候try catch都没用,因为都没报错,正常运行情况下也没有问题。 后来加的这些处理。
举个自定义异常的例子,这个是自定义SessionTimeoutException
public class SessionTimeoutException extends Exception{ /** * @Fields serialVersionUID : TODO */ private static final long serialVersionUID = 5721686959716896576L; public SessionTimeoutException(){ } public SessionTimeoutException(Throwable cause){ super(cause); } public SessionTimeoutException(String message){ super(message); } }
如果程序中用到事务的处理,一定要特别注意,事务开始、事务提交、事务回滚要同时使用。不然很容易造成死锁。
例如:
try{ beginTransaction();//启用事务 // 当流程实例存在时,二次提交 if(processinstancesid != null && !"".equalsIgnoreCase(processinstancesid)) { //处理 } else {//提交流程处理 } commitTransaction();//提交事务 }catch(Exception ex){ rollbackTransaction();//事务回滚 throw new SubmitFormException(ex); }
struts.xml配置文件跳转到错误页面的代码
<package name="finance" extend="toft-default" namespace="/finance"> <action name="individualFormList" class="finance.IndividualFormListAction"> <result name="success">/almond/finance/success.jsp</result> </action> </package>
extend 的action.xml配置文件
<package name="toft-default" namespace="default"> <result-types> <result-type name="jsp" class="com.mvc.result.supports.ServletResult" /> <result-type name="ajax" class="com.mvc.result.supports.AjaxResult" /> <result-type name="redirect" class="com.mvc.result.supports.RedirectResult" /> </result-types> <interceptors> <interceptor name="exceptionInterceptor" class="com.mvc.interceptor.supports.ExceptionInterceptor"> </interceptor> <interceptor-stack name="interceptor-stack"> <interceptor-ref name="exceptionInterceptor" /> </interceptor-stack> </interceptors> <global-results> <!-- failure 页面 --> <result name="failure">/almond/exception/failure.jsp</result> <!-- error 页面 --> <result name="error">/almond/exception/error.jsp</result> <!-- alert 页面 --> <result name="alert">/almond/exception/alert.jsp</result> <!-- message 页面 --> <result name="message">/almond/exception/message.jsp</result> </global-results> <default-interceptor-ref>interceptor-stack</default-interceptor-ref> <default-result-type>jsp</default-result-type> </package>
ExceptionInterceptor.java拦截器类中把错误提示信息设置到对象中。通过返回的类型封装错误信息处理,例如:<result-type name="ajax"
class="com.toft.mvc.result.supports.AjaxResult" />
用jsp设计异常信息页面,让错误信息一目了然。如果使用ajax调用后台抛出的错误信息,在ajax请求中加上
error: function(request, textStatus){ toft.unlockPage(); alert(request.responseText); }
就会把错误提示alert到页面上。
评论
就是抛出异常不try catch就报错。
那你是希望它报错还是不报错?从代码看你是把异常写到日志中然后就吞掉了?至少应该让用户知道有东西出错了吧。
这段代码是为了容易理解,其实保存和提交方法中有很多的处理,会碰到各种各样的异常。
我也是觉得应该写异常人方式比较容易理解。使用try,catch的好处是:
- 可以将正常的处理逻辑线性化
- 将异常的处理独立出来,专门处理。
而使用if,else的话会在编码时不断的进行“正常该怎么处理,异常该怎么处理”的循环,同一时刻做一个事情比较容易和集中。
这里就有点AOP的意思,将异常分支的处理也作为一个切面的感觉。
就是抛出异常不try catch就报错。
我也希望有更好的方法,所有运行时的异常通过一个异常处理机制统一处理, 要不你给一个更好的处理方法,我学习一下,谢谢。
这段代码是为了容易理解,其实保存和提交方法中有很多的处理,会碰到各种各样的异常。
发表评论
-
restlet2.0.6+spring3.2.2+mybatis3.2.3 集成
2013-12-27 15:55 16797基于上一篇博客http://wuxiangqian.ite ... -
Mybatis3.2使用心得 中文API
2013-12-10 17:41 38936最近写一个web服务接口,用到了MyBatis3.2,把我 ... -
Internet Explorer 已对此页面进行了修改,以帮助阻止跨站点脚本
2013-05-05 15:11 17536ie浏览器提示错误的原 ... -
IE文本框内容右对齐后光标消失
2012-12-20 16:42 1894<input type="text" ... -
实践Oracle与DB2区别及问题解决
2012-12-19 13:53 1882项目进入开发阶段的时候,为了方便,一直使用 Or ... -
json对象转换成复杂Bean(包括bean、list<Bean>、Object)
2012-07-09 18:33 29542jsonWorkflowBean是json字符串 // ... -
json字符串转换成List<bean>
2012-06-05 14:52 1881String gra = JSONUtils.toJSON(g ... -
MyEclipse自动生成注释文档
2012-04-06 11:54 1096在myeclipse中导入该附件 window—pre ... -
Java实现 SSL双向认证
2012-04-01 10:01 1205我们常见的SSL验证较多的只是验证我们的服务器是否是真实正确的 ... -
JAVA 二级联动菜单
2012-03-12 13:45 2312<%@ page language="java ... -
列出某文件夹下的所有文件
2012-03-03 23:12 1002File f=new File("Derec ... -
java 数据库连接池的简单实现
2012-03-03 23:07 1433package com.wangjia.tools; ... -
webservices设置
2011-12-06 17:28 1084<?xml version="1.0&qu ... -
SSH整合视频 SSH整合案例 SSH整合问题解决
2011-12-05 22:01 1938个人网站:www.longhuiwang.com SSH案例 ... -
jsp播放视频文件代码
2011-12-02 21:01 17551.avi格式 代码片断如下: <object ... -
jfreechart 折线图
2011-12-01 18:35 1543package com.ssrt.group; impo ... -
myeclipse 生成注册码
2011-11-28 18:08 61package domain; import java.io ... -
myeclipse svn 安装
2011-11-28 18:07 975一、安装方法: 方法一、如果可以上网可在线安装 1. 打开 ... -
fedora10下面访问servlet报404错误
2011-11-23 19:19 1187问题:系统在window xp下面访问servlet没有任何问 ... -
兼容火狐、IE iframe onload属性、遮罩层隐藏及显示
2011-11-15 19:59 2897<%@ page language="java ...
相关推荐
本篇文章给大家详细讲述了学习Java异常处理学习的心得以及原理介绍,对此有兴趣的朋友参考下吧。
第2篇为Java语言高级语法,包括类、对象、方法、继承、多态、修饰符、接口、抽象类、内部类、Java异常处理和多线程编程。第3篇为Java语言编程进阶,包括Java编程常用知识、Java文件编程、Java文件I/O编程、Java TCP...
第2篇为Java语言高级语法,包括类、对象、方法、继承、多态、修饰符、接口、抽象类、内部类、Java异常处理和多线程编程。第3篇为Java语言编程进阶,包括Java编程常用知识、Java文件编程、Java文件I/O编程、Java TCP...
本文将从 Java 语言的基础知识到高级部分的总结,涵盖面向对象编程、数组、字符串、流技术、异常处理等内容,并对_java 语言的特点和编程规范进行了总结和分析。 Java 语言的基础知识 Java 语言和 C 语言有许多...
Java 银行取款 异常处理 计算器设计 图形用户界面设计 三合一详细实验报告 包含实验报告所有步骤文档和结果截图 流程图 实验心得等等 详细!
Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java 配16小时多媒体教学视频,高效、直观 一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让...
Java中的I/O学习总结Java中的I/O学习总结
Java编程老鸟潜心写作,奉献高效率的Java学习心得 完全站在没有编程经验读者的角度,手把手教会读者学习Java 配16小时多媒体教学视频,高效、直观 一一击破Java入门可能会遇到的难点和疑惑 抽丝剥茧,层层推进,让...
这包括对象导向编程、类的继承、接口的使用、异常处理等。对于这些基本概念的理解,对于后续的学习至关重要。同时,也需要深入理解JAVA的内存管理和垃圾回收机制,这是理解JAVA性能和行为的关键。 其次,实践是最好...
《Java JDK6学习笔记》是作者良葛格本人近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型...
本书是作者近几年来学习Java的心得笔记,结构按照作者的学习脉络依次展开,从什么是Java、如何配置Java开发环境、基本的Java语法到程序流程控制、管理类文件、异常处理、枚举类型、泛型、J2SE中标准的API等均进行了...
java 异常处理文件,整理java 异常学习过程中的心得体会,参考编程简洁之道
1 Java 概述 3 1.1 Java 定义 3 1.2 Java 的特点 3 1.3 Java 开发环境 5 Java 基本语法 7 数据类型 7 整数型 7 浮点型 7 字符型 8 ...关于 null 的⼏种处理⽅式 29 null 是任何引⽤类型的初始值 29
讲述了java在异常处理中的技巧和心得,以及在实践中的应用。
提供了大量完整且具有实际意, 义的应用实例,详细介绍了Java语言基础知识、面向对象程序设计、接口, 与内部类、事件监听器模型、swing图形用户界面程序设计、打包应用程序, 、异常处理、登录与调试、泛型程序设计、...
Java基础知识点:包括数据类型、面向对象特性、异常处理、集合框架等。 Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 ...
Java基础知识点:包括数据类型、面向对象特性、异常处理、集合框架等。 Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 ...
Java基础知识点:包括数据类型、面向对象特性、异常处理、集合框架等。 Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 ...
Java基础知识点:包括数据类型、面向对象特性、异常处理、集合框架等。 Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 ...
Java基础知识点:包括数据类型、面向对象特性、异常处理、集合框架等。 Java核心技术:如多线程、网络编程、序列化等都有详细的解释和示例。 常用框架:如Spring、MyBatis等框架的使用方法和内部原理都有涉及。 ...