MyException - 我的异常网
当前位置:我的异常网» J2EE » 【版主推荐】J2EE项目错误处理你真的在意过吗?大家

【版主推荐】J2EE项目错误处理你真的在意过吗?大家涌跃发言

www.MyException.Cn  网友分享于:2015-08-26  浏览:21次
【版主推荐】J2EE项目异常处理你真的在意过吗?------大家涌跃发言
【事情起因】 最近在看《Java编程思想》第4版,昨天看到异常处理那章时,就想到了J2EE项目中异常的处理,J2EE的项目光在后台打印出异常还是不够的,需要以一种友好的方式提示给用户。
   

【事情经过】 于是我就看了之前在公司做的项目,这才发现,在struts里,我们都是
  try{
  xxxxxxxxxx
  }catch(BunisessException e){
  throw new BunisessException("xxXXXXX,请确认后重试");
  }
  就是自己将我们自定义的异常抛出去,却重来没有管他如何在页面上展示。我运行起项目,当故意进行错误操 作时,后台我throw Exception的信息,总能以很友好的对话框显示出来。仔细查看没个页面,却没有任何的异 常的提示信息。

【思考】那么异常信息时如何弹出来的?
  我直觉告诉我,肯定有一个公共的页面用来进行错误提示。带着这个问题,我看了项目中所有的公共页面的代码。
  直到发现一个ErrorAler.jsp的页面。这个页面比较简单,在页面上写了一段JAVA代码,调用了后的一个类的静态
  方法,我跟踪进去,查看该类,发现他继承了一个来自acegi的类,并实现了一个借口springFramework.security
  的一个借口。
   
  处理代码很短,但是涉及到其他几个类,大致的意思是:获取到异常堆栈,最后抛出的那个异常,然后getMessage()
  然后放置到session中。
   
  这个页面最后会以window.open()的方式打开,看起来就会像一个alert框。
  他的实现原理和机制,我还是没懂。由于我家没网,所以不能把代码发上来供大家一起研究。高手能不能大致讲讲这种处理机制?

我所知道的异常处理好像主要有以下几种办法:
1.web.xml里面有个error-page

2.用struts 有个 globel-exception

3.在后台catch 语句块 用request派发到页面,在页面上show
  

【写在后面】 我会继续去研究,等研究透了,会和大家一起分享的!

------解决方案--------------------
以IBM为例,异常哪些要抛,哪些不抛,哪些要写到日志里面都有比较明确的规定的。按照规定走。把异常当做一种逻辑的一部分看待。
------解决方案--------------------
我所知道的异常处理好像主要有以下几种办法:
1.web.xml里面有个error-page

2.用struts 有个 globel-exception

3.在后台catch 语句块 用request派发到页面,在页面上show

楼主想的不错, 这就是一个大体的流程。 也就是说, 我们把本来在控制台打印的异常信息在页面上也打印了。这对于给懂技术的人来看是由意义的, 但是对于那些单纯面向客户的程序来说, 就没有必要再页面上来显示异常了。
------解决方案--------------------
需要顶层封装一下 配置全局异常弹出页面就好啊
------解决方案--------------------
稍微成熟点的项目组,应该都有自己的异常处理规范或者小框架吧。。。。
------解决方案--------------------
对于楼主所说的用户操作异常这类的,我的做法是将错误信息放到struts的ActionError中,然后在视图层处理:
1,新建一个页面,显示“尊敬的用户您好,您的操作出现了以下错误:”,然后列出ActionError里面的错误内容。
2,在原页面直接显示错误信息。
3,用Javascript控制弹出错误信息提示框。
对于那些非用户操作的异常,比较简单的错误就是跳到一个error.jsp,网站类型的就告知"对不起,系统正在维护!",非网站的企业级管理系统就告知“系统运行错误,已记录错误日志,请联系维护人员!”。然后记录错误信息日志。

这符合大多数程序员的懒汉思想,包括我,不是不想研究更完善、通用、简易、准确的异常处理方式,觉得够用了就不研究了,经楼主这么一提醒越发觉得我们可耻了,期待有高手整理。。。。
------解决方案--------------------
ER。。。。。。。其实换个思维去想该不该显示

后台出错(就是有异常),当然你就这么个抛了出去,可要想好,哪些异常是属于用户的操作问题,哪些是后台问题,当然后台问题的代码自动处理,大不了就告诉用户服务器出问题,不能访问这样,至于用户操作的,就都不一定都要给用户一个界面说什么什么,有时候后台也可以处理,至于到了非要返回一个信息给用户的,也不用弹出一个窗口,起码我是及其讨厌,可以直接返回本来的页面,然后在个醒目的位置写句话

------解决方案--------------------
之前对于异常处理,百分之八九十都是直接给吞了。说到这个吞字,大家可能不太明白我的意思。但是e.printStackTrace();这条语句如果你在自己的程序中用的比较多的话,那就说明你也是吞异常的高手。然而很遗憾,成为了吞异常的高手,就一定是一个处理异常的低手(这个词太别扭了,改用'菜鸟'吧)!如果把不该吞的异常也给吞了,那就降低了程序和用户(包括二次开发人员、测试人员以及普通用户)之间的交互性。程序如果在出错的时候总是保持沉默,那用户不爽的次数到达一定数量后,最终将极有可能把我们所谓的作品给抛弃。异常处理的重要性已经体现出来了,要不然SUN公司也不会专门搞个异常处理机制了。说到这里,真正需要思考的问题才刚刚开始,如何才能更好地或者说更为合理地进行异常的处理呢?要想成为异常处理的高手,首先肯定得了解产生异常的原因,然后根据原因进行相应处理。究竟是抛,还是不抛(或者说'吞'),这是一个问题;究竟是使用默认异常还是自定义异常,这同样也是一个问题。如果异常是系统内部引起并且是我们能够确定的,比如说一个字符串s在使用getBytes("UTF-8")时出现UnsupportedEncodingException异常,那么就可以把它吞了(或者抛出一个Error),因为UTF-8是系统支持的基本编码集之一;如果异常是我们无法确定的,那此时就应该向上抛出,比如我们在写一个底层函数,需要进行文件的读写操作,那么很显然会有一个FileNotFoundException异常,这时就应该抛出去;但是如果我们站在更上一层,能够直接面向用户了,这时就得进行异常处理,比如来个信息提示说相应的文件没找到。接着说说自定义异常给我们带来的好处。自定义异常的好处个人认为主要有两点:一是能够更好的进行异常定位;二是能够将同种性质或是类似性质的异常进行归类,向上抛出后方便别人处理。比如给别人提供了一个二次开发函数,作用是读取一个Xml格式的文件,并且通过一系列解密操作,得到原始信息,然后通过这些信息进行相关类的构造。既然是读取文件,那么必然会有一个FileNotFoundException异常,又由于是一个经过加密的xml文件,那么在读取操作时也很有可能会产生诸如xml文件格式不正确、xml节点错误、xml节点内容错误等各种异常情况。对于二次开发人员来说FileNotFoundException异常很方便处理,但后面的几种异常可能会使他产生厌烦。此时,我们就应该使用自定义异常将xml文件格式不正确、xml节点错误、xml节点内容错误等各种异常归并起来,然后向上抛出。于是对于二次开发人员来说,他只需要处理两个异常,一个是FileNotFoundException,另一个则是我们自定义的异常,比如FileContentInvalidException(文件内容无效)异常。因为产生文件内容无效的原因,多半是由于正确产生出的xml文件被非法修改过所造成的。当然了,自定义异常的名称最好也能够见名知意!

文章评论

Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
程序员的鄙视链
程序员的鄙视链
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
程序员的一天:一寸光阴一寸金
程序员的一天:一寸光阴一寸金
老程序员的下场
老程序员的下场
编程语言是女人
编程语言是女人
 程序员的样子
程序员的样子
漫画:程序员的工作
漫画:程序员的工作
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
每天工作4小时的程序员
每天工作4小时的程序员
代码女神横空出世
代码女神横空出世
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
我的丈夫是个程序员
我的丈夫是个程序员
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
中美印日四国程序员比较
中美印日四国程序员比较
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
旅行,写作,编程
旅行,写作,编程
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
总结2014中国互联网十大段子
总结2014中国互联网十大段子
写给自己也写给你 自己到底该何去何从
写给自己也写给你 自己到底该何去何从
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
程序员和编码员之间的区别
程序员和编码员之间的区别
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
亲爱的项目经理,我恨你
亲爱的项目经理,我恨你
鲜为人知的编程真相
鲜为人知的编程真相
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
程序员应该关注的一些事儿
程序员应该关注的一些事儿
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
如何成为一名黑客
如何成为一名黑客
那些争议最大的编程观点
那些争议最大的编程观点
程序员都该阅读的书
程序员都该阅读的书
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
初级 vs 高级开发者 哪个性价比更高?
初级 vs 高级开发者 哪个性价比更高?
Java程序员必看电影
Java程序员必看电影
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
一个程序员的时间管理
一个程序员的时间管理
我是如何打败拖延症的
我是如何打败拖延症的
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
程序员最害怕的5件事 你中招了吗?
程序员最害怕的5件事 你中招了吗?
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有