`
Airflare
  • 浏览: 1427 次
  • 性别: Icon_minigender_1
  • 来自: 沈阳
最近访客 更多访客>>
文章分类
社区版块
存档分类
最新评论

几种DispatchAction的区别

阅读更多
java.lang.Object

  org.apache.struts.action.Action

  org.apache.struts.actions.DispatchAction

  org.apache.struts.actions.LookupDispatchAction(Struts1.1)

  org.apache.struts.actions.EventDispatchAction(Struts1.2.9)

  org.apache.struts.actions.MappingDispatchAction(Struts1.2)

  DispatchAction

  public abstract class DispatchAction extends Action

  这是一个抽象的Action,它会根据request 中的parameter来执行相应的方法。通个这个Action类可以将不同的Action集中到一个Action文件中来。

  struts-config.xml:

  <action path="/subscription" type="org.example.SubscriptionAction" name="subscriptionForm"  scope="request" input="/subscription.jsp" parameter="method"/>

  在Action中要有相应的方法:

  public class SubscriptionAction extends DispatchAction {

  public ActionForward delete(ActionMapping mapping, ActionForm form,

  HttpServletRequest request,

  HttpServletResponse response) throws Exception {}

  public ActionForward insert(ActionMapping mapping, ActionForm form,

  HttpServletRequest request,

  HttpServletResponse response) throws Exception {}

  public ActionForward update(ActionMapping mapping, ActionForm form,

  HttpServletRequest request,

  HttpServletResponse response) throws Exception {}

  }

  然后可以通过这样的方法来访问你的程序:

  http://localhost:8080/myapp/subscription.do?method=delete

  http://localhost:8080/myapp/subscription.do?method=insert

  http://localhost:8080/myapp/subscription.do?method=update

  如果parameter中参数为空,则调用Action中的unspecified方法

  LookupDispatchAction

  public abstract class LookupDispatchAction extends DispatchAction

  通过这个Action抽象类继承DispatchAction,它的相应方法的执行由ActionMapping中parameter属性决定。每个动作实际上就是<html:submit>标签的property属性值。它适合在一个form中有很多按钮,按不同的按钮则执行不同的操作。

  struts-config.xml:

  <action path="/subscription" type="org.example.SubscriptionAction" name="subscriptionForm" scope="request"

  input="/subscription.jsp" parameter="method"/>

  ApplicationResources.properties:

  button.add=Add Record

  button.delete=Delete Record
JSP:

  <%@ page pageEncoding="GBK"%>

  <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>

  <html>

  <head>

  <title>多提交演示</title>

  </head>

  <body>

  <html:form action="subscription">

  <html:submit property="method">

  <bean:message key="button.add"/>

  </html:submit>

  <html:submit property="method">

  <bean:message key="button.delete"/>

  </html:submit>

  </html:form>

  </body>

  </html>

  在Action中必须实现getKeyMethodMap方法:

  public class SubscriptionAction extends LookupDispatchAction {

  protected Map getKeyMethodMap() {

  Map map = new HashMap();

  map.put("button.add", "add");

  map.put("button.delete", "delete");

  return map;

  }

  public ActionForward add(ActionMapping mapping,

  ActionForm form,

  HttpServletRequest request,

  HttpServletResponse response) throws Exception {}

  public ActionForward delete(ActionMapping mapping,

  ActionForm form,

  HttpServletRequest request,

  HttpServletResponse response) throws Exception {}

  }

  EventDispatchAction

  public class EventDispatchAction extends DispatchAction

  通过这个Action抽象类继承DispatchAction,它的相应方法的执行由ActionMapping中parameter属性指定多个动作,中间用逗号(,)分隔。每个动作实际上就是<html:submit>标签的property属性值。它适合在一个form中有很多按钮,按不同的按钮则执行不同的操作。

  struts-config.xml:

  (parameter中的"recalc=recalculate"意思为<html:submit>标签的property属性值为recalc调用recalculate方法,出于安全考虑能够隐藏后台的业务方法名。"defaule=save"这是可选的,没有配置property属性的<html:submit>标签将调用defaule中设置的方法名,如果defaule没有指定任何参数,则调用Action中的unspecified方法)

  <action path="/subscription" type="org.example.SubscriptionAction" name="subscriptionForm" scope="request"

  input="/subscription.jsp" parameter="save,back,recalc=recalculate,default=save"/>
JSP:

  <%@ page pageEncoding="GBK"%>

  <%@ taglib uri="http://struts.apache.org/tags-html" prefix="html"%>

  <html>

  <head>

  <title>多提交演示</title>

  </head>

  <body>

  <html:form action="subscription">

  <html:submit property="save" value="保存"/>

  <html:submit property="back" value="后退"/>

  <html:submit property="recalc" value="重新计算"/>

  </html:form>

  </body>

  </html>

  在Action中要有相应的方法:

  public class SubscriptionAction extends LookupDispatchAction {

  public ActionForward save(ActionMapping mapping,

  ActionForm form,

  HttpServletRequest request,

  HttpServletResponse response) throws Exception {}

  public ActionForward back(ActionMapping mapping,

  ActionForm form,

  HttpServletRequest request,

  HttpServletResponse response) throws Exception {}

  public ActionForward recalculate(ActionMapping mapping,

  ActionForm form,

  HttpServletRequest request,

  HttpServletResponse response) throws Exception {}

  }

  MappingDispatchAction

  public class MappingDispatchAction extends DispatchAction

  它的相应方法的执行由ActionMapping中parameter名决定,注意这里和LookupDispatchAction不同,LookupDispatchAction的相应方法的执行由ActionMapping中parameter属性决定。
struts-config.xml:

  <action path="/createSubscription" type="org.example.SubscriptionAction" parameter="create">

  <forward name="success" path="/createSubscription.jsp"/>

  </action>

  <action path="/editSubscription" type="org.example.SubscriptionAction" parameter="edit">

  <forward name="success" path="/editSubscription.jsp"/>

  </action>

  <action path="/saveSubscription" type="org.example.SubscriptionAction" parameter="save"

  name="subscriptionForm" validate="true" input="/editSubscription.jsp" scope="request">

  <forward name="success" path="/savedSubscription.jsp"/>

  </action>

  <action path="/deleteSubscription" type="org.example.SubscriptionAction" name="subscriptionForm"

  scope="request" input="/subscription.jsp" parameter="delete">

  <forward name="success" path="/deletedSubscription.jsp"/>

  </action>

  <action path="/listSubscriptions" type="org.example.SubscriptionAction" parameter="list">

  <forward name="success" path="/subscriptionList.jsp"/>

  </action>

  在Action中要有相应的方法:

  public class SubscriptionAction extends MappingDispatchAction {

  public ActionForward create(ActionMapping mapping, ActionForm form,

  HttpServletRequest request,

  HttpServletResponse response) throws Exception {}

  public ActionForward edit(ActionMapping mapping, ActionForm form,

  HttpServletRequest request,

  HttpServletResponse response) throws Exception {}

  public ActionForward save(ActionMapping mapping, ActionForm form,

  HttpServletRequest request,

  HttpServletResponse response) throws Exception {}

  public ActionForward delete(ActionMapping mapping, ActionForm form,

  HttpServletRequest request,

  HttpServletResponse response) throws Exception {}

  public ActionForward list(ActionMapping mapping, ActionForm form,

  HttpServletRequest request,

  HttpServletResponse response) throws Exception {}

  }

  然后可以通过这样的方法来访问你的程序:

  http://localhost:8080/myapp/create.do

  http://localhost:8080/myapp/edit.do

  http://localhost:8080/myapp/save.do

  http://localhost:8080/myapp/delete.do

  http://localhost:8080/myapp/list.do

  如果parameter中参数为空,则调用Action中的unspecified方法

  编辑特别推荐:

  总结Java标准类库中类型相互转化的方法

  实例讲解main()中方法调用的问题

  一个Java小球撞击墙面的小程序

分享到:
评论

相关推荐

    整合Spring与Struts的几种方法

    这种方式简单,但存在几个缺点:首先,Action与Spring紧密耦合,不利于更换其他IoC容器;其次,不利于利用Spring的AOP特性;最后,不适用于使用DispatchAction的Struts应用。 2. **使用DelegatingRequestProcessor...

    Struts之进阶篇.pdf

    除了DispatchAction之外,Struts框架还提供了其他几种常用的Action类,包括: - **ForwardAction**:用于简单的页面跳转。 - **IncludeAction**:通过包含的方式响应用户请求,而不是完全转发到新的页面。 - **...

    J2EE_高级Action

    针对上述问题,我们可以采用以下几种方法来优化Action的设计: 1. **DispatchAction** - **定义**:`DispatchAction`是Struts框架提供的一种特殊的`Action`实现,它可以在一个Action中根据不同的请求参数执行不同...

    Java求职面试宝典各大公司常考知识点

    Struts+Hibernate+...4.7. transaction有那几种实现 21 4 综合部分 21 4.1. Hibernate和spring中常出现的几个异常 21 4.2. Hibernate与jdbc的联系 22 4.3. Hibernate与spring的联系 22 4.4. 项目中为什么使用SSH 23

    java面试题

    73.8. transaction有那几种实现(事务处理)(Spring) 79 73.9. Spring IoC 79 73.10. Spring AOP面向方面编程 82 74. 项目中为什么使用SSH 85 75. Spring在SSH中的作用 86 76. weblogic 86 76.1. 如何给weblogic指定...

    Struts Struts1例子Struts注意事项

    而DispatchAction则是一种特殊的Action,它可以处理多个请求,提高了代码的复用性。 接下来,我们通过一个简单的例子来了解Struts1的应用。假设我们要创建一个用户登录的功能。首先,创建一个名为LoginForm的...

    详细动态form案例

    在IT行业中,动态表单(Dynamic Form)是一种常见的前端开发技术,它允许用户根据特定需求自定义表单字段,提供灵活的数据输入界面。本案例主要关注动态表单的实现,特别是涉及错误提示和动态生成表单功能的实现。...

    ECHars地图下钻源码,放入项目即可使用

    ECharts地图下钻功能通常涉及到以下几个关键知识点: 1. **ECharts库**:ECharts是一款基于JavaScript的开源图表库,支持丰富的图形类型,包括柱状图、折线图、饼图以及各种地理图表。其地图组件能够加载自定义地图...

    LookupDispatchAction 是使用方法

    public class LookupDispatchAction extends DispatchAction { public ActionForward method1(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws ...

    struts高级日记

    根据提供的文件信息,我们可以归纳出以下几个关键的知识点: ### Struts 测试方法及优化建议 在 Struts 的应用开发过程中,对于 Action 类的测试是非常重要的一个环节。在给定的代码示例中,作者提到了一种传统的...

    strust2.0学习资料

    Struts2框架在设计上更加灵活和强大,其主要特性包括但不限于以下几点: 1. **统一性**:Struts2结合了Struts1和WebWork的优点,实现了两者的完美融合。 2. **灵活性**:相较于Struts1,Struts2在处理Action的方式...

    java工程师项目经验简历范文.pdf

    【Java工程师项目经验】在Java工程师的简历中,通常会包含以下几个关键知识点: 1. **CoreJava编程**:这是Java的基础,包括面向对象编程、集合框架、多线程、异常处理、I/O流等,良好的代码规范和注释习惯是专业...

    JavaEE学习大纲.pdf

    构建Struts1.x开发环境通常涉及以下几个步骤: 1. **导入依赖**:首先,你需要将Struts库中的所有jar文件引入到你的项目中,这些文件通常位于`struts/lib`目录下,包含了Struts框架运行所需的类库。 2. **配置web....

    struts1实现文件上传

    为了实现文件上传功能,主要会用到以下几个类和技术: 1. **ActionForm**:Struts1中的表单对象,用于封装用户提交的数据。 2. **ActionMapping**:表示一个请求映射,用于连接ActionForm和Action。 3. **Action**...

    java 反射 报错 no such method exception

    在Java编程中,反射是一种强大的机制,允许程序在运行时检查和修改自身结构和行为。然而,当开发者尝试使用反射调用一个不存在的方法时,便会遇到`java.lang.NoSuchMethodException`异常。本文将深入探讨此异常,...

    Struts1.x其它文本编辑器使用SQL2005.rar

    - DispatchAction:Struts1.x中的一种扩展Action,可以处理多个请求方法,每个方法对应一个特定的操作。 - ActionForm:用户的输入数据会被封装到ActionForm对象中,然后传递给Action处理。 - Action Mapping:...

    地图下钻.rar

    在IT领域,地图可视化是一种非常重要的数据展示方式,尤其在地理数据分析、城市规划、交通管理等领域。ECharts,一个由百度开发的开源JavaScript图表库,提供了丰富的图表类型,包括地图图表,可以很好地满足这种...

Global site tag (gtag.js) - Google Analytics