很多时候我们在业务上需要把DispatchAction封装成自己项目的一个基类,以方便完成一些自己业务上的共通处理。DispatchAction是Action的一个子类,它的执行依然是先执行excute方法,根据参数来实行具体的业务分发。
现在,我们先来写一个属于自己的DispatchAction:
package blog.struts.base;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;

public abstract class BaseAction extends DispatchAction ...{
public ActionForward execute(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response)
throws Exception ...{

if ( !this.doFirst(mapping, form, request, response) )
...{
// 前期处理的错误处理
}
else
...{
}
ActionForward forward = super.execute(mapping, form, request, response);

if ( this.doLast(mapping, form, request, response) )
...{
/ 后期处理的错误处理
}
return forward;
}

protected boolean doFirst(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception ...{
//业务的前期处理
}
protected boolean doLast(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception ...{
// 业务的后期处理
}
}
我们现在可以写一个自己项目的Action继承于上面的BaseAction:
package blog.struts.action;

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;

import blog.struts.base.BaseAction;

public class TestAction extends BaseAction {
public ActionForward test(ActionMapping mapping, ActionForm form,
HttpServletRequest request, HttpServletResponse response) throws Exception{

// 具体的业务处理
return mapping.findForward("test");
}
}
现在我们执行TestAction的时候都会先进行基类的doFirst,doLast方法了。
现在,我们先来写一个属于自己的DispatchAction:










































我们现在可以写一个自己项目的Action继承于上面的BaseAction:





















