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日

相关文章

  • Spring框架应用的权限控制系统详解

    Spring框架应用的权限控制系统详解 什么是权限控制系统? 权限控制系统,简称权限系统,是指在应用程序中对用户进行访问控制的管理系统,在系统中对用户的访问权限进行控制和管理,保证系统的安全性和稳定性。应用程序权限系统通常涉及到用户,角色、权限、资源等概念。其中,用户代表系统的使用者,角色代表用户所处的职位或地位,权限代表用户拥有的权限,资源代表在系统中需要…

    Java 2023年5月19日
    00
  • Java实现TFIDF算法代码分享

    Java实现TFIDF算法代码分享 简介 在信息检索领域中,TFIDF算法是一种用于评估一篇文章与一个查询词之间关系的常用算法。TF代表词频, IDF代表逆文本频率指数。TFIDF算法是根据一个word对于某个文档的重要程度来计算它在文档集合中重要程度的一种方法。 在本文中,我们将详细介绍如何使用Java编写代码实现TFIDF算法,并提供两个示例以帮助读者更…

    Java 2023年5月19日
    00
  • Spring Security过滤器链体系的实例详解

    Spring Security过滤器链体系的实例详解 什么是Spring Security过滤器链体系 Spring Security过滤器链体系是Spring Security的核心内容之一,它负责对用户请求进行安全过滤和授权校验。在Spring Security过滤器链体系中,每一个过滤器都有着不同的用途和功能,并且这些过滤器按一定的顺序组成一条链式结构…

    Java 2023年5月20日
    00
  • Java多态和实现接口的类的对象赋值给接口引用的方法(推荐)

    Java中的多态和接口是两个重要的概念,对于Java开发者来说必须要掌握其使用方法和相关规则。本次攻略将详细讲解Java多态和实现接口的类的对象赋值给接口引用的方法。 一、Java多态 Java多态是指同一个方法在不同的对象上会有不同的行为。它是面向对象编程中一种重要的概念,提高了程序的可扩展性和可维护性。 1.1 多态的实现方式 Java多态一般有两种实现…

    Java 2023年5月26日
    00
  • SpringBoot实现单文件与多文件上传功能

    下面是关于“SpringBoot实现单文件与多文件上传功能”的完整攻略: 1. 单文件上传功能实现 1.1. 添加依赖 首先,在pom.xml文件中添加如下依赖: <dependency> <groupId>org.springframework.boot</groupId> <artifactId>sprin…

    Java 2023年6月15日
    00
  • 深入了解SpringMVC初始化流程

    深入了解SpringMVC的初始化流程是了解SpringMVC框架的内部运作机制的关键。下面是完整的攻略: 1. SpringMVC框架的初始化 SpringMVC框架的初始化流程主要包含以下几个步骤: DispatcherServlet初始化:在容器启动时,Servlet容器会去加载web.xml配置文件中的DispatcherServlet,并初始化一个…

    Java 2023年5月16日
    00
  • Spring Boot 中密码加密的两种方法

    下面是关于Spring Boot中密码加密的两种方法的完整攻略。 1、使用BCryptPasswordEncoder 1.1 添加依赖 在pom.xml文件中添加如下依赖,用于使用BCryptPasswordEncoder加密密码: <dependency> <groupId>org.springframework.security&…

    Java 2023年5月20日
    00
  • Spring Boot 整合持久层之Spring Data JPA

    下面我将为你详细讲解“Spring Boot 整合持久层之Spring Data JPA”的完整攻略,并提供两个示例。 Spring Boot 整合持久层之Spring Data JPA 什么是Spring Data JPA? Spring Data JPA 是Spring框架提供的一种基于 JPA 规范的持久化框架,它通过简化持久层的开发,让开发人员更专注…

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