您的位置:首页 > 其它

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]
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: