MyException - 我的异常网
当前位置:我的异常网» J2EE » 讨论一下SSH中的错误处理

讨论一下SSH中的错误处理

www.MyException.Cn  网友分享于:2015-08-26  浏览:38次
讨论一下SSH中的异常处理
在SSH架构中出现异常时
1、要进行捕获且展现友好的信息给用户
2、要记录出现的异常供维护人员回溯问题

想到的几个点
1、利用web应用的error-page可以处理
2、利用struts的global-exception好像也可以处理
3、hibernate是不是对异常进行了封装或者也有自己的处理机制
3、spring中aop的afterThrowing可以捕获并记录异常
4、捕获到的异常是不是最原始的异常信息,还是经过封装的?
5、aop处理异常对性能影响如何?如果架构中使用了缓存机制,是否会有影响?
6、是不是需要处理异常,抛出自定义的异常?
7、ajax方式,后台异常如何处理?

请说说你的看法或者作法 多谢



------解决方案--------------------
1.对一个需要提供稳定、高质量的WEB系统而言,
 对整个WEB程序的入口、出口的异常处理都需要做封装。
2.Logic、DAO可以根据需要,向上层抛出相应的Exception,
 而这些Exception都必须在Action截住,也就是封装起来,向View返回一个合适的信息。
3.发生异常之后,返回到View的信息,可以是给人看得HTML也可以是给JavaScript看的JSON,
 所以,普通页面的异常,可以显示错误页面;Ajax发生的异常,可以返回一个包容错误信息的JSON,让Ajax显示出来。
4.很多异常处理是在设计阶段就可以预见的,不要用Spring的AOP拦截,这样会对系统性能操成恶性的影响。
 可以做一个BaseAction,把共通的处理写在里面。
5.具体的,抛出、捕获什么样的异常信息,根据系统实际处理内容确定。
 根据不同的异常,可以让接收方程序作相应的处理——不局限于错误处理。
------解决方案--------------------
spring中aop的afterThrowing可以捕获并记录异常
------解决方案--------------------
我觉得你说的已经很好了,第2条用logging也可以吧
------解决方案--------------------
1、利用web应用的error-page可以处理 这个一般都是系统级异常才进行处理的,而里面的应用程序异常通常不在这里进行拦截
------解决方案--------------------
能捕获的可控制的异常,就不要让用户知道太多细节。可以改成一些客户能理解的信息。

比如网络连接中断,而不是IOException, 比如服务器忙,而不是SocketTimeOutExceotion等

总之,大部分异常我们都可以预先捕获的。那些我们程序的bug,由于各种原因没有捕获,比如空指针,必须用errorPage进行最后的处理。

不能让用户认为我们系统出了什么大问题了。
------解决方案--------------------
我觉得异常应该尽量不影响系统的正常使用
一些可以由系统自动处理的异常还是不抛给用户的好

我们给用户的异常一般情况下都是比较严重的,像没有权限了,或者用户输入的内容有问题了什么的

说到抛出的异常,我觉得:异常在开发阶段是给开发人员提示信息的,在应用阶段一般是给用户提示的
所以呢,一般情况下异常都要经过我们的封装,否则用户看到了也看不懂啊
------解决方案--------------------
1、利用web应用的error-page可以处理
个人感觉这个方式不好,很显然不好统一定制。
2、利用struts的global-exception好像也可以处理
还可以,简单的应用可以试试
3、hibernate是不是对异常进行了封装或者也有自己的处理机制
对你来说没影响,可以不管他,有封装,但是好像没处理机制
3、spring中aop的afterThrowing可以捕获并记录异常
推荐记录,记录后利用异常链继续向上抛runtime非必捕获异常
4、捕获到的异常是不是最原始的异常信息,还是经过封装的? 
跟异常链有关,一般java新手写的程序95%断链,开源框架的异常可以追溯到原始的信息
5、aop处理异常对性能影响如何?如果架构中使用了缓存机制,是否会有影响? 
异常的捕获确实有性能影响的,个人感觉影响不大,比较异常是偶然发生的。
你指的缓存不明白如何影响异常的捕获
6、是不是需要处理异常,抛出自定义的异常?
当一段代码抛异常的时候,你要看你能不能在catch块内修复程序,让程序继续走不会出问题,否则不建议catch
业务系统比较大的话可以自己模仿开源框架那样定义业务异常,和逻辑异常。方便逻辑判断例如使用instanceof
7、ajax方式,后台异常如何处理?
向上抛,或者在jsp中发现异常,然后throw出来,直到jsb报红叉为止,否则ajax判断的状态码永远是对的。

在有一个地方可以捕获异常,过滤器。
------解决方案--------------------
3、hibernate是不是对异常进行了封装或者也有自己的处理机制  
hibernate对异常有了自己的封装,针对数据库的各种操作错误的返回码,进行了各种封装。进而成了自己的一套异常体系,这些异常大都是非运行时异常,也就是需要我们手工的来进行try catch或者throw

5、aop处理异常对性能影响如何?如果架构中使用了缓存机制,是否会有影响?
spring拦截了hibernate或者jdo或者普通jdbc的异常,并且对其封装成为了自己的异常,即大家都知道的DataAccessException,这个异常是运行时异常的子类,所以无需try catch 或者throw,他会自动抛出。但是如果要在进行封装的话,可以在web层进行拦截,如果用struts的异常体系,不用抛就应该会跑到错误页面上去吧

关于一级缓存无所谓影响与否,因为他是基于session的,就相当于是基于事务的,不管回滚还是不会滚都无效了
二级缓存中中有个缓存事务的概念,但是这个需要在jta环境中使用,而且各种缓存提供商所支持的缓存事务策略也不同,应该是还没有完善。
具体的没研究过,看hibernate参考手册上说不同的缓存支持不同的事务策略,按照这个意思就说明先填充的二级缓存,再提交的事务,这样才能出现回滚不一致,否则也是无所谓。所以在这里需要注意一下。


------解决方案--------------------
3、spring中aop的afterThrowing可以捕获并记录异常 

我最近在使用这个记录异常,但也担心其性能问题,苦于没有好的理论根据,今天学习了
------解决方案--------------------
其实不用搞的很复杂,给jsp提供一个errorPage给用户友好提示即可,至于让开发人员能发现问题,那写入日志不行吗,反馈到错误页面也可以啊
------解决方案--------------------

文章评论

我的丈夫是个程序员
我的丈夫是个程序员
如何成为一名黑客
如何成为一名黑客
代码女神横空出世
代码女神横空出世
编程语言是女人
编程语言是女人
60个开发者不容错过的免费资源库
60个开发者不容错过的免费资源库
为啥Android手机总会越用越慢?
为啥Android手机总会越用越慢?
10个帮程序员减压放松的网站
10个帮程序员减压放松的网站
要嫁就嫁程序猿—钱多话少死的早
要嫁就嫁程序猿—钱多话少死的早
2013年中国软件开发者薪资调查报告
2013年中国软件开发者薪资调查报告
我跳槽是因为他们的显示器更大
我跳槽是因为他们的显示器更大
10个调试和排错的小建议
10个调试和排错的小建议
 程序员的样子
程序员的样子
聊聊HTTPS和SSL/TLS协议
聊聊HTTPS和SSL/TLS协议
鲜为人知的编程真相
鲜为人知的编程真相
Java 与 .NET 的平台发展之争
Java 与 .NET 的平台发展之争
“肮脏的”IT工作排行榜
“肮脏的”IT工作排行榜
程序员眼里IE浏览器是什么样的
程序员眼里IE浏览器是什么样的
程序员都该阅读的书
程序员都该阅读的书
Web开发者需具备的8个好习惯
Web开发者需具备的8个好习惯
“懒”出效率是程序员的美德
“懒”出效率是程序员的美德
漫画:程序员的工作
漫画:程序员的工作
十大编程算法助程序员走上高手之路
十大编程算法助程序员走上高手之路
程序员和编码员之间的区别
程序员和编码员之间的区别
程序员的鄙视链
程序员的鄙视链
2013年美国开发者薪资调查报告
2013年美国开发者薪资调查报告
程序员周末都喜欢做什么?
程序员周末都喜欢做什么?
看13位CEO、创始人和高管如何提高工作效率
看13位CEO、创始人和高管如何提高工作效率
不懂技术不要对懂技术的人说这很容易实现
不懂技术不要对懂技术的人说这很容易实现
如何区分一个程序员是“老手“还是“新手“?
如何区分一个程序员是“老手“还是“新手“?
为什么程序员都是夜猫子
为什么程序员都是夜猫子
当下全球最炙手可热的八位少年创业者
当下全球最炙手可热的八位少年创业者
Web开发人员为什么越来越懒了?
Web开发人员为什么越来越懒了?
Google伦敦新总部 犹如星级庄园
Google伦敦新总部 犹如星级庄园
老美怎么看待阿里赴美上市
老美怎么看待阿里赴美上市
什么才是优秀的用户界面设计
什么才是优秀的用户界面设计
程序员应该关注的一些事儿
程序员应该关注的一些事儿
总结2014中国互联网十大段子
总结2014中国互联网十大段子
一个程序员的时间管理
一个程序员的时间管理
那些性感的让人尖叫的程序员
那些性感的让人尖叫的程序员
程序猿的崛起——Growth Hacker
程序猿的崛起——Growth Hacker
科技史上最臭名昭著的13大罪犯
科技史上最臭名昭著的13大罪犯
老程序员的下场
老程序员的下场
做程序猿的老婆应该注意的一些事情
做程序猿的老婆应该注意的一些事情
Java程序员必看电影
Java程序员必看电影
每天工作4小时的程序员
每天工作4小时的程序员
程序员必看的十大电影
程序员必看的十大电影
5款最佳正则表达式编辑调试器
5款最佳正则表达式编辑调试器
团队中“技术大拿”并非越多越好
团队中“技术大拿”并非越多越好
旅行,写作,编程
旅行,写作,编程
软件开发程序错误异常ExceptionCopyright © 2009-2015 MyException 版权所有