Struts中的DispatchAction

相信用过Struts框架的朋友应该都知道有个叫DispatchAction的东西,主要是用来解决因Action过多而导致代码文件膨胀的。

DispatchAction 是Struts1中的一个类,它的父类是Action ,它的作用就在于将多个功能相似的业务逻辑放在同一个Action 中实现,各个业务逻辑通过传入不同的参数来决定执行哪个操作方法。

看一看 DispatchAction 是如何实现的.

例如:下面的例子。按照struts的流程来分析,JSP–>ActionServlet–>struts-config.xml–>Action–>ActionForward–>browser

1.JSP页面提交表单到ActionServlet,ActionServlet截取URL,然后根据struts-config.xml配置文件去找相应的Action,执行相应的操作(这里Action只有一个即UserAction,如何区别是何种操作?—根据方法名来找到不同的操作。)颜色相同一定要匹配。

action=”/user/main.do?flag=add”;

action=”/user/main.do?flag=del”;

action=”/user/main.do?flag=modify”;

2.UserAction继承于DispatchAction,包含了三个操作方法,分别是add(),del(),modify(),方法名称与form表单传递的属性一一对应

 

1
2
3
4
5
6
7
8
9
10
11
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表单中传参数时与之统一就行。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
<action-mappings>
  <action
 path=”/user/main”
 type=”com.lpq.action.UserAction”
 name=”userForm”
 scope=”request”
 parameter=”flag”
 >
  <forward name=”add_success” path=”/user/main.do?flag=list” redirect=”true”/>
  <forward name=”del_success” path=”/user/main.do?flag=list” redirect=”true”/>
  <forward name=”modify_success” path=”/user/main.do?flag=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方法并抛出异常。

4.UserAction 可以复写execute方法,但复写完成之后必须显示调用它的上层实现DispatchAction.execute()

 

除非注明,Coder文章均为原创,转载请以链接形式标明本文地址

本文地址:http://www.alonemonkey.com/dispatchaction.html

本文链接:http://www.alonemonkey.com/dispatchaction.html