Struts2 控制文件上传下载功能实例代码

本文将详细讲解如何在 Struts2 Web 应用程序中实现文件上传下载功能,并配合两条示例代码进行演示。

1. 添加 Maven 依赖

在 pom.xml 文件中添加以下 Maven 依赖,用于支持文件上传下载功能。

<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.8.0</version>
</dependency>

2. 配置 Struts2 过滤器

在 web.xml 文件中添加 Struts2 过滤器,用于捕获文件上传下载请求。

<filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>

3. 实现文件上传功能

3.1 编写文件上传表单

在 JSP 页面中添加文件上传表单。

<form action="upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="上传文件" />
</form>

3.2 处理文件上传请求

在 Struts2 控制器中处理文件上传请求,并将上传的文件保存到服务器。

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 {
        String basePath = ServletActionContext.getServletContext().getRealPath("/upload");
        File file = new File(basePath, fileFileName);
        FileUtils.copyFile(this.file, file);
        return SUCCESS;
    }
}

该控制器中包含文件类型的属性 fileContentType 和文件名的属性 fileFileName,用于处理上传的文件。

3.3 配置上传文件大小限制

在 struts.xml 文件中添加以下配置,用于限制上传文件的大小。

<constant name="struts.multipart.maxSize" value="2097152" />

其中 2097152 表示上传文件最大为 2 MB。

4. 实现文件下载功能

4.1 处理文件下载请求

在 Struts2 控制器中处理文件下载请求,并将服务器上的文件发送至客户端。

public class FileDownloadAction extends ActionSupport {
    private String fileName;

    public String getFileName() {
        return fileName;
    }

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

    public InputStream getInputStream() throws Exception {
        String basePath = ServletActionContext.getServletContext().getRealPath("/upload");
        File file = new File(basePath, fileName);
        return new FileInputStream(file);
    }

    public String execute() throws Exception {
        return SUCCESS;
    }
}

该控制器包含文件名的属性 fileName 和输入流的方法 getInputStream,用于处理文件下载请求。

4.2 编写文件下载链接

在 JSP 页面中添加文件下载链接,点击链接可下载服务端的文件。

<s:a href="%{fileName}" download="%{fileName}">%{fileName}</s:a>

该链接使用 Struts2 的标签库 <s:a>,链接地址为文件名,且在下载文件时使用了 download 属性,设置下载时显示的文件名。

以上便是 Struts2 控制文件上传下载功能的完整攻略,下面将通过两个示例进一步说明控制器的具体用法。

示例1:文件上传

  1. 创建 JSP 页面 upload.jsp,并添加文件上传表单。
<form action="upload" method="post" enctype="multipart/form-data">
    <input type="file" name="file" />
    <input type="submit" value="上传文件" />
</form>
  1. 创建 Struts2 控制器 FileUploadAction,用于处理文件上传请求。
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 {
        String basePath = ServletActionContext.getServletContext().getRealPath("/upload");
        File file = new File(basePath, fileFileName);
        FileUtils.copyFile(this.file, file);
        return SUCCESS;
    }
}
  1. 在 struts.xml 文件中添加以下配置,用于将请求映射到控制器。
<package name="default" namespace="/" extends="struts-default">
    <action name="upload" class="com.example.FileUploadAction" method="execute">
        <result name="success">/success.jsp</result>
        <result name="input">/upload.jsp</result>
    </action>
</package>
  1. 在 web.xml 文件中添加 Struts2 过滤器,用于捕获文件上传请求。
<filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
  1. 启动应用程序,上传文件并查看文件是否成功保存到 /upload 目录下。

示例2:文件下载

  1. 创建 JSP 页面 download.jsp,并添加文件下载链接。
<s:a href="download?fileName=test.txt" download="test.txt">下载文件</s:a>

其中 fileName 参数为服务器上的文件名。

  1. 创建 Struts2 控制器 FileDownloadAction,用于处理文件下载请求。
public class FileDownloadAction extends ActionSupport {
    private String fileName;

    public String getFileName() {
        return fileName;
    }

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

    public InputStream getInputStream() throws Exception {
        String basePath = ServletActionContext.getServletContext().getRealPath("/upload");
        File file = new File(basePath, fileName);
        return new FileInputStream(file);
    }

    public String execute() throws Exception {
        return SUCCESS;
    }
}
  1. 在 struts.xml 文件中添加以下配置,用于将请求映射到控制器。
<package name="default" namespace="/" extends="struts-default">
    <action name="download" class="com.example.FileDownloadAction" method="execute">
        <result name="success" type="stream">
            <param name="contentType">application/octet-stream</param>
            <param name="contentDisposition">attachment;filename=${fileName}</param>
            <param name="bufferSize">1024</param>
        </result>
    </action>
</package>
  1. 在 web.xml 文件中添加 Struts2 过滤器,用于捕获文件下载请求。
<filter>
    <filter-name>struts2</filter-name>
    <filter-class>
        org.apache.struts2.dispatcher.filter.StrutsPrepareAndExecuteFilter
    </filter-class>
</filter>
<filter-mapping>
    <filter-name>struts2</filter-name>
    <url-pattern>/*</url-pattern>
</filter-mapping>
  1. 启动应用程序,点击链接下载文件并查看是否成功下载。

以上便是本文所讲述的 Struts2 控制文件上传下载功能的完整攻略和示例代码。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:Struts2 控制文件上传下载功能实例代码 - Python技术站

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

相关文章

  • hibernate4快速入门实例详解

    Hibernate4快速入门实例详解 Hibernate是一个基于Java语言的ORM(Object-Relational Mapping)框架,它可以把Java类和关系数据库中的表进行映射,从而可以通过面向对象的方式来操作数据库,使得数据库操作变得更简单、更高效。本文将详细讲解如何快速入门Hibernate4,并提供两个示例说明。 步骤一:环境搭建 在开始…

    Java 2023年6月15日
    00
  • java实现桌球小游戏

    下面开始详细讲解“Java实现桌球小游戏”的完整攻略。 1. 游戏规则 桌球小游戏是一种简单有趣的游戏,玩家需要通过控制球拍反弹球,让球进入对方的球门。本游戏的玩家分为两种,分别是左侧玩家和右侧玩家。玩家通过键盘操作控制自己的球拍,分别使用上下方向键控制球拍的运动方向。当其中一方的球进入对方的球门时,对应方即获得一分,游戏结束时,得分高的一方获胜。 2. 技…

    Java 2023年5月19日
    00
  • java之assert关键字用法案例详解

    Java之assert关键字用法案例详解 概述 本文将详细讲解Java中的assert关键字用法,并给出案例说明。 assert是Java语言的一个关键字,用于进行程序断言。assert关键字的作用是在开发和调试期间,为程序员提供了一个简单有效的集成测试方法,可以确保代码的正确性和程序的可靠性。 assert的语法格式 assert语法格式如下: asser…

    Java 2023年5月26日
    00
  • 剑指Offer之Java算法习题精讲链表与字符串及数组

    剑指Offer之Java算法习题精讲链表与字符串及数组 概述 这篇文章将介绍剑指Offer中Java算法习题中链表、字符串以及数组部分的完整攻略。涵盖了题目的基本概念、思路分析以及代码实现。通过学习这些算法题解,读者可以提高对数据结构和算法的理解以及编程能力。 链表 链表是一种基本的数据结构,是由一些列结点组成的,每个结点包含数据和指向下一个结点的指针。常见…

    Java 2023年5月19日
    00
  • Java线程池的简单使用方法实例教程

    下面我们先来介绍一下Java线程池的概念和作用。 Java线程池是为了解决频繁创建和销毁线程带来的性能开销问题而设计的。线程池会事先创建一定数量的线程,并维护一个任务队列,当有任务需要执行时,就将任务放入队列中。线程池中的线程会不断的从队列中取出任务并执行,执行完后将线程归还给线程池,这样就避免了反复创建和销毁线程的开销。 接下来,我们将介绍Java线程池的…

    Java 2023年5月19日
    00
  • Mybatis-Plus接口BaseMapper与Services使用详解

    关于“Mybatis-Plus接口BaseMapper与Services使用详解”的攻略,我来详细讲解一下。 一、前言 Mybatis-Plus是Mybatis的一个增强工具,可以帮助我们快速地开发数据库应用程序。Mybatis-Plus提供了BaseMapper和BaseService两个接口,可以非常方便地进行数据操作。接下来我将对这两个接口进行详细的讲…

    Java 2023年5月20日
    00
  • SpringMVC返回json数据的三种方式

    在 Spring MVC 中,我们可以使用三种方式来返回 JSON 数据。本文将详细讲解这三种方式,包括使用 @ResponseBody 注解、使用 ResponseEntity 类和使用 MappingJackson2JsonView 视图,并提供两个示例说明。 使用 @ResponseBody 注解 在 Spring MVC 中,我们可以使用 @Resp…

    Java 2023年5月18日
    00
  • Java中值传递的深度分析

    Java中值传递的深度分析 在Java中,参数传递有两种方式:值传递和引用传递。本文将主要讲解Java中的值传递,以及值传递的相关知识点。 值传递的定义 值传递,指的是当数据类型为基本数据类型的时候,方法调用时传递的是该基本数据类型的值的一份拷贝,而不是该变量所指向的地址。因此在函数内改变基本数据类型的值不会影响外部变量的值。 值传递的示例 以下是一个简单的…

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