Struts2中接收表单数据的三种驱动方式

Struts2中接收表单数据的三种驱动方式包括属性驱动、模型驱动和域驱动。下面我将详细讲解这三种方式的使用方法。

一、属性驱动

属性驱动是指表单数据通过setter方法注入到Action中对应的属性中,可通过以下步骤实现。

1.在Action中定义相应的属性以及对应的setter方法。

例如,在一个登录的Action中,我们需要接收用户名和密码,则可以定义如下两个属性:

public class LoginAction extends ActionSupport {
    private String username;
    private String password;
    //getter方法和setter方法
}

2.在表单中通过name属性将数据与Action中的属性进行映射。

例如,在登录页面中,我们可以这样写表单:

<form action="login" method="post">
    用户名:<input type="text" name="username"><br/>
    密码:<input type="password" name="password"><br/>
    <input type="submit" value="登录">
</form>

3.在Action中定义一个处理表单提交的方法。

例如,在我们的登录Action中,我们可以这样写处理表单提交的方法:

public String execute() {
    if ("admin".equals(username) && "123456".equals(password)) {
        return SUCCESS;
    } else {
        return ERROR;
    }
}

二、模型驱动

模型驱动是指表单数据注入到一个POJO实体中,再将该实体作为Action的属性,可通过以下步骤实现。

1.定义一个POJO类,用于保存表单数据。

例如,在一个用户注册的Action中,我们需要接收用户的账号、密码和邮箱,则可以定义如下一个User类:

public class User {
    private String username;
    private String password;
    private String email;
    //getter方法和setter方法
}

2.Action中定义一个POJO类的属性以及对应的setter方法。

例如,在我们的用户注册Action中,我们可以这样定义User属性:

public class RegistAction extends ActionSupport implements ModelDriven<User> {
    private User user = new User();
    //getter方法和setter方法
}

3.在表单中通过name属性将数据与Action中的POJO类属性进行映射。

例如,在注册页面中,我们可以这样写表单:

<form action="regist" method="post">
    用户名:<input type="text" name="user.username"><br/>
    密码:<input type="password" name="user.password"><br/>
    邮箱:<input type="text" name="user.email"><br/>
    <input type="submit" value="注册">
</form>

4.在Action中实现ModelDriven接口,并重写该接口的getModel()方法,将POJO对象返回即可。

例如,在我们的用户注册Action中,我们可以这样实现ModelDriven接口:

public User getModel() {
    return user;
}

5.在Action中定义一个处理表单提交的方法。

例如,在我们的用户注册Action中,我们可以这样写处理表单提交的方法:

public String execute() {
    //执行注册操作
    return SUCCESS;
}

三、域驱动

域驱动是指表单数据通过HttpServletRequest对象,可通过以下步骤实现。

1.在Action中首先定义一个HttpServletRequest对象以及对应的setter方法。

例如,在我们的文件上传Action中,我们可以这样定义HttpServletRequest属性:

public class UploadAction extends ActionSupport {
    private HttpServletRequest request;
    //getter方法和setter方法
}

2.在表单中通过enctype属性将form表单的编码类型设置成multipart/form-data,以便文件上传。

例如,在文件上传页面中,我们可以这样写表单:

<form action="upload" method="post" enctype="multipart/form-data">
    请选择需要上传的文件:<input type="file" name="file"><br/>
    <input type="submit" value="上传">
</form>

3.在Action中的处理表单提交的方法中通过HttpServletRequest对象获取表单数据。

例如,在我们的文件上传Action中,我们可以这样写处理表单提交的方法:

public String execute() {
    try {
        String savePath = request.getSession().getServletContext().getRealPath("/upload/");
        File file = new File(savePath);
        if (!file.exists()) {
            file.mkdir();
        }
        InputStream inputStream = new FileInputStream(upload);
        OutputStream outputStream = new FileOutputStream(savePath + "\\" + uploadFileName);
        byte[] buffer = new byte[1024];
        int len = 0;
        while ((len = inputStream.read(buffer)) > 0) {
            outputStream.write(buffer, 0, len);
        }
        inputStream.close();
        outputStream.close();
    } catch (Exception e) {
        e.printStackTrace();
    }
    return SUCCESS;
}

以上就是Struts2中接收表单数据的三种驱动方式的详细讲解。

示例一,属性驱动方式:

// Action
public class LoginAction extends ActionSupport {
    private String username;
    private String password;

    public void setUsername(String username) {
        this.username = username;
    }

    public void setPassword(String password) {
        this.password = password;
    }

    @Override
    public String execute() throws Exception {
        if ("admin".equals(username) && "123456".equals(password)) {
            return SUCCESS;
        } else {
            return ERROR;
        }
    }
}

// JSP
<form action="login.action" method="post">
  <label>username:</label>
  <input type="text" name="username"/><br/>
  <label>password:</label>
  <input type="password" name="password"/><br/><br/>
  <input type="submit" value="login"/>
</form>

示例二,模型驱动方式:

// POJO类,如下定义:
public class User {
    private String username;
    private String password;

    public String getUsername() {
        return username;
    }

    public void setUsername(String username) {
        this.username = username;
    }

    public String getPassword() {
        return password;
    }

    public void setPassword(String password) {
        this.password = password;
    }
}

// Action
public class UserAction extends ActionSupport implements ModelDriven<User> {
    private User user = new User();

    public void setUser(User user) {
        this.user = user;
    }

    // 获得模型驱动,该方法在ModelDriven接口中定义
    @Override
    public User getModel() {
        return user;
    }

    @Override
    public String execute() throws Exception {
        System.out.println(user.getUsername() + ',' + user.getPassword());
        return SUCCESS;
    }
}

// JSP
<form action="user_submit.action" method="post">
  <label>username:</label>
  <input type="text" name="user.username"/><br/>
  <label>password:</label>
  <input type="password" name="user.password"/><br/><br/>
  <input type="submit" value="Add User"/>
</form>

以上示例仅供参考,仅是三种驱动方式的简单示例,实际使用可以根据具体业务需求进行更改和拓展。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2中接收表单数据的三种驱动方式 - Python技术站

(0)
上一篇 2023年5月20日
下一篇 2023年5月20日

相关文章

  • Mybatis Plus 逆向工程介绍

    下面是完整攻略,首先我们来讲解一下Mybatis Plus 逆向工程的概念: 什么是Mybatis Plus逆向工程 Mybatis Plus是一个优秀的Mybatis增强工具,Mybatis Plus逆向工程是一种通过数据库表反向生成对应的Mybatis Plus实体、mapper、mapper.xml等代码文件的技术,可以在一定程度上减少程序员的手动开发…

    Java 2023年5月20日
    00
  • 详解SpringBoot中实现依赖注入功能

    下面是“详解SpringBoot中实现依赖注入功能”的完整攻略: 什么是依赖注入 依赖注入(Dependency Injection,简称DI)是一种设计模式,它指的是在运行时动态地将依赖关系注入到对象中,而不是在编码时静态地定义好。在Spring框架中,依赖注入被广泛使用,可以简化代码的编写和维护,提高代码的灵活性和可重用性。 SpringBoot中的依赖…

    Java 2023年5月15日
    00
  • javaSE基础如何通俗的理解javaBean是什么

    JavaSE作为Java语言的基础和通用部分,包含了大量的API和基础概念。其中,JavaBean是JavaSE中的一个重要概念,它作为JavaSE中的一个基础部分,也是JavaEE开发中常用的一种设计模式。下面我们来详细讲解如何通俗的理解JavaBean。 一、JavaBean的含义 JavaBean是一种Java语言编写的可重用组件。它通常用于表示一个实…

    Java 2023年5月20日
    00
  • springboot json时间格式化处理的方法

    下面是详细讲解“springboot json时间格式化处理的方法”的完整攻略。 1. 前言 在Spring Boot中,将Java对象序列化为JSON的过程中,经常会遇到日期格式化的问题。JSON默认使用ISO-8601格式表示日期,但可能并不是我们需要的格式,因此需要对日期格式进行定制化。本攻略将介绍两种常用的方式来进行Json时间格式化处理。 2. J…

    Java 2023年5月26日
    00
  • Java求质数的几种常用算法分析

    针对“Java求质数的几种常用算法分析”,我们可以从以下几个方面进行讲解: 算法分析 方法1:暴力枚举 方法2:素数筛法 方法1:暴力枚举 这种算法比较简单,直接从1到n枚举每一个数字,然后依次验证数字是否为质数。具体实现如下: public static boolean isPrime(int n) { if (n <= 1) { return fa…

    Java 2023年5月19日
    00
  • Maven发布Jar包中文乱码解决方法

    下面我来详细讲解“Maven发布Jar包中文乱码解决方法”的完整攻略。 问题描述 当我们使用Maven打包发布Jar包时,有时会出现中文乱码的现象。这种现象出现的原因是在打包过程中,Maven使用的编码和实际项目使用的编码不一致,导致编码转换错误。因此,我们需要对这种问题进行解决。 解决方法 我们可以通过在Maven的pom.xml配置文件中添加如下代码来解…

    Java 2023年5月20日
    00
  • 深入讲解Java的对象头与对象组成

    深入讲解Java的对象头与对象组成 在Java中,每个对象都有一个对象头,用来存储对象的元数据信息,同时Java对象也由对象头和实例数据两个部分组成。了解Java对象的组成可以帮助我们更好地理解Java的内存模型。 Java对象的组成 Java对象是由对象头和实例数据两个部分组成的。在64位JVM中,对象头占用16Byte,实例数据大小不定,但至少为8Byt…

    Java 2023年5月26日
    00
  • Java 数组详解及示例代码

    Java 数组详解及示例代码 什么是数组 数组(Array)是由相同类型的数据按照一定的顺序排列而成的集合,是Java程序设计中最基本的数据结构之一。 在Java中,数组可以看成是一种容器,可以存放多个同类型的数据。其中每个数据被称为元素(Element),而在数组中,每个元素可以通过一个编号(Index)进行唯一标识。 创建数组 在Java中,创建数组有两…

    Java 2023年5月23日
    00
合作推广
合作推广
分享本页
返回顶部