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

DispatchAction类的使用

阅读更多

一. 由来

    最近用Struts1.x做项目时遇到个问题,对一个表做操作,增删改查什么的,需要定义很多Action对应相应的操作,假如有4个jsp,分别是 user表的增删改查页,理论上就要有4个增删改查Action,一个jsp对应一个Action,夸张了些吧。。。,另一种方法是写4个jsp,每个 jsp中写一个隐藏域,Action只写一个,4个jsp都提交的这个Action,在Action里,取出隐藏域的值来判断是由哪个jsp提交过来的, 这种方法貌似也不是太好,因为会造成execute方法太长了,很恶心人。

    查了孙维琴的书,原来Struts.x早就有解决方案了——DispatchAction

二. DispatchAction的使用

    恩,虽然是从孙维琴的书上抄下来的,但是看看吧,就算给自己连手了。

    正文如下:

    通常,在一个Action类中只能完成一种业务操作,如果希望在同一个Action类中完成一组相关的业务操作,可以使用DispatchAction 类。例如,与购物车相关的业务操作包括:查看购物车、添加商品、修改商品及数量等。一种设计方案是为每种业务操作创建独立的Action类,如 AddItemAction、ViewShoppingCartAction和UpdateShoppingCartAction。尽管这种设计方案是可 行的,但是这三个Action在执行各自的任务中,可能会执行一些相同的操作。

    为了减少重复编程,使应用更加便于维护,可以由同一个Action类来完成一组相关的业务操作,DispatchAction类就提供了这种功能。

    创建一个扩展DispatchAction类的子类,不必覆盖execute()方法,而是创建一些实现实际业务操作的方法,这些业务方法都应该和 execute()方法具有同样的方法签名,即它们的参数和返回类型都应该相同,此外也应该声明抛出的Exception异常。例程5-6是一个扩展 DispatchAction的例子。

例程5-6 ShoppingCartActions.java

    package netstore.order;

    public class ShoppingCartActions extends NetstoreDispatchAction{

        public ActionForward view(ActionMapping mapping,

                                  ActionForm form,

                                  HttpServletRequest request,

                                  HttpServletResponse response) throws Exception {

            SessionContainer sessionContainer=getSessionContainer(request);

            return mapping.findForward(IConstants.SUCCESS_KEY);

        }

 

        public ActionForward update(ActionMapping mapping,

                                    ActionForm form,

                                    HttpServletRequest request,

                                    HttpServletResponse response) throws Exception {

            updateItems(request);

            updateQuantitis(request);

            return mapping.findForward(IConstants.SUCCESS_KEY);

        }

 

        public ActionForward addItem(ActionMapping mapping,

                                     ActionForm form,

                                     HttpServletRequest request,

                                     HttpServletResponse response) throws Exception {

            String itemId = request.getParameter(IConstants.ID_KEY);

            ItemDetailView itemDetailView = serviceImpl.getItemDetailView(itemId);

        }

    如上所示:在DispatchAction中定义了三个方法view、update、addItem方法,这三个方法的签名与execute相同。那么当jsp提交到这个Action中使struts是怎么知道调用哪个方法呢???

    在配置DispatchAction类时,需要把parameter属性设置为“method”,以下是ShoppingCartActions类的配置代码:

        < path="/cart">

                type="netstore.order.ShoppingCartActions"

                scope="request"

                input="/order/shoppingcart.jsp"

                validate="false"

                parameter="method" >

 

    把parameter的属性设置为"method"后,当用户请求访问DispatchAction时,应该提供method请求参数,例如:

        http://localhost:8080/nestore/action/cart?method=addItem&id=2

    以上method请求参数值为"addItem",它指定了需要调用的业务方法,因此DispatchAction将调用相应的addItem()方法。

分享到:
评论

相关推荐

    Struts中等同于DispatchAction类方法

    总结来说,"Struts中等同于DispatchAction类方法"是一种在不直接使用`DispatchAction`基类的情况下,通过前端传递方法名并在后端使用反射调用相应方法的技术,以实现多请求映射到单个Action类的多个方法。...

    struts+oracle实现DispatchAction类

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

    DispatchAction

    `DispatchAction`是由Apache Struts框架提供的一个基础类,它扩展了`Action`类。它的主要功能是将一个HTTP请求路由到多个方法,而不是只调用一个单一的方法来处理所有的请求。`DispatchAction`通过请求参数(通常是...

    struts中dispatchAction用法

    1. **创建DispatchAction类**:首先,你需要继承自org.apache.struts.actions.DispatchAction,创建一个新的Action类。在这个类中,你需要定义一系列处理特定业务的方法,这些方法名将对应请求中的参数。 ```java ...

    DispatchAction实例

    在Struts框架中,`DispatchAction`是一个非常重要的组件,它是Struts提供的一个扩展自`Action`类的抽象类,主要用于处理多个请求方法的情况。在实际的Web应用程序开发中,通常一个URL对应一个Action,而`...

    struts DispatchAction

    使用DispatchAction的另一个优点是,它可以结合Struts的国际化和主题功能,为不同的用户群体提供定制的视图。此外,通过将Action类中的方法组织成逻辑相关的组,可以更方便地进行权限控制和事务管理。 然而,需要...

    DispatchAction、LookupDispatchAction、SwitchAction的应用

    为了使用 **DispatchAction**,首先需要继承该类并实现具体的业务逻辑方法。例如: ```java import org.apache.struts.actions.DispatchAction; public class ArticleAction extends DispatchAction { /** * ...

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

    DispatchAction是Struts框架中的一个动作类,用于处理用户的请求并转发到相应的业务逻辑。在这个场景中,我们将探讨如何结合DispatchAction和存储过程来实现分页效果。 首先,理解分页的基本概念。分页是当数据量过...

    Struts 之 DispatchAction

    在本篇文章中,我们将深入探讨`DispatchAction`的工作原理、优点以及如何在实际项目中使用。 `DispatchAction`是Struts提供的一个扩展自`Action`类的预定义动作,它的主要目的是通过不同的方法来处理来自客户端的...

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

    首先,`DispatchAction`是Struts中的一个特殊Action类,它允许我们根据请求参数的不同,调用不同的方法来处理请求。这种设计使得Action类可以更加模块化,每个方法对应一种特定的操作,如添加、删除、更新或查询。 ...

    SSH整合继承DispatchAction的简单例子

    DispatchAction是Struts中的一个抽象类,它是Struts MVC模式中的Controller部分。当一个HTTP请求到达时,Struts会根据配置的ActionMapping找到对应的Action执行。DispatchAction允许我们在一个Action类中定义多个...

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

    本文将深入解析Struts中的控制器组件,特别是DispatchAction的使用。 在Struts框架中,控制器主要由ActionServlet和Action类组成。ActionServlet作为前端控制器,负责拦截所有HTTP请求,并根据配置文件(struts-...

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

    DispatchAction 的 parameter 属性是给 DispatchAction 使用的,你的类要继承 DispatchAction 类,而不是普通的 Action,Action 只会执行 execute 方法,DispatchAction 会根据 parameter 的值执行特定的方法。...

    struts LookupdispathAction类使用实例

    Struts LookupDispatchAction 类是Apache Struts 框架中的一种高级控制器,它扩展了`DispatchAction`类,提供了一种更加灵活的方式来处理请求映射。在 Struts 框架中,Action 是业务逻辑的核心组件,负责接收HTTP...

    速动画教程系列第13集

    5. **优点与局限性**:DispatchAction简化了代码结构,使得每个方法可以专注于单一的业务操作,但随着应用复杂度增加,DispatchAction类可能变得庞大,维护起来较为困难。这也是为什么在Struts 2中,引入了更灵活的...

    DisapatchAction测试和RequestProcessor控制器类

    在实际项目中,开发者可能会结合使用这两种控制器类,以充分利用它们各自的优点。例如,`DispatchAction`可以用于处理特定的业务逻辑,而`RequestProcessor`则负责全局的请求处理和预处理工作。 总的来说,理解`...

    Struts之进阶篇.pdf

    本文主要聚焦于Struts框架中的几个关键概念:Map-backed ActionForm、Action类层次结构、标准桥式Action类(如DispatchAction)以及它们的工作原理。 ### Map-backed ActionForm #### 1. 概念介绍 从Struts 1.1...

    struts_dispacthaction_usermgr

    1. 定义Action的路径,将它映射到DispatchAction类。 2. 使用`parameter`属性指定用于选择方法的请求参数。 3. 对于每个处理方法,定义一个子Action,指定该方法的名称作为`action-class`的值,并设置`parameter`为...

    struts1.2实现计算器示例

    1. **Action类**:这是`DispatchAction`的子类,包含了多个处理不同计算操作的方法,如加法、减法、乘法和除法。每个方法处理特定的计算请求,然后将结果存储在`ActionForm`对象中,供视图层使用。 2. **ActionForm...

    Struts、Spring、Hibernate、SSH框架总结

    使用DispatchAction时,需要扩展DispatchAction类,并为每个业务操作定义特定的方法,这些方法将根据请求参数进行调用。 Spring是一个全面的后端应用框架,不仅支持MVC模式,还提供了依赖注入(DI)、面向切面编程...

Global site tag (gtag.js) - Google Analytics