J2EE项目异常处理

来源:互联网 发布:有免费的淘宝素材网吗 编辑:程序博客网 时间:2024/05/18 02:12

 

 
在表示层,主要是把页面传过来的值进行校验并转换成业务层需要的类型 ,而且调用业务层的方法,在表示层一定要弄清楚调用方法的是否会抛出unChecked异常,什么情况下会抛出这些异常,并作出正确的处理。
《一》
在异常处理方面主要做的工作是:
1:捕捉业务层抛出来的check异常,如在登录时的用户不存在异常,处理并跳转到相应的页面
2:处理表示层内部的一些Uncheck异常,如类型转换错误等,并跳转到相应的页面,比如生日中出现字母
3:处理全局异常,并且转发到 “系统错误”的页面,即所有异常的父类Exception
在业务层,主要进行业务活动,在异常方面做要做的工作是:
1:抛出用户自定义的流程异常,在表示层可以处理的异常(逻辑处理异常),比如在登录用户时,用户不存在的异常。对于流程异常交给调用者来处理,自己不处理。
2:对于其他异常,或底层抛出来的Uncheck异常,重新包装成uncheck异常,以BussinessException抛出。
在数据库层,主要惊醒数据库的相关操作,在异常方面主要做的工作是:
 1:避免系统级的checked异常对业务系统的深度侵入,把底层抛出的不可恢复的异常,如SQLException,包装成DataAccessException(uncheck Exception)抛出,并释放相关资源,、
2:如果一个异常是可以恢复的,可以被调用者正确处理的,使用checked异常
《二》
异常记录:
1:如果捕获到一个异常,但是这个异常是可以处理的。则无需要记录异常
2:异常应该在最初产生的位置记录!
《三》
异常类的写法:我们在调用printStackTrace方法时,需要把所有的“起因异常”的信息也同时打印出来。所以我们需要覆写printStackTrace方法来显示全部的异常栈跟踪。包括嵌套异常的栈跟踪。
一个完整的支持嵌套的checked异常类源码如下。我们在这里暂且把它叫做NestedException。同样要设计一个unChecked异常类也与上面一样。只是需要继承RuntimeException。
  1. public NestedException extends Exception{   
  2. private Throwable cause;   
  3. public NestedException (String msg){   
  4.  super(msg);   
  5. }   
  6.     
  7. public NestedException(String msg, Throwable ex){   
  8.  super(msg);   
  9.  This.cause = ex;   
  10. }   
  11.     
  12. public Throwable getCause(){   
  13.  return (this.cause == null ? this :this.cause);   
  14. }   
  15.     
  16. public getMessage(){   
  17.  String message = super.getMessage();   
  18.  Throwable cause = getCause();   
  19.    if(cause != null){   
  20.      message = message + “;nested Exception is ” + cause;   
  21.    }   
  22.  return message;   
  23. }   
  24. public void printStackTrace(PrintStream ps){   
  25.  if(getCause == null){   
  26.     super.printStackTrace(ps);   
  27.        
  28.  }else{   
  29.  ps.println(this);   
  30.  getCause().printStackTrace(ps);   
  31.  }   
  32. }   
  33.     
  34. public void printStackTrace(PrintWrite pw){   
  35.  if(getCause() == null){   
  36.     super.printStackTrace(pw);   
  37.  }   
  38.  else{   
  39.     pw.println(this);   
  40.     getCause().printStackTrace(pw);   
  41.  }   
  42. }   
  43. public void printStackTrace(){   
  44.  printStackTrace(System.error);   
  45. }   
  46. }  
同样要设计一个unChecked异常类也与上面一样。只是需要继承RuntimeException。 
总之:使用Checked Exception还是UnChecked Exception的原则,我的看法是根据需求而定。

如果你希望强制你的类调用者来处理异常,那么就用Checked Exception
如果你不希望强制你的类调用者来处理异常,就用UnChecked
参考:
http://www.javaeye.com/topic/2038?page=7
http://www.javaeye.com/topic/72170?page=2
http://www-128.ibm.com/developerworks/cn/java/j-jtp05254/index.html
 
 
原创粉丝点击