Struts2实现上传单个文件功能

yizhihongxing

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日

相关文章

  • java反射调用方法NoSuchMethodException的解决方案

    当使用Java反射调用方法时,如果使用错误的方法名或参数类型,或者方法不存在于该类或其父类中,就会出现NoSuchMethodException异常。在这种情况下,可以采取以下方法解决该异常: 确认方法名和参数类型是否正确 在使用反射调用方法之前,需要仔细检查方法名和参数类型是否正确,并确保它们与目标方法完全相同,包括包名、方法名和参数类型。例如,如下代码正…

    Java 2023年5月27日
    00
  • CentOS Linux系统搭建Android开发环境详细介绍

    CentOS Linux系统搭建Android开发环境 本文将介绍在CentOS Linux系统下搭建Android开发环境的详细攻略,包括以下内容: 安装Java开发环境 安装Android Studio 配置Android SDK环境变量 创建并启动虚拟机进行应用测试 1. 安装Java开发环境 首先,需要在CentOS系统中安装Java开发环境。 打开…

    Java 2023年5月26日
    00
  • Java中使用HttpRequest获取用户真实IP地址

    获取用户真实IP地址是Web开发中一个非常重要的问题,这篇文章将详细讲解在Java中使用HttpRequest获取用户真实IP地址的完整攻略。 什么是用户真实IP地址 用户真实IP地址指的是用户连接Internet时获得的IP地址,这个IP地址被称为公网IP地址,因为这个IP地址是在Internet上唯一的,并且可以标识这个用户所在位置的唯一标识。 如何获取…

    Java 2023年6月15日
    00
  • Java动态获取实现某个接口下所有的实现类对象集合

    要动态获取实现某个接口下所有的实现类对象集合,需要使用Java的反射机制。具体的流程如下: 获取实现某个接口的所有类的类名 可以使用Java的类加载器ClassLoader来获取所有实现类的类名,然后可以通过Class.forName方法获取类对象。在获取类名时,可以设置类加载器的范围,比如只限于当前应用程序的classpath下面,或者包括外部的类库。 L…

    Java 2023年5月26日
    00
  • java从输入流中获取数据并返回字节数组示例

    以下是详细的攻略: Java从输入流中获取数据并返回字节数组示例 一、问题背景 在Java编程中,我们常常需要从输入流中获取数据,然后进行处理。例如,我们可能需要从文件中读取数据,或者从网络套接字中读取数据。在这些场景下,获取的数据会以字节流的形式存在,我们需要将其转换成字节数组。 二、示例解析 示例一:从本地文件中读取数据 在这个示例中,我们将演示如何从本…

    Java 2023年5月26日
    00
  • 如何把springboot jar项目 改为war项目

    首先需要了解的是,Spring Boot默认创建的是JAR项目,JAR包是一种Java的打包格式,跟普通的ZIP包大同小异。而WAR包是Java Web的打包格式。 将Spring Boot jar项目转为war项目,主要需要以下步骤: 1. 修改pom.xml文件 在Spring Boot的Maven项目中,需要在pom.xml文件中添加Web依赖和打包方…

    Java 2023年5月28日
    00
  • 弱引用的作用是什么?

    弱引用(Weak Reference)是 Python 语言中的一个重要概念,它是一种特殊的对象引用,与常规引用(Strong Reference)不同,它不会阻止被引用的对象被垃圾回收器回收,主要用于解决循环引用的问题。下面是弱引用的使用攻略。 弱引用的作用 在 Python 中,一般情况下会使用强引用来引用一个对象,这会使得该对象的引用计数加 1。当强引…

    Java 2023年5月10日
    00
  • Java基础-Java基本数据类型

    Java基础-Java基本数据类型 Java中的数据类型分为两类: 基本数据类型和引用数据类型。基本数据类型共8种,分别是byte、short、int、long、float、double、boolean、char。本文将详细介绍Java的基本数据类型。 byte byte类型是最小的数据类型,占1个字节(byte),取值范围是-128到127。当我们需要存储…

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