层层递进Struts1(七)详解DispatchAction

通过前面几篇博客,不知道大家有没有发现这个问题,虽然现在可以灵活控制跳转了,但是Action的数量 还是比较多,如何既能保证跳转灵活,还能减少Action的数量?这就是我们这篇博客所说的DispatchAction, 如其名,可以理解为“分发式Action”,使用它可以避免为每个Action创建一个类。

我们先来看一下 实例。

UserAction

DispatchAction继承的是Action,它的特点就是把以前的多个Action合并为 一个,当多个Action关联较大时,可以像这样放在一起,减少Action类的同时,也降低了维护的难度。

package com.tgb.drp.web.actions;  

import java.util.Date;
import java.util.List;  

import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;  

import org.apache.commons.beanutils.BeanUtils;
import org.apache.struts.action.ActionForm;
import org.apache.struts.action.ActionForward;
import org.apache.struts.action.ActionMapping;
import org.apache.struts.actions.DispatchAction;  

import com.tgb.drp.manager.UserManager;
import com.tgb.drp.model.User;
import com.tgb.drp.web.forms.UserActionForm;  

public class UserAction extends DispatchAction {  

    @Override
    protected ActionForward unspecified(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        //调用业务逻辑操作
        List userList = UserManager.getInstance().findAllUserList();
        request.setAttribute("userlist", userList);  

        return mapping.findForward("list_success");
    }  

    /**
     * 用户删除
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ActionForward del(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        //获取从页面表单中提交过来的值
        UserActionForm uaf = (UserActionForm)form;  

        //取得需要删除的userId的集合
        String[] userIdList = uaf.getSelectFlag();  

        //调用业务逻辑操作
        UserManager.getInstance().deleteUsers(userIdList);
        return mapping.findForward("del_success");
    }  

    /**
     * 用户添加
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ActionForward add(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {  

        //获取从页面表单中提交过来的值
        UserActionForm uaf = (UserActionForm)form;
        User user = new User();
        BeanUtils.copyProperties(user, uaf);
        user.setCreateDate(new Date());  

        //调用业务逻辑操作
        UserManager.getInstance().addUser(user);
        return mapping.findForward("add_success");  }  

    /**
     * 修改用户
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ActionForward modify(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        //获取从页面表单中提交过来的值
        UserActionForm uaf = (UserActionForm)form;
        User user = new User();
        BeanUtils.copyProperties(user, uaf);  

        //调用业务逻辑操作
        UserManager.getInstance().modifyUser(user);
        return mapping.findForward("modify_success");
    }  

    /**
     * 根据ID查询用户
     *
     * @param mapping
     * @param form
     * @param request
     * @param response
     * @return
     * @throws Exception
     */
    public ActionForward find(ActionMapping mapping, ActionForm form,
            HttpServletRequest request, HttpServletResponse response)
            throws Exception {
        //获取从页面表单中提交过来的值
        UserActionForm uaf = (UserActionForm)form;  

        String userId = uaf.getUserId();  

        //调用业务逻辑操作
        User user = UserManager.getInstance().findUserById(userId);  

        //将user对象从Action传递到JSP页面
        request.setAttribute("user", user);  

        return mapping.findForward("find_success");
    }  

}

以上是小编为您精心准备的的内容,在的博客、问答、公众号、人物、课程等栏目也有的相关内容,欢迎继续使用右上角搜索按钮进行搜索exception
, struts1
, request
, response
, import
, form action
, dispatchaction
, mapping
, param
, com exception
Request.Param
初中层层递进语文答案、层层递进、层层递进初中历史答案、形容层层递进的成语、层层递进 英文,以便于您获取更多的相关知识。

时间: 2024-10-04 09:38:56

层层递进Struts1(七)详解DispatchAction的相关文章

层层递进Struts1(六)自定义转换器

Struts提供的类型转换有限,如果我们强行使用没有的类型转换,则会出现错误,以Date类型为例: org.apache.catalina.core.StandardWrapperValve invoke 严重: Servlet.service() for servlet action threw exception java.lang.IllegalArgumentException: Cannot invoke com.tgb.struts1.TypeCovertActionForm.set

层层递进Struts1(五)之处理流程

这篇博客我们深入Struts框架执行部分源码,从ActionServlet的process函数开始,看一下其内在的执行 过程. 流程图 以下流程图展示的是ActionServlet和RequestProcessor两个类用到的函数,如RequestProcessor调用的 其它类的函数不再说明. 函数说明 我们选择几个重要的函数说明,其它函数则简单说明一下即可. ActionServlet process /** * <p>Perform the standard request proces

层层递进Struts1(四)之预加载ActionServlet

Struts的执行相当于分为两个阶段,预加载阶段和执行阶段,预加载阶段是指在Tomcat启动之时就开始执 行的内容,而此时我们并未真正进入跳转逻辑,这篇博客我们来分析一下预加载阶段. 配置文件 还记得web.xml中关于Struts的Servlet是如何配置的吗? <servlet- name>action</servlet-name> <servlet-class>org.apache.struts.action.ActionServlet</servlet-c

层层递进Struts1(三)之Struts组成

这篇博客我们来说一下Struts的主要组成我们,通过前几篇博客,我们知道这个框架最重要的几个步骤: 获取路径.封装表单.获取转向列表.转向逻辑处理.转向,与此对应的是:ActionServlet.ActionForm. ActionMapping.Action.ActionForward. ActionServlet 这个在上篇博客已经说明,可以访 问< 预加载ActionServlet>. ActionForm ActionForm的主要作用是对表单数据进行封装,这 个.NET开发中的实体类

层层递进Struts1(二)之Struts1简介及登录实例

上篇博客由Servlet的几个版本的例子,引出在页面跳转控制方面要解决的问题,在文章最后提到了 Struts1,这篇文章目的是解释一下什么是Struts1,及如何使用的问题. 什么是Struts1 说一 下我的理解:它符合MVC思想,使用Java二次开发封装的一个框架,主要简化.解决页面请求分发.跳转的问 题.Stuts1的优点是使用了丰富的配置文件使得灵活性大大提高:因为已经封装成框架,使得缩短了开发时间 .提高了开发效率,同时适量使用抽象,使得代码冗余减低.文件冗余减少,维护更加简单. St

层层递进Struts1(一)之由Servlet引入Struts

在说Struts1之前,我们先来使用Servlet编写一个程序从而了解Struts产生原因和用途:一个简单的增删 改查,我们来看一下使用Servlet是如何实现的,为了形象说明,我们从最基本的开始写,然后逐步递进. 第一版 这一版我们使用最常规的做法,增删改查每个功能都使用自己的Servlet,内容如下: 文件树 index.jsp <form action="servlet/AddUserServlet" method="post"> 姓名:<i

层层递进Struts1(八)之总结

先来看一下Struts1学习总结的思维导图,画的主要是Struts1中的重点和博客分布,如下所示: 系列博客的侧重点是: Struts1是什么? 为什么要使用它? 如何使用Struts1? Struts1源码分析 ? 总结 学完后综合看来,所谓的Struts1框架,实际是利用java已存在的函数二次封装所得,它侧重于解 决MVC中V和部分C的控制问题,较多使用配置文件,很大程度上减少了文件个数和代码重复,使得开发和维护 相对于不使用框架而言要简单的多.当然因为它只是封装和重组Java函数,如果你

详解在Java的Struts2框架中配置Action的方法_java

在Struts2中Action部分,也就是Controller层采用了低侵入的方式.为什么这么说?这是因为在Struts2中action类并不需要继承任何的基类,或实现任何的接口,更没有与Servlet的API直接耦合.它通常更像一个普通的POJO(通常应该包含一个无参数的execute方法),而且可以在内容定义一系列的方法(无参方法),并可以通过配置的方式,把每一个方法都当作一个独立的action来使用,从而实现代码复用. 例如: package example; public class U

Masonry自动布局详解七:ScrollView循环布局

Masonry自动布局详解七:ScrollView循环布局 说到iOS自动布局,有很多的解决办法.有的人使用xib/storyboard自动布局,也有人使用frame来适配.对于前者,笔者并不喜欢,也不支持.对于后者,更是麻烦,到处计算高度.宽度等,千万大量代码的冗余,对维护和开发的效率都很低. 笔者在这里介绍纯代码自动布局的第三方库:Masonry.这个库使用率相当高,在全世界都有大量的开发者在使用,其star数量也是相当高的. 支持原创,请阅读原文 效果图 本节详解Masonry的循环创建视