J2EE项目异常处理
2008-04-14 14:20
363 查看
[align=left]在表示层,主要是把页面传过来的值进行校验并转换成业务层需要的类型 ,而且调用业务层的方法,在表示层一定要弄清楚调用方法的是否会抛出unChecked异常,什么情况下会抛出这些异常,并作出正确的处理。[/align]
[align=left]《一》[/align]
[align=left]在异常处理方面主要做的工作是:[/align]
[align=left]1:捕捉业务层抛出来的check异常,如在登录时的用户不存在异常,处理并跳转到相应的页面[/align]
[align=left]2:处理表示层内部的一些Uncheck异常,如类型转换错误等,并跳转到相应的页面,比如生日中出现字母[/align]
[align=left]3:处理全局异常,并且转发到 “系统错误”的页面,即所有异常的父类Exception [/align]
[align=left]在业务层,主要进行业务活动,在异常方面做要做的工作是:[/align]
[align=left]1:抛出用户自定义的流程异常,在表示层可以处理的异常(逻辑处理异常),比如在登录用户时,用户不存在的异常。对于流程异常交给调用者来处理,自己不处理。[/align]
[align=left]2:对于其他异常,或底层抛出来的Uncheck异常,重新包装成uncheck异常,以BussinessException抛出。[/align]
[align=left]在数据库层,主要惊醒数据库的相关操作,在异常方面主要做的工作是:[/align]
[align=left] 1:避免系统级的checked异常对业务系统的深度侵入,把底层抛出的不可恢复的异常,如SQLException,包装成DataAccessException(uncheck Exception)抛出,并释放相关资源,、[/align]
[align=left]2:如果一个异常是可以恢复的,可以被调用者正确处理的,使用checked异常[/align]
[align=left]《二》[/align]
[align=left]异常记录:[/align]
[align=left]1:如果捕获到一个异常,但是这个异常是可以处理的。则无需要记录异常[/align]
[align=left]2:异常应该在最初产生的位置记录![/align]
[align=left]《三》[/align]
[align=left]异常类的写法:我们在调用printStackTrace方法时,需要把所有的“起因异常”的信息也同时打印出来。所以我们需要覆写printStackTrace方法来显示全部的异常栈跟踪。包括嵌套异常的栈跟踪。[/align]
[align=left]一个完整的支持嵌套的checked异常类源码如下。我们在这里暂且把它叫做NestedException。同样要设计一个unChecked异常类也与上面一样。只是需要继承RuntimeException。[/align]
public NestedException extends Exception{
private Throwable cause;
public NestedException (String msg){
super(msg);
}
public NestedException(String msg, Throwable ex){
super(msg);
This.cause = ex;
}
public Throwable getCause(){
return (this.cause == null ? this :this.cause);
}
public getMessage(){
String message = super.getMessage();
Throwable cause = getCause();
if(cause != null){
message = message + “;nested Exception is ” + cause;
}
return message;
}
public void printStackTrace(PrintStream ps){
if(getCause == null){
super.printStackTrace(ps);
}else{
ps.println(this);
getCause().printStackTrace(ps);
}
}
public void printStackTrace(PrintWrite pw){
if(getCause() == null){
super.printStackTrace(pw);
}
else{
pw.println(this);
getCause().printStackTrace(pw);
}
}
public void printStackTrace(){
printStackTrace(System.error);
}
}
[align=left]同样要设计一个unChecked异常类也与上面一样。只是需要继承RuntimeException。 [/align]
[align=left]总之:使用Checked Exception还是UnChecked Exception的原则,我的看法是根据需求而定。
如果你希望强制你的类调用者来处理异常,那么就用Checked Exception;
如果你不希望强制你的类调用者来处理异常,就用UnChecked。[/align]
参考:
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
[align=left] [/align]
[align=left]《一》[/align]
[align=left]在异常处理方面主要做的工作是:[/align]
[align=left]1:捕捉业务层抛出来的check异常,如在登录时的用户不存在异常,处理并跳转到相应的页面[/align]
[align=left]2:处理表示层内部的一些Uncheck异常,如类型转换错误等,并跳转到相应的页面,比如生日中出现字母[/align]
[align=left]3:处理全局异常,并且转发到 “系统错误”的页面,即所有异常的父类Exception [/align]
[align=left]在业务层,主要进行业务活动,在异常方面做要做的工作是:[/align]
[align=left]1:抛出用户自定义的流程异常,在表示层可以处理的异常(逻辑处理异常),比如在登录用户时,用户不存在的异常。对于流程异常交给调用者来处理,自己不处理。[/align]
[align=left]2:对于其他异常,或底层抛出来的Uncheck异常,重新包装成uncheck异常,以BussinessException抛出。[/align]
[align=left]在数据库层,主要惊醒数据库的相关操作,在异常方面主要做的工作是:[/align]
[align=left] 1:避免系统级的checked异常对业务系统的深度侵入,把底层抛出的不可恢复的异常,如SQLException,包装成DataAccessException(uncheck Exception)抛出,并释放相关资源,、[/align]
[align=left]2:如果一个异常是可以恢复的,可以被调用者正确处理的,使用checked异常[/align]
[align=left]《二》[/align]
[align=left]异常记录:[/align]
[align=left]1:如果捕获到一个异常,但是这个异常是可以处理的。则无需要记录异常[/align]
[align=left]2:异常应该在最初产生的位置记录![/align]
[align=left]《三》[/align]
[align=left]异常类的写法:我们在调用printStackTrace方法时,需要把所有的“起因异常”的信息也同时打印出来。所以我们需要覆写printStackTrace方法来显示全部的异常栈跟踪。包括嵌套异常的栈跟踪。[/align]
[align=left]一个完整的支持嵌套的checked异常类源码如下。我们在这里暂且把它叫做NestedException。同样要设计一个unChecked异常类也与上面一样。只是需要继承RuntimeException。[/align]
public NestedException extends Exception{
private Throwable cause;
public NestedException (String msg){
super(msg);
}
public NestedException(String msg, Throwable ex){
super(msg);
This.cause = ex;
}
public Throwable getCause(){
return (this.cause == null ? this :this.cause);
}
public getMessage(){
String message = super.getMessage();
Throwable cause = getCause();
if(cause != null){
message = message + “;nested Exception is ” + cause;
}
return message;
}
public void printStackTrace(PrintStream ps){
if(getCause == null){
super.printStackTrace(ps);
}else{
ps.println(this);
getCause().printStackTrace(ps);
}
}
public void printStackTrace(PrintWrite pw){
if(getCause() == null){
super.printStackTrace(pw);
}
else{
pw.println(this);
getCause().printStackTrace(pw);
}
}
public void printStackTrace(){
printStackTrace(System.error);
}
}
[align=left]同样要设计一个unChecked异常类也与上面一样。只是需要继承RuntimeException。 [/align]
[align=left]总之:使用Checked Exception还是UnChecked Exception的原则,我的看法是根据需求而定。
如果你希望强制你的类调用者来处理异常,那么就用Checked Exception;
如果你不希望强制你的类调用者来处理异常,就用UnChecked。[/align]
参考:
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
[align=left] [/align]
相关文章推荐
- n层结构的J2EE项目中的异常处理之四 转载
- J2EE项目异常处理
- J2EE项目异常处理
- J2EE项目中异常的设计与处理
- n层结构的J2EE项目中的异常处理之三
- J2EE项目中的异常处理 这篇也写得不错 可惜不是我写的
- [查异常网]-20160331-谈谈J2EE项目中的异常处理
- J2EE项目异常处理(转)
- J2EE项目异常处理
- J2EE项目整体异常处理机制
- J2EE项目异常处理
- n层结构的J2EE项目中的异常处理之四
- J2EE项目中异常处理
- J2EE项目异常处理
- J2EE项目异常处理
- J2EE项目中异常处理
- n层结构的J2EE项目中的异常处理之一 转载
- N层结构的J2EE项目中的异常处理之二 转载
- J2EE项目异常处理
- n层结构的J2EE项目中的异常处理