DispatchAction和MappingDispatchAction的区别
DispatchAction是MappingDispatchAction的父类,

用同一表单提交到同一个action而需要两个不同方法业务做处理的解决方式说明两个Action的不同

DispatchAction:
一个类继承DispatchAction后,写自定义方法名(按照execute方法格式),分别处理不同的业务逻辑
public class LoginAction extends DispatchAction{

public ActionForward add(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){}
 
 public ActionForward modify(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){}
}

在配置文件中写法如下,只需要写一个action标签:
<action path="/login" type="org.whatisjava.LoginAction" name="loginForm" parameter="method">
<forward......./>
</action>
注意parameter="method" 该配置指定要传来的表单需要一个名为method的属性来指定调用org.whatisjava.LoginAction类中的何种方法
表单代码如下:
<html:form action="login.do">
<table>
<tr>
 <th><bean:message key="username"/></th> <!--bean:message读资源文件里指定的key-->
 <th><html:text property="username" size="15"></td>
</tr>
<tr>
 <th><bean:message key="pass"/></th> <!--bean:message读资源文件里指定的key-->
 <th><html:text property="pass" size="15"></td>
</tr>
<tr>
 <td>
<!--注意这里隐藏域 为了给action传一个parameter,配置文件中的parameter指定为这里的name为"method"-->
<!--两个提交按钮不同的提交method.value的值分别为modify和add,是action中的方法名-->
  <input type="hiden" name="method" value="add"/>
  <input type="submit" value='<bean:message key="button.add"/>' onClick="method.value='add'">
  <input type="submit" value='<bean:message key="button.modify"/>' onClick="method.value='modify'">
 </td>
</tr>

MappingDispatchAction:
一个类继承MappingDispatchAction
public class LoginAction extends MappingDispatchAction{

public ActionForward add(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){}
 
 public ActionForward modify(ActionMapping mapping,ActionForm form,HttpServletRequest request,HttpServletResponse response){}
}

配置文件为两个方法配置不同的<action>,有几个方法就写几个action标签
<!--这里的parameter指定的为action类中的自定义方法的名字-->
<!--这里path为两个不同的path,而DispatchAction只需要一个path-->
<action path="/add" type="org.whatisjava.LoginAction" name="loginForm" parameter="add">
<forward......./>
</action>
<action path="/modify" type="org.whatisjava.LoginAction" name="loginForm" parameter="modify">
<forward......./>
</action>

表单的代码也有所不同
第一个submit按钮的onClick="document.loginForm.action='add.do'"
第二个submit按钮的onClick="document.loginForm.action='modify.do'"

DispatchAction需要表单传不同的参数来区别不同的业务方法
MappingDispatchAction需要两个不同的action标签指定不同的parameter来找对应方法,提交的path也不一样

自己写一个DispatchAction模仿struts提供的,用到反射技术
public class DispatchAction extends Action {
 private Map map = Collections.synchronizedMap(new HashMap());

@Override
 public ActionForward execute(ActionMapping mapping, ActionForm form,
   HttpServletRequest request, HttpServletResponse response)
   throws Exception {
  String param = mapping.getParameter();
  String methodName = request.getParameter(param);

Method method = (Method) map.get(methodName);
  if (method == null) {
   Class clazz = this.getClass();
   method = clazz.getMethod(methodName, new Class[] {
     ActionMapping.class, ActionForm.class,
     HttpServletRequest.class, HttpServletResponse.class });
   map.put(methodName, method);
  }

ActionForward forward = (ActionForward) method.invoke(this,
    new Object[] { mapping, form, request, response });

return forward;
 }

}

转载于:https://www.cnblogs.com/niuxiaohao/archive/2011/04/27/2030390.html

DispatchAction和MappingDispatchAction区别相关推荐

  1. JavaWeb -- Struts1 多文件上传与下载 DownloadAction, DispatchAction

    1. 多文件上传与下载 上传下载jsp: <%@ page language="java" import="java.util.*" pageEncodi ...

  2. 一个action类中写多个方法需要继承MappingDispatchAction

    原本action里只有一个默认execute方法,今天我在action里增加了方法后发现页面卡死无法跳转了,原来如果写多个方法要继承DispatchAction类. 一个action中有一个execu ...

  3. Struts与Struts2的区别

    Struts与Struts2的区别 首先看一张Struts2的发展路线图:       从Struts2的发展过程来看,Struts2继承了Struts与Webwork的特性,形成了新的框架.但是它的 ...

  4. RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别

    1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...

  5. C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别

    最近看公司代码的时候发现在判断指针是否为空的时候,有的时候用的是 NULL, 有的时候用的是 nullptr 感觉很奇怪,好奇心驱使我查了下两者的区别,发现还是有很多细节需要学习的. 1. NULL ...

  6. gcc 和 g++ 的联系和区别,使用 gcc 编译 c++

    GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器. 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序 ...

  7. Python2 与 Python3 区别

    Python2.x 与 Python3.x 区别 1. print 函数 Python2 中 print 是语句(statement),Python3 中 print 则变成了函数.在 Python3 ...

  8. Docker 入门系列(1)- 初识容器,镜像、容器、仓库的区别

    Docker 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发 ...

  9. HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)

    TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...

  10. python二进制打开(rb)和文本格式打开(r)什么区别?

    使用 open() 函数以文本格式打开文件和以二进制格式打开文件,唯一的区别是对文件中换行符的处理不同. 在 Windows 系统中,文件中用 "\r\n" 作为行末标识符(即换行 ...

最新文章

  1. 经典PID控制算法用C语言实现!
  2. android网络游戏开发实战pdf_Python项目开发实战+第2版PDF高清文档下载
  3. 【C语言进阶深度学习记录】六 C语言中的分支语句
  4. linux中权限的名词解释,Linux的基本权限和特殊权限
  5. 恕我直言,很多小样本学习的工作就是不切实际的
  6. 判断jQuery选择器结果为空 - CSDN博客
  7. 怎么编写java_程序员学编程第一步:手把手教你开发第一个Java程序
  8. 控制虚拟服务器的软件,虚拟主机控制面板
  9. java day17 【线程、同步】
  10. win mysql 命令行提示_数据分析进阶——mysql基本语句
  11. IEEE Access 期刊投稿
  12. 硬件基本概念-模拟电子电路
  13. [原创]IBM BLM模型思维导图
  14. AD(altium designer)15原理图与PCB设计教程(七)——印制电路板的布局设计
  15. C语言源代码系列-管理系统之车票管理系统
  16. Qt 小键盘功能实现
  17. 增强 Jupyter Notebook 的功能,这里有四个妙招
  18. SAP中总账科目事务FS00/FSP0/FSS0的关系和区别
  19. zip文件用什么打开,如何打开zip文件
  20. 2018中国计算机学会推荐国际学术会议(人工智能)

热门文章

  1. [SQl读书笔记]§6.Transact-SQL(4)
  2. [RMI TCP Connection(10.0.20.175:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Got ping response for
  3. MyBatis #{ } ${ }
  4. Hadoop启动jobhistoryserver
  5. 硬核! BAT 究竟是怎么玩转中台的!
  6. 基于Redis和Tomcat实现集群的Session管理
  7. 2016阿里技术论坛,阿里技术大神的互联网趋势分享
  8. Python之父再度发声:我们能为中国的“996”程序员做什么?
  9. 从 0 开始学习 GitHub 电子书免费送
  10. 自学Android到什么程度才能找到工作?