因为底层出错上面肯定需要知道,所以在这种情况下肯定要向上抛出异常。问题是在底层如何处理。
1:如果底层这样处理
catch(XXXException ex){
  throw new YYYException(ex);
}
这样到达上层的时候只有异常消息,而发生异常时的调用堆栈信息没有了(被抛出YYYException时的调用堆栈代替)。我认为调用堆栈信息对于debug是很重要的,因此这样的做法我不会忍受。
2:如果需要包装再抛出,我会这样
catch(XXXException ex){
  ex.printStackTrace();
  throw new YYYException(ex);
}
这样有了足够的信息,但是一个异常从低下传上来,往往打印出一大堆东西。3:或者不包装,直接抛出去,缺点是上层的应用不适合处理底层异常。通常我不会使用第一种方法,第二种和第三种我会根据情况选用

解决方案 »

  1.   

    在Web页面中,不适合将异常信息显示给用户,通常页面显示一个比较友好的消息,在日志中记录异常
      

  2.   

    直接抛出来,放到errorpage里处理!根据error-code来处理错误信息!
      

  3.   

    一般的做法就是从底层向上面抛出,最好在最上层,或是你需要处理的地方做出相应的处理,比如SQLException,如果得到这个异常的话,你就可以跳转到一个error.jsp告诉用户数据库出错了
    也可以把他转换成其他异常,比如RuntimeException
      

  4.   

    谢谢大家个人认为某些Exception并不适合在Error_page里面处理
    尤其是一些比较小的错误比如输入错误之类抛出来的自己定义的Exception
    e.g.我就定义了一个InputErrorException
    如果是这种情况有没有这种办法,
    就是仅仅指定部分的Exception转由errorpage处理.比如SQLException新学jsp,希望得到大家的建议!
    //bowps.后天结贴
      

  5.   

    “在Web页面中,不适合将异常信息显示给用户,通常页面显示一个比较友好的消息,在日志中记录异常“
    补充一句:应用级的异常还是要在页面上显示给用户的
      

  6.   

    输入错误?应该是几种Exception吧!NumberFormatException ...
      

  7.   

    定义错误码,一级一级的往下抛,在jsp页面转移到errpage对错误码进行解释,缺点是你必须在每一层考虑全面一些你的错误信息!