DispatchAction是一个抽象类,继承于Action。它帮助我们使用一个Action类,来集中处理多个操作,从而节省了类的数目。
例如:下面的例子。按照struts的流程来分析,JSP-->ActionServlet-->struts-config.xml-->Action-->ActionForward-->browser
1.JSP页面提交表单到ActionServlet,ActionServlet截取URL,然后根据struts-config.xml配置文件去找相应的Action,执行相应的操作(这里Action只有一个即UserAction,如何区别是何种操作?---根据方法名来找到不同的操作。)颜色相同一定要匹配。
action="usermaintain.do?command=add";
action="usermaintain.do?command=del";
action="usermaintain.do?command=modify";
2.UserAction继承于DispatchAction,包含了三个操作方法,分别是add(),del(),modify(),方法名称与form表单传递的属性一一对应
public class UserAction extends DispatchAction {
public ActionForward add(mapping, form, request, response) throws Exception {
return mapping.findForward("add_success");
}
public ActionForward del(mapping, form, request, response) throws Exception {
return mapping.findForward("del_success");
}
public ActionForward modify(mapping, form, request, response) throws Exception {
return mapping.findForward("modify_success");
}
}
3.struts-config.xml中,parameter的属性值是可以任意起的,即command可以是其他。只要保证form表单中传参数时与之统一就行。
<action-mappings>
<action path="/user/usermaintain"
type="com.bjsxt.drp.bussiness.usermgr.actions.UserAction"
name="userForm"
scope="request"
parameter="command"
>
<forward name="add_success" path="/user/usermaintain.do?command=list" redirect="true"/>
<forward name="del_success" path="/user/usermaintain.do?command=list" redirect="true"/>
<forward name="modify_success" path="/user/usermaintain.do?command=list" redirect="true"/>
<forward name="list_success" path="/user/userlist.jsp"/>
<forward name="find_success" path="/user/usermodify.jsp"/>
</action>
</action-mappings>
这里的forward有的是直接提交到一个JSP页面,有的是提交到另一个动作。forward中name值和UserAction中findForward匹配。
注:1.DispatchAction中各个操作方法的参数如add(),del(),modify()和execute()方法的参数相同。
2.DispatchAction通过方法名来区别各个不同的操作。
3.在调用DispatchAction的时候command参数是不能为空的,如果空,DispatchAction会调用unspecified方法并抛出异常。详见下一遍DispatchAction的流程
4.UserAction 可以复写execute方法,但复写完成之后必须显示调用它的上层实现DispatchAction.execute()