日期:2014-05-19  浏览次数:20688 次

在一个j2ee的mvc架构的系统中,请问大家异常是怎么处理的?
比如说,
1.mvc这三层分别是抛出到上层还是到自己处理,原则是什么?好处是什么?
2.遇到业务异常一般怎么处理,系统异常怎么处理,为什么要这么处理。
3.一般自己定义的异常是基于check异常,还是uncheck异常,这样做的好处是?
4.一般对于异常的处理是什么?比如说记日志还是说在界面给出提示?这样做的好处有哪些?

先谢谢各位指点了。

------解决方案--------------------
捕捉到异常将详细错误信息存放到数据库,前台基本都是提示系统错误请联系管理员
------解决方案--------------------

其实这是一个细活,见仁见智的。但也有些常见处理方式,以下是个人经验
1.mvc这三层分别是抛出到上层还是到自己处理,原则是什么?好处是什么?
建议是向上抛出。原则是除非是系统没有定义的异常分类就自己处理。因为一般错误提示信息也是有规律的,可以把错误分成几个等级 操作系统级(一般是无法在应用级处理的,比如内存溢出)、业务系统级(一般是无法在应用级处理,比如主键冲突)、可恢复业务级
(自己定义抛出的异常,这里根据业务复杂度可以再分类以区分不同的异常,比如输入格式校验异常,业务逻辑异常等等)
好处是不用每个人去考虑异常的格式处理,多些时间去关注业务,只需要按照约定输入异常需要显示的信息即可,最终通过公共控件按照分类来展示异常。
2.遇到业务异常一般怎么处理,系统异常怎么处理,为什么要这么处理。
不论是业务异常还是系统异常,只要是能捕捉到的,第一件事就是回滚事务,第二件事就是记录日志。其它应该没啥区别。后面的处理再根据日志人工去决定了。为嘛就不用解释了吧。
如果是明确不影响业务数据和流程的异常,可以不用向上抛出,直接“吃掉”,免得提示来提示去影响用户体验。
3.一般自己定义的异常是基于check异常,还是uncheck异常,这样做的好处是?
uncheck这个没法定义吧,它是系统抛出的,比如空指针数组越界,这种异常最好不要捕捉,
参考网上的一段话:这类异常产生比较频繁,处理麻烦,如果显式的声明或捕获将会对程序的可读性和运行效率影响很大,因此由系统自动检测并将它们交给缺省的异常处理程序,用户可不必对其处理,如果发生这种异常,一般情况下整个系统会处于停止运行或者是崩溃的状态;
4.一般对于异常的处理是什么?比如说记日志还是说在界面给出提示?这样做的好处有哪些?
参考2.另外遇到unchecked异常一般要把提示信息转换成用户易于理解的信息再向上抛,否则影响用户体验。
------解决方案--------------------
一般在action或者servlet中处理 在其他层中可以抛出