`
QIAN_QIAN
  • 浏览: 139173 次
  • 性别: Icon_minigender_2
  • 来自: 北京
社区版块
存档分类
最新评论

DispatchAction和MappingDispatchAction的区别

阅读更多

MappingDispatchAction为每个不同的处理方法都要在struts-config.xml配置对应的action而DispatchAction

只需要配置一个然后利用给parameter字段赋值来区分。从我做项目的经验来说,使用MappingDispatchAction恐怕是

最方便最直接了,因为它最容易调试。因为根据form提交的action的不同就可以区分不同的方法(例如增加,删除,修

改)但是缺点就是会是配置文件的内容变多,而DispatchAction方法的配置看上去比较简洁,每种方法各有千秋。

 

下面是一个例子:

 

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;
 }

}

<script type="text/javascript"></script>

分享到:
评论

相关推荐

    DispatchAction

    在Struts框架中,`DispatchAction`和`MappingDispatchAction`是两种常见的控制器组件,用于处理用户请求。它们是Action接口的实现类,主要用于映射HTTP请求到特定的方法,从而实现业务逻辑的分发。 首先,让我们...

    struts中dispatchAction用法

    Struts是Java Web开发中的一款经典MVC框架,它的核心组件之一是DispatchAction,这个组件在...通过学习和分析这些文件,初学者可以更深入地理解Struts中DispatchAction的使用和工作原理,从而更好地进行Java Web开发。

    DispatchAction实例

    在实际的Web应用程序开发中,通常一个URL对应一个Action,而`DispatchAction`则允许一个Action处理多个不同的请求,每个请求映射到Action中的不同方法,提高了代码的可维护性和组织性。 `DispatchAction`的核心机制...

    struts DispatchAction

    Struts DispatchAction是一个在Struts框架中非常重要的概念,它是一种控制器组件,用于处理来自用户的...然而,随着技术的发展,如Struts2的出现,开发者可以选择更现代和模块化的解决方案来代替传统的DispatchAction。

    Struts中等同于DispatchAction类方法

    Struts框架是Java Web开发中一个非常重要的MVC(Model-View-Controller)框架,它为开发者提供了一种结构化的方式来组织和管理应用程序。在早期的Struts版本中,`DispatchAction`类是一个核心组件,它允许我们通过...

    DispatchAction、LookupDispatchAction、SwitchAction的应用

    ### DispatchAction、LookupDispatchAction、SwitchAction 的应用详解 #### 一、DispatchAction 的应用 **DispatchAction** 是 Struts 框架中一个非常有用的类,它位于 `org.apache.struts.actions` 包中。其核心...

    Struts(DispatchAction) + 存储过程 => 实现分页效果

    在这个场景中,我们将探讨如何结合DispatchAction和存储过程来实现分页效果。 首先,理解分页的基本概念。分页是当数据量过大时,为提高用户体验,将数据分成若干部分逐页展示的一种技术。在Web应用中,用户可以逐...

    struts+oracle实现DispatchAction类

    在本项目中,我们关注的是"Struts+Oracle实现DispatchAction类",这是一个将Struts框架与Oracle数据库结合使用,以实现业务逻辑处理的例子。 DispatchAction是Struts框架中的一个关键组件,它扮演着控制器的角色,...

    Struts 之 DispatchAction

    1. **配置struts-config.xml**:首先,在`struts-config.xml`中为`DispatchAction`创建一个配置项,指定它的类路径和映射URL。例如: ```xml ``` 2. **实现DispatchAction**:接下来,你需要创建一个继承...

    解决Struts1.x中使用Validator框架对DispatchAction不同方法使用不同的字段验证的示例

    解决Struts1.x中使用Validator框架对DispatchAction不同方法使用不同的字段验证 你可以先参看我的blog文章:http://blog.csdn.net/qjyong/archive/2008/11/16/3311688.aspx 再决定是否下载。

    Struts2常用标签&DispatchAction.rar

    03Struts2常用标签&DispatchAction.rar03Struts2常用标签&DispatchAction.rar03Struts2常用标签&DispatchAction.rar03Struts2常用标签&DispatchAction.rar

    SSH整合继承DispatchAction的简单例子

    通过分析这些文件,你可以更深入地了解SSH整合和DispatchAction的用法。 总的来说,这个例子是一个实用的学习资源,它展示了如何在实际项目中集成SSH框架,并利用DispatchAction实现请求的分发。对于初学者,这是一...

    Struts1中怎样实现DispatchAction配置多个input属性\Struts1中怎样实现DispatchAction配置多个input属性

    Struts1中怎样实现DispatchAction配置多个input属性\Struts1中怎样实现DispatchAction配置多个input属性

    利用struts标签,dispatchAction,实现增删改查

    在本教程中,我们将深入探讨如何利用Struts的标签库和DispatchAction来实现数据的增删改查操作,这对于初学者来说是一个非常实用的学习主题。 首先,`DispatchAction`是Struts中的一个特殊Action类,它允许我们根据...

    java面试过程中遇到的问题总结

    本文总结了 Java 面试中的一些常见问题,涵盖了 Ajax 的原理、优缺点、 DispatchAction 和 Action 的区别等知识点。 Ajax 的原理 Ajax 是一种异步请求技术,通过 XmlHttpRequest 对象来向服务器发送异步请求,从...

    深入解析Java的Struts框架中的控制器DispatchAction

    它提供了一种模型-视图-控制器(MVC)架构模式,帮助开发者组织和管理应用程序的业务逻辑、数据处理和用户界面。本文将深入解析Struts中的控制器组件,特别是DispatchAction的使用。 在Struts框架中,控制器主要由...

    Struts_DispatchAction的使用

    最近自学java中的框架-struts写了一些小例子,这都是很经典的程序,如果大家瞧得起要下载去看看,顺便给俺找找不足的地方。我的qq 821865130 email qingtian_hechen@163.com 希望大家能多多给我帮助...在此谢谢各位!!

    J2EE_高级Action

    通过以上分析可以看出,`DispatchAction`、`MappingDispatchAction`和`LookupDispatchAction`都是解决单个Action处理多种业务逻辑的有效手段。其中,`DispatchAction`相对简单直接,适用于处理较为简单的场景;`...

    JAVA面试题SSH重点.pdf

    - Struts框架中的Action是处理用户请求的核心组件,有多种类型,如普通Action、SwitchAction、IncludeAction、ForwardAction、DispatchAction、MappingDispatchAction,每种都有特定的用途。 3. **Hibernate HQL与...

    Echarts 自动切换选中状态, 环状饼图内饼和外环同步切换,示例代码

    这可以通过在 `dispatchAction` 操作中同时处理内环和外环的数据项来实现。例如,如果你的内环和外环是同一个系列的不同数据项,你可以一次选择两个数据项。 5. **示例代码**: 一个简单的实现可能如下: ```...

Global site tag (gtag.js) - Google Analytics