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日

相关文章

  • java面试题2020抢先看(够全)

    Java面试题2020抢先看(够全)攻略 了解面试题来源和类型 在准备面试之前,需要了解面试题的来源和类型,以更好地制定复习计划。Java面试题2020抢先看(够全)中的题目类型包括Java基础、多线程、集合框架、JVM等。理解这些题目类型,制定相应的复习计划和重点笔记。 针对不同类型的题目做好准备 各类型面试题的准备方式也有所不同。下面以Java基础题为例…

    Java 2023年5月20日
    00
  • Spring Cloud Config 使用本地配置文件方式

    下面是关于Spring Cloud Config使用本地配置文件的攻略: 什么是Spring Cloud Config? Spring Cloud Config 是一个分布式配置服务,目的是为分布式系统中的基础设施和微服务应用提供一种集中化的外部配置支持。 使用本地配置文件方式 步骤一:创建本地配置文件 在本地文件系统的一个目录下创建一个配置文件,比如:ap…

    Java 2023年5月19日
    00
  • Springboot+SpringSecurity实现图片验证码登录的示例

    下面是“Springboot+SpringSecurity实现图片验证码登录的示例”的完整攻略: 1.准备工作 在开始之前,你需要先了解以下几个知识点: Spring Boot,是一种用于快速创建基于Spring框架的应用程序的方式。 Spring Security,是Spring提供的一个强大且灵活的身份验证和访问控制框架。 验证码,是一种防止机器人或恶意…

    Java 2023年5月20日
    00
  • Java String index out of range:100错误解决方案详解

    针对这个主题,我将分为以下几个部分进行讲解: 问题描述 问题原因 解决方案详解 示例说明 总结 1. 问题描述 在Java开发中,我们可能会遇到 “String index out of range” 错误,错误提示通常会包含一个数字,如:100。这类错误会导致程序无法正常运行,需要寻找解决方案来解决。 2. 问题原因 这个错误的产生原因通常是由于字符串中字…

    Java 2023年5月27日
    00
  • SpringMVC的源码解析

    SpringMVC的源码解析攻略 SpringMVC是Spring框架中一个重要的模块,具有在Web开发中的优秀表现,如显式的分层体系结构、松散耦合、组件重用、可配置性和可扩展性。通过对SpringMVC的源码进行深入学习,可以更好地理解SpringMVC框架的设计原理、底层实现和优化方法。 以下是SpringMVC源码解析的完整攻略。 1. SpringM…

    Java 2023年5月16日
    00
  • Maven Web项目使用Cargo插件实现自动化部署的详细步骤

    下面我将为你讲解 Maven Web 项目使用 Cargo 插件实现自动化部署的详细步骤,包含以下内容: 环境配置 Maven配置 Cargo插件配置 自动部署流程 示例说明 1. 环境配置 在使用 Cargo 插件进行自动部署前,需要先准备好以下环境: Tomcat服务器 Maven IDE开发工具 2. Maven 配置 在 Maven 的配置文件 po…

    Java 2023年6月2日
    00
  • java.lang.String和java.util.NClob互相转换方式

    在Java中,Java.lang.String类和Java.util.NClob类都是字符串类。但是,NClob是用于处理CLOB(字符大对象)的类,而String类则是用于处理字符串的类。如果需要将它们互相转换,需要进行一些特殊的步骤和技巧。下面是将Java.lang.String和Java.util.NClob类互相转换的完整攻略。 将String转换为…

    Java 2023年5月27日
    00
  • Java SpringBoot使用guava过滤器

    Java SpringBoot使用Guava过滤器攻略 在Java SpringBoot中使用Guava库来实现过滤器可以非常方便地对数据进行过滤和转换。以下是实现该功能的完整攻略: 第一步:添加Maven依赖 在pom.xml文件中添加以下依赖: <dependencies> <dependency> <groupId>…

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