java中Struts2 的文件上传和下载示例

Java中Struts2提供了方便的文件上传和下载的功能。下面将详细讲解文件上传和下载的示例。

文件上传示例

文件上传需要使用Struts2中的文件上传拦截器。详细步骤如下:

第一步:引入依赖

在项目的pom.xml文件中添加以下依赖:

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

第二步:配置配置文件

在web.xml中添加过滤器:

<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>

添加struts.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <constant name="struts.multipart.maxSize" value="10485760" />
    <package name="default" extends="struts-default">
        <action name="upload" class="com.example.action.FileUploadAction">
            <result name="success">/success.jsp</result>
            <result name="input">/fileupload.jsp</result>
        </action>
    </package>
</struts>

配置文件中,struts.multipart.maxSize用于限制上传文件的大小。

第三步:编写Action

编写Action来处理上传文件:

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

    public File getFile() {
        return file;
    }
    public void setFile(File file) {
        this.file = file;
    }
    public String getFileFileName() {
        return fileFileName;
    }
    public void setFileFileName(String fileFileName) {
        this.fileFileName = fileFileName;
    }
    public String getFileContentType() {
        return fileContentType;
    }
    public void setFileContentType(String fileContentType) {
        this.fileContentType = fileContentType;
    }

    public String execute() throws Exception{
        // 保存上传文件逻辑处理
        return SUCCESS;
    }
}

第四步:编写JSP页面

编写JSP页面,用于上传文件:

<%@ taglib prefix="s" uri="/struts-tags" %>
<html>
<head>
    <title>Struts2文件上传示例</title>
</head>
<body>
    <s:form enctype="multipart/form-data" action="upload">
        <s:file name="file" label="请选择上传文件"></s:file><br/>
        <s:submit value="上传"></s:submit>
    </s:form>
</body>
</html>

第五步:运行示例

在浏览器中访问上传文件的JSP页面,选择一个文件,上传即可。

文件下载示例

文件下载需要在struts.xml中配置一个Action来进行文件下载。详细步骤如下:

第一步:引入依赖

在项目的pom.xml文件中添加以下依赖:

<dependency>
    <groupId>org.apache.struts</groupId>
    <artifactId>struts2-core</artifactId>
    <version>2.5.22</version>
</dependency>

第二步:配置配置文件

在web.xml中添加过滤器:

<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>

添加struts.xml文件:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE struts PUBLIC "-//Apache Software Foundation//DTD Struts Configuration 2.5//EN" "http://struts.apache.org/dtds/struts-2.5.dtd">
<struts>
    <package name="default" extends="struts-default">
        <action name="download" class="com.example.action.FileDownloadAction">
            <param name="filePath">/tmp/foo.txt</param>
            <result name="success" type="stream">
                <param name="contentType">application/octet-stream</param>
                <param name="inputName">fileInputStream</param>
                <param name="contentDisposition">attachment;filename="${fileName}"</param>
                <param name="bufferSize">1024</param>
            </result>
        </action>
    </package>
</struts>

第三步:编写Action

编写Action来进行文件下载:

public class FileDownloadAction extends ActionSupport {
    private InputStream fileInputStream;
    private String fileName;
    private String filePath;

    public InputStream getFileInputStream() {
        return fileInputStream;
    }
    public void setFileInputStream(InputStream fileInputStream) {
        this.fileInputStream = fileInputStream;
    }
    public String getFileName() {
        return fileName;
    }
    public void setFileName(String fileName) {
        this.fileName = fileName;
    }
    public String getFilePath() {
        return filePath;
    }
    public void setFilePath(String filePath) {
        this.filePath = filePath;
    }

    public String execute() throws Exception {
        fileName = new File(filePath).getName();
        fileInputStream = new FileInputStream(new File(filePath));
        return SUCCESS;
    }
}

第四步:运行示例

在浏览器中访问下载文件的Action链接,即可下载对应的文件。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:java中Struts2 的文件上传和下载示例 - Python技术站

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

相关文章

  • springMVC几种页面跳转方式小结

    SpringMVC几种页面跳转方式小结 在SpringMVC中,有多种方式可以实现页面跳转。本文将介绍其中的几种方式,并提供示例说明。 方式一:使用redirect 使用redirect可以实现页面的重定向。在控制器方法中,我们可以使用”redirect:”前缀来指定重定向的URL。下面是一个示例的控制器方法: @GetMapping("/redi…

    Java 2023年5月17日
    00
  • 如何优雅的抛出Spring Boot注解的异常详解

    当我们在使用Spring Boot开发应用时,由于各种原因,可能会出现一些异常情况。这时,我们需要通过抛出异常的方式来告知客户端或其他开发者应用程序的状态。但是,简单地抛出异常并不够友好,我们需要将异常信息封装在特定的异常类中,以便于错误追踪和维护。如何优雅地抛出Spring Boot注解的异常呢?下面是一个完整攻略。 1. 如何定义异常类 在Java程序中…

    Java 2023年5月27日
    00
  • 基于java中的PO VO DAO BO POJO(详解)

    “基于java中的PO VO DAO BO POJO(详解)” 这个话题是讲解Java中常用于开发的一些设计模式和编程技术。在下面的回答中,我会逐一介绍PO、VO、DAO、BO、POJO的概念和用法,并且会提供两个示例来展示这些技术的实际应用。 PO PO(Persistent Object)是指持久化对象,它对应数据库中的一张表中的一条记录。PO中的每个字…

    Java 2023年5月20日
    00
  • SpringBoot整合JWT框架,解决Token跨域验证问题

    SpringBoot整合JWT框架,解决Token跨域验证问题 在Web应用程序中,跨域请求是非常常见的。为了保护我们的Web应用程序,我们通常使用Token来进行身份验证和授权。在本文中,我们将详细讲解如何使用JWT框架来实现Token身份验证,并解决跨域请求的问题。 JWT简介 JWT(JSON Web Token)是一种开放标准(RFC 7519),它…

    Java 2023年5月18日
    00
  • Ajax二级联动菜单实现原理及代码

    一、Ajax二级联动菜单实现原理 Ajax二级联动菜单是通过Ajax技术来实现的。具体实现过程如下: 通过JavaScript监听第一级菜单的改变事件; 使用XMLHttpRequest对象向服务器发送异步请求,获取第二级菜单的数据; 解析服务器返回的数据,生成第二级菜单选项; 将第二级菜单选项插入到HTML页面中。 二、Ajax二级联动菜单代码示例 下面是…

    Java 2023年6月15日
    00
  • spring学习之@SessionAttributes实例解析

    Spring学习之@SessionAttributes实例解析 简介 在Spring中,@SessionAttributes注解用于将模型属性存储在HTTP会话中。Spring会话中的模型属性是Web应用程序中处理流程和视图渲染的重要组成部分。本文将介绍@SessionAttributes注解的使用方法,并提供两个示例说明。 @SessionAttribut…

    Java 2023年6月15日
    00
  • jsp简单自定义标签的forEach遍历及转义字符示例

    JSP(JavaServer Pages)是一种动态网页编程语言,旨在简化 HTML、Java Servlet 和 JavaBeans 之间的 web 应用程序的创建和维护。自定义标签是 JSP 中非常重要的一部分,可以用于扩展 JSP 功能以及将页面分离成多个组件实现模块化开发。 在 JSP 中,循环遍历是非常常见的需求,使用自定义标签实现循环遍历可以增加…

    Java 2023年6月15日
    00
  • Apache Log4j2 报核弹级漏洞快速修复方法

    下面是Apache Log4j2报核弹级漏洞快速修复方法的详细攻略: 概述 Apache Log4j2是一个广泛使用的Java日志框架,近日被爆出一个核弹级的漏洞CVE-2021-44228。攻击者在网络上可以通过构造Payload,远程执行任意代码,进行拦截、篡改和窃取敏感信息等攻击。此次漏洞严重性极高,Apache官方已经发布了修复方案,建议尽快进行修复…

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