java Struts2框架下实现文件上传功能

实现文件上传功能在Web应用程序中非常常见。在Java Web应用程序中,常用的框架之一是Struts2框架。下面是实现文件上传功能的完整攻略。

步骤1:添加依赖

要在Struts2应用程序中实现文件上传功能,我们需要添加一些依赖项。具体来说,我们需要添加以下依赖项:

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.X.X</version>
</dependency>
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.4</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.7</version>
</dependency>

这些依赖项包括Struts2核心,Apache Commons FileUpload和Apache Commons IO库。

步骤2:编写表单页面

要上传文件,您需要在Web页面上提供一个表单,以便用户可以选择要上传的文件。下面是一个简单的表单示例:

<s:form action="upload" method="POST" enctype="multipart/form-data">
    <s:file name="file"/>
    <s:submit value="Upload"/>
</s:form>

表单具有enctype属性,它指定表单数据的编码类型。在文件上传的情况下,需要将enctype属性设置为multipart/form-data

步骤3:编写Struts2 Action

现在,我们需要定义一个Struts2 Action处理上传文件。下面是一个简单的上传Action,它使用org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper类:

public class UploadAction extends ActionSupport {

    private File file;
    private String fileFileName;
    private String fileContentType;

    public String execute() {
        try {
            String destPath = "C:/uploads/" + getFileFileName();
            FileUtils.copyFile(file, new File(destPath));
        } catch (IOException e) {
            e.printStackTrace();
            return ERROR;
        }
        return SUCCESS;
    }

    public void setFile(File file) {
        this.file = file;
    }

    public void setFileFileName(String fileName) {
        this.fileFileName = fileName;
    }

    public void setFileContentType(String contentType) {
        this.fileContentType = contentType;
    }

    public File getFile() {
        return file;
    }

    public String getFileFileName() {
        return fileFileName;
    }

    public String getFileContentType() {
        return fileContentType;
    }
}

这个Action有以下几个重要的属性:

  • file:表示上传的文件。
  • fileFileName:表示上传文件的文件名。
  • fileContentType:表示上传文件的内容类型。

execute()方法中,我们将上传的文件保存到磁盘上的指定位置。

注:在Struts2中支持多个文件上传,需要使用org.apache.struts2.dispatcher.multipart.MultiPartRequestWrapper类。由于篇幅限制,这里不再展开。

示例1:演示上传单个文件

下面是一个完整的演示上传单个文件的示例。假设上传文件的Action名称为UploadAction,页面的名称为upload.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>

<html>
<head>
    <title>File Upload Example</title>
</head>
<body>
    <s:form action="upload" method="POST" enctype="multipart/form-data">
        <s:file name="file"/>
        <s:submit value="Upload"/>
    </s:form>
</body>
</html>

下面是一个简单的UploadAction类,它将上传的文件保存到目标目录中。

public class UploadAction extends ActionSupport {

    private File file;
    private String fileFileName;
    private String fileContentType;

    public String execute() {
        try {
            String destPath = "C:/uploads/" + getFileFileName();
            FileUtils.copyFile(file, new File(destPath));
        } catch (IOException e) {
            e.printStackTrace();
            return ERROR;
        }
        return SUCCESS;
    }

    public void setFile(File file) {
        this.file = file;
    }

    public void setFileFileName(String fileName) {
        this.fileFileName = fileName;
    }

    public void setFileContentType(String contentType) {
        this.fileContentType = contentType;
    }

    public File getFile() {
        return file;
    }

    public String getFileFileName() {
        return fileFileName;
    }

    public String getFileContentType() {
        return fileContentType;
    }
}

示例2:演示同时上传多个文件

下面是一个完整的演示同时上传多个文件的示例。假设上传文件的Action名称为MultipleUploadAction,页面的名称为multipleUpload.jsp

<%@ taglib prefix="s" uri="/struts-tags" %>

<html>
<head>
    <title>Multiple File Upload Example</title>
</head>
<body>
    <s:form action="multipleUpload" method="POST" enctype="multipart/form-data">
        <s:file name="file1"/>
        <s:file name="file2"/>
        <s:submit value="Upload"/>
    </s:form>
</body>
</html>

下面是一个演示同时上传多个文件的MultipleUploadAction类。假设我们将上传的文件保存到目标目录中的uploads目录:

public class MultipleUploadAction extends ActionSupport {

    private Map<String, File> files = new HashMap<>();
    private Map<String, String> filesFileName = new HashMap<>();
    private Map<String, String> filesContentType = new HashMap<>();

    public String execute() {
        try {
            for (Map.Entry<String, File> entry : files.entrySet()) {
                String destPath = "C:/uploads/" + filesFileName.get(entry.getKey());
                FileUtils.copyFile(entry.getValue(), new File(destPath));
            }
        } catch (IOException e) {
            e.printStackTrace();
            return ERROR;
        }
        return SUCCESS;
    }

    public void setFiles(Map<String, File> files) {
        this.files = files;
    }

    public void setFilesFileName(Map<String, String> filesFileName) {
        this.filesFileName = filesFileName;
    }

    public void setFilesContentType(Map<String, String> filesContentType) {
        this.filesContentType = filesContentType;
    }

    public Map<String, File> getFiles() {
        return files;
    }

    public Map<String, String> getFilesFileName() {
        return filesFileName;
    }

    public Map<String, String> getFilesContentType() {
        return filesContentType;
    }
}

在此示例中,我们使用了三个Map类型的属性来表示上传的文件,文件名和内容类型。要上传多个文件,需要在表单页面中提供多个文件上传字段。当表单提交时,Struts2框架将在execute()方法中将多个文件的数据传递给MultipleUploadAction类。然后,我们可以使用每个文件的数据将上传的文件保存到磁盘上。

除了示例1和示例2,还有许多其他的上传文件示例可以实现。以上示例仅用于演示如何在Struts2 Web应用程序中实现文件上传功能。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java Struts2框架下实现文件上传功能 - Python技术站

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

相关文章

  • Mybatis逆工程jar包的修改和打包

    接下来我将为你详细讲解Mybatis逆工程Jar包的修改和打包的完整攻略。 准备 在开始修改和打包Mybatis逆工程Jar包之前,我们需要准备好如下内容: Mybatis逆工程Jar包:mybatis-generator-core-x.x.x.jar,可以从 MyBatis 官网下载。 用于修改和打包Jar包的 IDE,如 Eclipse 或 Intell…

    Java 2023年5月26日
    00
  • Java编程中10个最佳的异常处理技巧

    Java编程中10个最佳的异常处理技巧 在Java编程中,异常处理时至关重要的。正确的处理异常,可以避免程序崩溃、提高程序可靠性和可维护性。本文将介绍10个最佳的Java异常处理技巧。 1. 使用try-catch语句捕获异常 try-catch语句可以捕获异常,并对异常进行处理或记录。以下是示例代码: try { // 可能抛出异常的代码 } catch …

    Java 2023年5月27日
    00
  • Spring boot外部配置(配置中心化)详解

    Spring Boot 外部配置(配置中心化)详解 什么是 Spring Boot 外部配置? Spring Boot 提供了一种在不同环境下轻松配置应用程序的方法。我们可以将配置信息从代码中分离出来,采用外部化配置。该方法所需的参数可以存储在不同的位置中,如属性文件、YAML 文件、环境变量、数据库或远程配置服务器等,从而达到配置中心化的目的。这样做,可以…

    Java 2023年5月15日
    00
  • Java对象简单实用案例之计算器实现代码

    下面我将详细讲解“Java对象简单实用案例之计算器实现代码”的完整攻略。 简介 本案例旨在用Java面向对象的思想实现一个简单的计算器,实现计算加、减、乘、除四则运算。 实现步骤 定义一个Calculator类,用于计算加、减、乘、除四则运算,并定义四个方法add、subtract、multiply和divide,其中方法的参数为两个double类型的数值,…

    Java 2023年5月23日
    00
  • SpringBoot前后端分离实现个人博客系统

    下面是详细讲解“SpringBoot前后端分离实现个人博客系统”的完整攻略,包括两条示例。 前言 本文通过SpringBoot、Vue.js等技术实现了一个前后端分离的个人博客系统,并介绍了实现的详细过程和注意事项。 实现步骤 后端实现 使用SpringBoot初始化项目,并添加必要依赖。例如,我们需要在pom.xml中添加以下配置以引入SpringBoot…

    Java 2023年5月20日
    00
  • mybatis plus自动生成器解析(及遇到的坑)

    下面我会详细介绍一下如何使用 MyBatis-Plus 自动生成器,以及在使用过程中可能会遇到哪些坑。 一、MyBatis-Plus 自动生成器概述 MyBatis-Plus 自动生成器是一种通过模板自动生成代码的快速开发工具。它可以根据定义的实体类和模板,自动生成增删改查的 Dao 文件、实体类文件、服务接口文件以及部分控制器文件等。 二、如何使用 Myb…

    Java 2023年5月19日
    00
  • 通过实例了解如何在JavaWeb实现文件下载

    让我来为您详细讲解如何在JavaWeb实现文件下载的完整攻略。 通过实例了解如何在JavaWeb实现文件下载 在JavaWeb中实现文件下载有多种方式,下面我们就分别来介绍一下。 方式一:使用Servlet实现文件下载 实现步骤: 1.在web.xml中配置一个Servlet,用于处理文件下载请求 <servlet> <servlet-na…

    Java 2023年5月19日
    00
  • java中进制的转换,Byte与16进制的转换方法

    Java中可以通过一些方法来进行进制转换,其中包括Byte与16进制的转换方法。下面我们详细来讲解Java中进制的转换以及Byte与16进制的转换方法。 进制的转换 在Java中,我们可以通过四种进制(二进制,八进制,十进制,十六进制)之间进行相互转换。以下是简单介绍每种进制的标识符: 二进制:以0b或0B开头,例如0b1010表示10。 八进制:以0开头,…

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