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日

相关文章

  • MybatisPlus自带的queryWrapper实现时间倒序方式

    下面我将为您详细讲解“MybatisPlus自带的queryWrapper实现时间倒序方式”的完整攻略,并提供两条示例。 MybatisPlus是一种强大的mybatis框架增强工具,它内置了一些实用的功能,比如一些查询条件构造器(queryWrapper、lambdaQueryWrapper等)。其中queryWrapper是一个强大实用的查询条件构造器,…

    Java 2023年5月20日
    00
  • Java数据结构之集合框架与常用算法详解

    Java数据结构之集合框架与常用算法详解 引言 Java数据结构是将数据元素以某种逻辑关系组织在一起的数据整体,而集合框架是java.util包下的一组接口和类,用于存储和操作一组相同类型的数据。 在本文中,我们将全面了解Java集合框架,包括常用的集合接口、集合实现类和常见的集合算法。同时,我们还将介绍在Java中如何使用集合框架。 集合框架概述 Java…

    Java 2023年5月19日
    00
  • 配置pom.xml用maven打包java工程的方法(推荐)

    这里是配置pom.xml用maven打包Java工程的方法的完整攻略: 1. 确认构建环境 在开始配置pom.xml之前,建议确认以下环境是否已安装: JDK(Java Development Kit) Maven 确认环境安装情况: 打开终端或命令行 输入命令java -version,确认能够输出Java的版本信息 输入命令mvn -version,确认…

    Java 2023年5月20日
    00
  • JVM类加载机制原理及用法解析

    JVM类加载机制原理及用法解析 Java虚拟机是Java语言实现”Write Once, Run Anywhere”程序设计理念的一个关键组成部分,而Java虚拟机中最重要的一个子系统就是类加载子系统。该子系统负责对字节码文件(.class文件)中的类进行加载、验证、准备、解析、初始化等操作,从而在程序的运行中实现类的动态加载和管理。那么,下面我们就来详细讲…

    Java 2023年6月15日
    00
  • java.sql.Date和java.util.Date的区别详解

    Java.sql.Date和Java.util.Date的区别详解 在 Java 编程中,日期和时间的处理是一个比较常见的操作,而 Java.sql.Date 和 Java.util.Date 也大量涉及于时间的处理。但这两个类的作用和用法有所不同,下面我们来详细讲解一下。 Java.util.Date Java.util.Date 是 Java 标准库中提…

    Java 2023年5月20日
    00
  • 使用数据库客户端工具Oracle SQL Developer加载第三方驱动连接mysql的方法

    使用Oracle SQL Developer加载第三方驱动连接MySQL的方法: 下载并安装MySQL Connector/J JDBC驱动程序 要使用MySQL数据库连接Oracle SQL Developer,请下载并安装MySQL Connector/J JDBC 驱动程序。 在Oracle SQL Developer中设置MySQL驱动程序 在Ora…

    Java 2023年6月16日
    00
  • finalize()方法的作用是什么?

    finalize()方法是Java Object类中的一个方法,用于回收被垃圾回收器标记为“可回收”的对象。当一个对象被垃圾回收器确定为“可回收”的时候,会在对象被清除之前调用finalize()方法。该方法的作用是释放对象占用的资源,比如关闭文件、释放外部资源等。 以下是示例说明: 使用finalize()方法释放文件资源 public class Fil…

    Java 2023年5月10日
    00
  • Java数组操作经典例题大总结

    Java数组操作经典例题大总结 一、前言 数组是Java中最基础也是使用最广泛的一种数据结构。数组的使用场景很多,例如经典的冒泡排序算法、求最大值和最小值、元素去重等等。本篇文章将详细讲解Java数组操作的经典例题,并提供代码实现。 二、数组操作 1. 求最大值和最小值 求一个数组中的最大值和最小值是一个非常基础的操作。Java中提供了Arrays类,它可以…

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