改造我们的action
-----template method模式的完美应用
使用struts,action是核心。
为什么要改造action?
让我们先看问题。
通常我们在action内要做很多的操作,譬如要进行权限验证。
或在调用业务之前或之后要做点操作,比如出错的处理。
如果不进行action的extend的,我们要重复很多内容----浪费时间还有可能出错。
如何改造?
public abstract class ActionBase extends Action {
/**
* 在action执行前的操作
* @param mapping
* @param form
* @param request
* @param response
* @throws Exception
*/
protected void doPreAction(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception{
log("in doPreAction!");
}
/**
* * 在action执行后的操作
* @param mapping
* @param form
* @param request
* @param response
* @throws Exception
*/
protected void doAfterActoin(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception{
log("in doAfterActoin!");
}
protected abstract ActionForward performAction(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception;
public ActionForward execute(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response)throws Exception{
doPreAction(mapping,form,request,response);
ActionForward forward = performAction(mapping,form,request,response);
doAfterActoin(mapping,form,request,response);
log("next page="+forward.getPath());
return forward;
}
}
通过使用template method 模式,我们把顶级逻辑完成。
然后在doPreAction中进行权限验证或其他操作。
对performAction使用try catch,然后在doAfterAction进行出错转向或其他操作(需要对上面的代码稍微作些改动)。
如果配合一些其他的操作,如对权限采用SOA方式进行设计,整个系统会更完美。
或不采用Struts form,直接对jsp来的form的参数赋值到Entity Object(如hibernate或其他的类似的,甚至普通的javabean),这个操作直接放在ActionBase中(本人正在完成这个project,大部分功能完成了,详细参考我的网站http://www.jsports.org)。