一个用于J2EE操纵程序的非常处理框架[Java编程]
本文“一个用于J2EE操纵程序的非常处理框架[Java编程]”是由七道奇为您精心收集,来源于网络转载,文章版权归文章作者所有,本站不对其观点以及内容做任何评价,请读者自行判断,以下是其具体内容:
在大大都Java项目中,大部份代码都是样板代码.非常处理就属于此类代码.即便业务逻辑只有3到4行代码,用于非常处理的代码也要占10到20行.本文将谈论若何让非常处理保持简单和直观,使开辟人员可以用心于开辟业务逻辑,而不是把时间浪费在编写非常处理的样板代码上.本文还将阐明用于在J2EE环境中成立和处理非常的底子知识和指导原则,并提出了一些可以利用非常办理的业务问题.本文将利用Struts框架作为表示实现,但该办法实用于任何表示实现.
利用checked和unchecked非常的场景
您能否曾经想过,为什么要在编写好的代码块四周安排一个try-catch块,即便明知道无法对这些非常举行什么处理,而只满意于把它们放在catch块中?您大概想知道,为什么不能把这项工作放在一个集合的地方完成?在大大都情形下,这个地方关于J2EE利用程序来说就是一个前端掌握器.换句话说,开辟人员不会因为它们而遭到干扰,因为根本没必要很多地干涉它们.但是,假如一个办法名称包含一个throws子句,会呈现什么情形呢?开辟人员大概必须捕捉这些非常,大概把它们放在自己的办法的throws子句中.这就是痛楚的本源!幸运的是,Java API有一类叫做unchecked exception的非常,它们没必要捕捉.但是,仍旧存在一个问题:按照什么来决意哪些是checked非常,哪些是unchecked非常?下面给出一些指导原则:
终端用户无法采纳有效操作的非常应当作为unchecked非常.比方,致命的和不可恢复的非常就应当是unchecked.把XMLParseException(在解析XML文件时抛出)作为checked非常没有任何意义,因为惟一可以采纳的办法就是基于非常跟踪来办理根本问题.通过扩大java.lang.RuntimeException,可以成立自定义的unchecked非常.
在利用程序中,与用户操作相关的非常应当是checked非常.checked非常要求客户端来捕捉它们.您大概会问,为什么不把全部非常都当作是unchecked.这样做的问题在于,此中一些非常无法在精确的位置被捕捉到.这会带来更大的问题,因为错误只有在运行时才能被辨认.checked非常的例子有业务确认非常、安全性非常等等.
非常抛出战略
只捕捉基本利用程序非常(假定为BaseAppException)并在throws子句中声明
在大大都J2EE利用程序中,关于针对某个非常应当在哪一界面上显示哪条错误消息的抉择只能在表示层中做出.这会带来另一个问题:为什么我们不能把这种抉择放在一个大众的地方呢?在J2EE利用程序中,前端掌握器就是一个举行常见处理的集合位置.
此外,必须有一种用于传达非常的通用机制.非常也需求以一种普适的方法得处处理.为此,我们始终需求在掌握器端捕捉基本利用程序非常BaseAppException.这意味着我们需求把BaseAppException非常(只有这个非常)放入可以抛出checked非常的每个办法的throws子句中.这里的概念是利用多态来躲藏非常的实际实现.我们在掌握器中捕捉BaseAppException,但是所抛出的特定非常实例大概是几个派生非常类中的肆意一个.借助于这种办法,可以得到很多非常处理方面的机动性:
不需求在throws子句中放入大量的checked非常.throws子句中只需求有一个非常.
不需求再对利用程序非常利用混乱的catch块.假如需求处理它们,一个catch块(用于BaseAppException)就充足了.
开辟人员不需求亲身举行非常处理(日记记录以及获得错误代码).这种抽象是由ExceptionHandler完成的,稍后本文会就此点举行谈论.
即便稍后把更多非常引入到办法实现中,办法名称也不会改变,因此也不需求改正客户端代码,不然就会惹起连锁反映.但是,抛出的非常需求在办法的Javadoc中指定,以便让客户端可以看到办法约束.
下面给出抛出checked非常的一个例子:
public void updateUser(UserDTO userDTO)
throws BaseAppException{
UserDAO userDAO = new UserDAO();
UserDAO.updateUser(userDTO);
...
if(...)
throw new RegionNotActiveException("Selected region is not active");
}
Controller Method:
...
try{
User user = new User();
user.updateUser(userDTO);
}catch(BaseAppException ex){
//ExceptionHandler is used to handle
//all exceptions derived from BaseAppException
}
...
以上是“一个用于J2EE操纵程序的非常处理框架[Java编程]”的内容,如果你对以上该文章内容感兴趣,你可以看看七道奇为您推荐以下文章:
本文地址: | 与您的QQ/BBS好友分享! |