快速业务通道

一个用于J2EE应用程序的异常处理框架 - 编程入门网

作者 佚名技术 来源 NET编程 浏览 发布时间 2012-06-21
, ex);   ActionErrors errors = new ActionErrors();   errors.add(ActionErrors.GLOBAL_ERROR,new ActionError( exDto.getMessageCode()));   saveErrors(request, errors);   return actionMapping.findForward("SearchAdjustmentPage"); }

如果更仔细地观察我们刚刚编写的异常处理代码,您可能会意识到,为每个Struts方法编写的代码是十分相似的,这也是一个问题。我们的目标是尽可能地去掉样板代码。我们需要再次对它进行抽象。

解决方案是使用模板方法(Template Method)设计模式(引自GOF:“它用于实现一个算法的不变部分,并把可变的算法部分留给子类来实现。”)。我们需要一个包含模板方法形式算法的基类。该算法将包含用于BaseAppException的try-catch块和对dispatchMethod方法的调用,方法实现(委托给派生类)如下面的基于Struts的Action中所示:

public abstract class BaseAppDispatchAction extends DispatchAction{   ...   protected static ThreadLocal   expDisplayDetails = new ThreadLocal();   public ActionForward execute(ActionMapping mapping,ActionForm form, HttpServletRequest request,HttpServletResponse response) throws Exception{    ...    try{     String actionMethod = request.getParameter(mapping.getParameter());     finalDestination =dispatchMethod(mapping,form, request, response,actionMethod);    }catch (BaseAppException Ex) {     ExceptionDisplayDTO expDTO = (ExceptionDisplayDTO)expDisplayDetails .get();     IExceptionHandler expHandler = ExceptionHandlerFactory .getInstance().create();     ExceptionDTO exDto = expHandler.handleException( expDTO.getContext(), userId, Ex);     ActionErrors errors = new ActionErrors();     errors.add(ActionErrors.GLOBAL_ERROR, new ActionError(exDto .getMessageCode()));     saveErrors(request, errors);     return mapping.findForward(expDTO.getActionForwardName());    } catch(Throwable ex){     //log the throwable     //throw ex;    } finally {     expDisplayDetails.set(null);    }

一个用于J2EE应用程序的异常处理框架(4)

时间:2011-01-03 bea ShriKant Vashishtha

在Struts中,DispatchAction::dispatchMethod方法用于把请求转发给正确的Action方法,叫做actionMethod。

我们假定从一个HTTP请求获得searchDivision作为actionMethod:dispatchMethod将在BaseAppDispatchAction的派生Action类中把请求分派给searchDivision方法。在这里,您可以看到,异常处理仅在基类中完成,而派生类则只实现Action方法。这采用了模板方法设计模式,在该模式中,异常处理部分是保持不变的,而dispatchMethod方法的实际实现(可变部分)则交由派生类完成。

修改后的Struts Action方法如下所示:

... String exceptionActionForward = "SearchAdjustmentPage"; String exceptionContext = "divisionAction.searchDivision"; ExceptionDisplayDTO expDTO = new ExceptionDisplayDTO(expActionForward, exceptionContext); expDisplayDetails.set(expDTO); ... DivisionDTO divisionDTO =divisionBusinessDelegate.getDivisionByNum(fromDivisionNum); ...

现在它看起来相当清晰。因为异常处理是在一个集中的位置上(BaseAppDispatchAction)完成的,手动错误可能造成的影响也降至最低。

然而,我们需要设置异常上下文和ActionForward方法的名称,如果有异常出现,请求就会被

凌众科技专业提供服务器租用、服务器托管、企业邮局、虚拟主机等服务,公司网站:http://www.lingzhong.cn 为了给广大客户了解更多的技术信息,本技术文章收集来源于网络,凌众科技尊重文章作者的版权,如果有涉及你的版权有必要删除你的文章,请和我们联系。以上信息与文章正文是不可分割的一部分,如果您要转载本文章,请保留以上信息,谢谢!

分享到: 更多

Copyright ©1999-2011 厦门凌众科技有限公司 厦门优通互联科技开发有限公司 All rights reserved

地址(ADD):厦门软件园二期望海路63号701E(东南融通旁) 邮编(ZIP):361008

电话:0592-5908028 传真:0592-5908039 咨询信箱:web@lingzhong.cn 咨询OICQ:173723134

《中华人民共和国增值电信业务经营许可证》闽B2-20100024  ICP备案:闽ICP备05037997号