DispatchAction和MappingDispatchAction区别
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区别相关推荐
- JavaWeb -- Struts1 多文件上传与下载 DownloadAction, DispatchAction
1. 多文件上传与下载 上传下载jsp: <%@ page language="java" import="java.util.*" pageEncodi ...
- 一个action类中写多个方法需要继承MappingDispatchAction
原本action里只有一个默认execute方法,今天我在action里增加了方法后发现页面卡死无法跳转了,原来如果写多个方法要继承DispatchAction类. 一个action中有一个execu ...
- Struts与Struts2的区别
Struts与Struts2的区别 首先看一张Struts2的发展路线图: 从Struts2的发展过程来看,Struts2继承了Struts与Webwork的特性,形成了新的框架.但是它的 ...
- RPC 笔记(01)— RPC概念、调用流程、RPC 与 Restful API 区别
1. 基本概念 PRC 远程过程调用 Remote Procedure Call,其就是一个节点请求另外一个节点提供的服务.当两个物理分离的子系统需要建立逻辑上的关联时,RPC 是牵线搭桥的常见技术手 ...
- C++ 笔记(28)— C++ 中 NULL和 nullptr 的区别
最近看公司代码的时候发现在判断指针是否为空的时候,有的时候用的是 NULL, 有的时候用的是 nullptr 感觉很奇怪,好奇心驱使我查了下两者的区别,发现还是有很多细节需要学习的. 1. NULL ...
- gcc 和 g++ 的联系和区别,使用 gcc 编译 c++
GCC 编译器已经为我们提供了调用它的接口,对于 C 语言或者 C++ 程序,可以通过执行 gcc 或者 g++ 指令来调用 GCC 编译器. 实际使用中我们更习惯使用 gcc 指令编译 C 语言程序 ...
- Python2 与 Python3 区别
Python2.x 与 Python3.x 区别 1. print 函数 Python2 中 print 是语句(statement),Python3 中 print 则变成了函数.在 Python3 ...
- Docker 入门系列(1)- 初识容器,镜像、容器、仓库的区别
Docker 简介 Docker 是一个开源的应用容器引擎,基于 Go 语言 并遵从Apache2.0协议开源. Docker 可以让开发者打包他们的应用以及依赖包到一个轻量级.可移植的容器中,然后发 ...
- HTTP 协议入门 — (TCP/IP协议族、通信传输流、URI 与 URL 的区别、Cookie 状态管理、HTTP 支持的方法、状态码类别、HTTP 首部字段)
TCP/IP协议族 在介绍 HTTP 协议之前,我们先对 TCP/IP 协议族有个大概的了解,TCP/IP 协议从上到下主要分为应用层.传输层.网络层和数据链路层,各层的主要功能如下表所示: 协议层 ...
- python二进制打开(rb)和文本格式打开(r)什么区别?
使用 open() 函数以文本格式打开文件和以二进制格式打开文件,唯一的区别是对文件中换行符的处理不同. 在 Windows 系统中,文件中用 "\r\n" 作为行末标识符(即换行 ...
最新文章
- 经典PID控制算法用C语言实现!
- android网络游戏开发实战pdf_Python项目开发实战+第2版PDF高清文档下载
- 【C语言进阶深度学习记录】六 C语言中的分支语句
- linux中权限的名词解释,Linux的基本权限和特殊权限
- 恕我直言,很多小样本学习的工作就是不切实际的
- 判断jQuery选择器结果为空 - CSDN博客
- 怎么编写java_程序员学编程第一步:手把手教你开发第一个Java程序
- 控制虚拟服务器的软件,虚拟主机控制面板
- java day17 【线程、同步】
- win mysql 命令行提示_数据分析进阶——mysql基本语句
- IEEE Access 期刊投稿
- 硬件基本概念-模拟电子电路
- [原创]IBM BLM模型思维导图
- AD(altium designer)15原理图与PCB设计教程(七)——印制电路板的布局设计
- C语言源代码系列-管理系统之车票管理系统
- Qt 小键盘功能实现
- 增强 Jupyter Notebook 的功能,这里有四个妙招
- SAP中总账科目事务FS00/FSP0/FSS0的关系和区别
- zip文件用什么打开,如何打开zip文件
- 2018中国计算机学会推荐国际学术会议(人工智能)
热门文章
- [SQl读书笔记]§6.Transact-SQL(4)
- [RMI TCP Connection(10.0.20.175:2181)] DEBUG org.apache.zookeeper.ClientCnxn - Got ping response for
- MyBatis #{ } ${ }
- Hadoop启动jobhistoryserver
- 硬核! BAT 究竟是怎么玩转中台的!
- 基于Redis和Tomcat实现集群的Session管理
- 2016阿里技术论坛,阿里技术大神的互联网趋势分享
- Python之父再度发声:我们能为中国的“996”程序员做什么?
- 从 0 开始学习 GitHub 电子书免费送
- 自学Android到什么程度才能找到工作?