Struts2实现上传单个文件功能

Struts2实现上传单个文件功能

1. 准备工作

在Struts2中实现文件上传功能,需要添加struts2-fileupload-plugin依赖包。可以在项目的pom.xml文件中加入以下代码:

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.5.22</version>
</dependency>
<dependency>
    <groupId>commons-fileupload</groupId>
    <artifactId>commons-fileupload</artifactId>
    <version>1.3.3</version>
</dependency>
<dependency>
    <groupId>commons-io</groupId>
    <artifactId>commons-io</artifactId>
    <version>2.5</version>
</dependency>

2. 配置struts.xml文件

在Struts2项目中,需要在struts.xml配置文件中添加action映射,定义对应的Action类。

<struts>

    <package name="default" namespace="/" extends="struts-default">

        <action name="fileUploadAction" class="com.example.FileUploadAction">
            <result name="success">success.jsp</result>
            <result name="input">index.jsp</result>
        </action>

    </package>

</struts>

命名空间为根目录/,Action类为FileUploadAction。

3. 编写Action类

编写一个Action类,用于处理上传文件的相关操作,以下是一个示例:

package com.example;

import java.io.File;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport {
    // 接收上传文件的参数
    private File file;
    private String fileContentType;
    private String fileFileName;

    public File getFile() {
        return file;
    }

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

    public String getFileContentType() {
        return fileContentType;
    }

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

    public String getFileFileName() {
        return fileFileName;
    }

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

    // 处理文件上传
    public String execute() throws Exception {
        // 获取当前Web应用的上传目录
        String uploadPath = ServletActionContext.getServletContext().getRealPath("/upload");
        // 将上传的文件复制到目标目录
        FileUtils.copyFile(file, new File(uploadPath, fileFileName));
        return SUCCESS;
    }

}

4. 编写上传页面

在Web应用中编写一个上传的页面文件,示例如下:

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Single File Upload</title>
</head>
<body>

<form action="fileUploadAction" method="post" enctype="multipart/form-data">
    <input type="file" name="file">
    <input type="submit" value="Upload">
</form>

</body>
</html>

在表单中创建一个文件输入框,在表单中添加一个enctype="multipart/form-data"属性。

5. 测试

运行Tomcat服务器,访问上传页面,随意选择一个文件上传,上传成功后会跳转到成功的页面。

示例一

上传文件,并在上传目录下展示所有上传文件的信息

  • struts.xml配置文件:
<struts>

    <package name="default" namespace="/" extends="struts-default">

        <action name="fileUploadAction" class="com.example.FileUploadAction">
            <result name="success">success.jsp</result>
            <result name="input">index.jsp</result>
        </action>

        <action name="showFilesAction" class="com.example.ShowFilesAction">
            <result name="success">list.jsp</result>
            <result name="input">list.jsp</result>
        </action>

    </package>

</struts>
  • FileUploadAction类:
package com.example;

import java.io.File;
import java.io.IOException;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport {
    private File file;
    private String fileContentType;
    private String fileFileName;

    public File getFile() {
        return file;
    }

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

    public String getFileContentType() {
        return fileContentType;
    }

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

    public String getFileFileName() {
        return fileFileName;
    }

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

    public String execute() {
        String uploadPath = ServletActionContext.getServletContext().getRealPath("/upload");
        try {
            FileUtils.copyFile(file, new File(uploadPath, fileFileName));
        } catch (IOException e) {
            e.printStackTrace();
        }
        return SUCCESS;
    }
}
  • ShowFilesAction类:
package com.example;

import java.io.File;
import java.util.ArrayList;
import java.util.List;

import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class ShowFilesAction extends ActionSupport {
    private List<File> fileList = new ArrayList<File>();

    public List<File> getFileList() {
        return fileList;
    }

    public void setFileList(List<File> fileList) {
        this.fileList = fileList;
    }

    public String execute() {
        String uploadPath = ServletActionContext.getServletContext().getRealPath("/upload");
        File uploadDir = new File(uploadPath);
        if (!uploadDir.exists()) {
            uploadDir.mkdirs();
        }

        File[] files = uploadDir.listFiles();
        for (File file : files) {
            fileList.add(file);
        }

        return SUCCESS;
    }
}
  • success.jsp文件:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Success</title>
</head>
<body>

<p>Upload Success</p>
<p><a href="showFilesAction.action">Show Files</a></p>

</body>
</html>
  • list.jsp文件:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>List</title>
</head>
<body>

<h1>File List</h1>

<ul>
    <s:iterator value="fileList">
        <li><s:property value="name"/></li>
    </s:iterator>
</ul>

</body>
</html>

其中,success.jsp为上传成功后显示的页面,提供了“查看文件”按钮。该按钮会跳转到ShowFilesAction类,该类读取上传目录中的所有文件,保存到一个fileList集合中,返回到list.jsp页面,展示出所有已上传的文件名。

示例二

上传文件后返回文件名及文件大小

  • FileUploadAction类:
package com.example;

import java.io.File;
import org.apache.commons.io.FileUtils;
import org.apache.struts2.ServletActionContext;

import com.opensymphony.xwork2.ActionSupport;

public class FileUploadAction extends ActionSupport {
    private File file;
    private String fileContentType;
    private String fileFileName;
    private long fileSize;

    public File getFile() {
        return file;
    }

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

    public String getFileContentType() {
        return fileContentType;
    }

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

    public String getFileFileName() {
        return fileFileName;
    }

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

    public long getFileSize() {
        return fileSize;
    }

    public void setFileSize(long fileSize) {
        this.fileSize = fileSize;
    }

    public String execute() throws Exception {
        String uploadPath = ServletActionContext.getServletContext().getRealPath("/upload");
        FileUtils.copyFile(file, new File(uploadPath, fileFileName));
        this.setFileSize(file.length());
        return SUCCESS;
    }

}
  • success.jsp文件:
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8">
    <title>Success</title>
</head>
<body>

<p>Upload Success</p>
<p>File Name: <s:property value="fileFileName"/></p>
<p>File Size: <s:property value="fileSize"/></p>

</body>
</html>

在此示例中,在FileUploadAction类中新加了一个fileSize属性,上传成功后返回该文件的大小。

以上就是使用Struts2实现上传单个文件功能的完整攻略。

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

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

相关文章

  • Spring框架的环境搭建和测试实现

    下面是 “Spring框架的环境搭建和测试实现” 的完整攻略: 环境搭建 1. 安装Java 首先,我们需要安装JDK(Java Development Kit)。请根据您的操作系统下载对应的JDK,在官方网站 https://www.oracle.com/java/technologies/downloads/ 上可获取到各版本的JDK安装包。 安装完成后…

    Java 2023年5月31日
    00
  • 详解Spring依赖注入的三种方式使用及优缺点

    以下是详解Spring依赖注入的三种方式使用及优缺点的完整攻略: 1. Spring依赖注入的三种方式 Spring提供了三种方式来实现依赖注入: 1.1 构造器注入 构造器注入是在对象创建的时候使用构造函数来进行注入。在XML配置文件中,我们可以使用标签对构造函数中需要的参数进行赋值。使用构造器注入的优点是在对象创建时就可以将所有的依赖注入,避免了后期在运…

    Java 2023年5月19日
    00
  • 详解netty中的frame解码器

    下面是详解netty中的frame解码器的攻略: 1. 前言 Netty是一款高性能、可扩展性强、可维护性好的Java 网络编程框架。其中,数据包的传输是网络编程中的重要环节。在数据包传输过程中,需要对数据包进行解码操作,将二进制流转化为对应的Java对象。 Netty中基于框架机制实现了多个解码器,其中frame解码器是Netty中比较常用的解码器之一。本…

    Java 2023年5月20日
    00
  • SpringBoot集成Mybatis并测试

    下面是SpringBoot集成Mybatis并测试的完整攻略: 环境准备 在开始之前,我们需要进行一些准备工作: JDK环境和Maven环境的安装 IntelliJ IDEA或Eclipse IDE的安装 数据库环境的配置以及需要连接的数据库 项目配置 创建项目 在IDE中创建一个SpringBoot项目,并添加所需依赖。pom.xml中需要添加如下依赖: …

    Java 2023年5月20日
    00
  • java二维数组基础知识详解

    Java二维数组基础知识详解 什么是Java二维数组? Java二维数组是一种特殊的数组类型,它是由多个一维数组组成的,通常用于表示矩阵和表格等情景。Java二维数组的每个元素都是一个数组,这个数组里面又包含了多个元素。 Java二维数组的定义与初始化 Java二维数组的定义格式为 数据类型[][] 数组名 = new 数据类型[行数][列数]。其中,行数和…

    Java 2023年5月26日
    00
  • 教你怎么用JSP统计网站访问人数

    下面我将详细讲解如何使用 JSP 统计网站访问人数的完整攻略。 1. 确定需求和实现方式 首先,我们需要确定我们统计访问人数的具体需求。一般来说,统计网站访问人数可以通过记录网站访问量或者记录独立访客数量来实现。 对于记录网站访问量,一般常用的方式是在网站的每个页面中嵌入一个计数器。当用户访问网站的时候,计数器会自动加一。而对于独立访客数量的记录,则需要在用…

    Java 2023年6月15日
    00
  • Java字符串定义及常用方法

    Java字符串定义及常用方法 字符串定义 Java字符串是一个对象,使用String类来创建和操作字符串。Java字符串的特点是不可改变性,即在创建字符串后,不能改变其值。 字符串创建 Java字符串可以通过字面量和构造函数来创建。 字面量方式 String str = "Java字符串"; 构造函数方式 String str2 = ne…

    Java 2023年5月26日
    00
  • 使用SpringBoot自定义starter详解

    使用SpringBoot自定义starter详解 在SpringBoot中,我们可以使用自定义starter来封装和共享常用的依赖和配置,以简化项目的开发和维护。以下是一个完整的使用SpringBoot自定义starter的攻略: 1. 确定需求和功能 在进行自定义starter之前,我们需要明确项目的需求和功能。在这个阶段,我们可以使用用户故事、用例图、流…

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