简单实现Servlet文件下载功能

实现 Servlet 文件下载功能,需要经历以下几个步骤:

  1. 在 Web 项目的 WEB-INF 目录下创建 servlet-context.xml 配置文件,添加一条 Bean 标签用于初始化 Servlet 。
<bean id="fileDownloadServlet" class="com.example.controller.FileDownloadServlet" init-method="init"/>
  1. 创建一个 Servlet ,用于处理下载请求,并在 init 方法中初始化 Servlet 的相关配置。在 Servlet 中,需要获取要下载的文件路径及文件名称,以及设置 HttpServletResponse 对象相关的响应头信息。
public class FileDownloadServlet extends HttpServlet {
    private String filePath;
    private String fileName;

    @Override
    public void init() throws ServletException {
        ServletContext servletContext = getServletContext();
        filePath = servletContext.getRealPath("/WEB-INF/download/");
        fileName = "test.txt";
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        request.setCharacterEncoding("UTF-8");

        File file = new File(filePath + fileName);
        if (file.exists()) {
            response.setContentType("application/octet-stream"); 
            response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
            ServletOutputStream outputStream = response.getOutputStream();
            InputStream in = new FileInputStream(file);
            byte[] buffer = new byte[1024];
            int len = 0;
            while ((len = in.read(buffer)) > 0) {
                outputStream.write(buffer, 0, len);
            }
            in.close();
        } else {
            response.getWriter().println("<h1>File not found.</h1>");
        }
    }
}
  1. 在 JSP 页面上添加一个超链接,用于向 Servlet 发送下载请求。例如:
<a href="downloadServlet">下载文件</a>
  1. 将下载文件放置在 Web 项目的 WEB-INF 目录下的 download 子目录中,例如:/WEB-INF/download/test.txt。

示例一:

我们在一个叫做 myspring 的 Java Web 项目中创建 ServletContext.xml 的配置文件,输入以下内容:

<?xml version="1.0" encoding="UTF-8"?>
<beans xmlns="http://www.springframework.org/schema/beans"
       xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
       xsi:schemaLocation="http://www.springframework.org/schema/beans http://www.springframework.org/schema/beans/spring-beans-3.0.xsd">

    <bean id="fileDownloadServlet" class="com.example.controller.FileDownloadServlet" init-method="init"/>

</beans>

在 com/example/controller/ 路径下,创建一个 Java 类 FileDownloadServlet。

public class FileDownloadServlet extends HttpServlet {
    private String filePath;
    private String fileName;

    @Override
    public void init() throws ServletException {
        ServletContext servletContext = getServletContext();
        filePath = servletContext.getRealPath("/WEB-INF/download/");
        fileName = "test.txt";
    }

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=utf-8");
        request.setCharacterEncoding("UTF-8");

        File file = new File(filePath + fileName);
        if (file.exists()) {
            response.setContentType("application/octet-stream"); 
            response.setHeader("Content-Disposition", "attachment; filename=" + fileName);
            ServletOutputStream outputStream = response.getOutputStream();
            InputStream in = new FileInputStream(file);
            byte[] buffer = new byte[1024];
            int len = 0;
            while ((len = in.read(buffer)) > 0) {
                outputStream.write(buffer, 0, len);
            }
            in.close();
        } else {
            response.getWriter().println("<h1>File not found.</h1>");
        }
    }
}

在 web.xml 中,添加以下内容,将 /download 路径映射到 FileDownloadServlet 中。

<servlet>
    <servlet-name>downloadServlet</servlet-name>
    <servlet-class>org.springframework.web.servlet.DispatcherServlet</servlet-class>
    <init-param>
        <param-name>contextConfigLocation</param-name>
        <param-value>classpath:META-INF/spring/servlet-context.xml</param-value>
    </init-param>
</servlet>
<servlet-mapping>
    <servlet-name>downloadServlet</servlet-name>
    <url-pattern>/download</url-pattern>
</servlet-mapping>

示例二:

我们在一个 Java Web 项目的 WebContent 文件夹下,新建一个路径为 WEB-INF/download/ 的文件夹,将要下载的文件放在该文件夹中,例如:文件名为 test.txt。

在 WebContent 文件夹下,新建文件 download.jsp 文件,输入以下内容:

<%@page contentType="text/html" pageEncoding="UTF-8"%>  
<!DOCTYPE html>  
<html>  
<head>  
    <meta charset="UTF-8">  
    <title>文件下载</title>  
</head>  
<body>  
    <h4><a href="./downloadServlet?fileName=test.txt">下载文件 test.txt</a></h4>  
</body>  
</html>

在 WebContent 下的 WEB-INF 文件夹下,创建 web.xml 文件,添加以下内容:

<servlet>   
    <servlet-name>download</servlet-name>   
    <servlet-class>com.example.controller.FileDownloadServlet</servlet-class>   
</servlet>   
<servlet-mapping>   
    <servlet-name>download</servlet-name>   
    <url-pattern>/downloadServlet</url-pattern>   
</servlet-mapping>

在 com/example/controller/ 路径下,创建一个 Java 类 FileDownloadServlet。

public class FileDownloadServlet extends HttpServlet {  
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {  
        //设置响应内容类型  
        response.setContentType("application/octet-stream");  

        String fileName = request.getParameter("fileName");  
        String filePath = request.getSession().getServletContext().getRealPath("/") + "download/" + fileName;  

        //设置响应头信息  
        response.setHeader("Content-Disposition", "attachment;fileName=\"" + fileName + "\"");  

        //读取要下载的文件,保存到文件输入流  
        FileInputStream inputStream = new FileInputStream(filePath);  

        //创建输出流  
        OutputStream outputStream = response.getOutputStream();  

        //创建缓冲区  
        byte[] buffer = new byte[1024];  
        int len = 0;  

        //循环将输入流中的内容读取到缓冲区当中  
        while ((len = inputStream.read(buffer)) > 0) {  
            //输出缓冲区的内容到浏览器,实现文件下载  
            outputStream.write(buffer, 0, len);  
        }  

        //关闭文件输入流和输出流  
        inputStream.close();  
        outputStream.close();  
    }  
} 

最后,在 Tomcat 中启动该 Web 项目,运行在本地端口,访问 download.jsp 页面即可下载 test.txt 文件。

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

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

相关文章

  • 详解使用Spring Data repository进行数据层的访问问题

    使用Spring Data Repository进行数据层的访问是一种非常高效、便捷的方式。在使用之前,我们需要先了解一些Spring Data Repository的基本概念和使用方法。 Spring Data Repository基本概念 Spring Data Repository本质上是一个通用的DAO(Data Access Object)接口,它…

    Java 2023年6月2日
    00
  • Java 批量文件压缩导出并下载到本地示例代码

    要实现 Java 批量文件压缩导出并下载到本地,需要完成以下步骤: 构建压缩文件流 将文件流写入输出流 设置 HTTP 响应头信息 导出压缩文件 可以使用 java.util.zip 包中的 ZipOutputStream 对文件进行压缩。 以下是一个示例代码,实现将多个文件打成一个压缩包,压缩包文件名为 example.zip ,然后将压缩包导出并下载到本…

    Java 2023年5月20日
    00
  • Java的Struts框架报错“InvalidCancelException”的原因与解决办法

    当使用Java的Struts框架时,可能会遇到“InvalidCancelException”错误。这个错误通常由以下原因之一起: 配置错误:如果配置文件中没有正确配置Cancel,则可能会出现此。在这种情况下,需要检查配置文件以解决此问题。 取消操作错误:如果取消操作不正确,则可能会出现此。在这种情况下,需要检查取消操作以解决此问题。 以下是两个实例: 1…

    Java 2023年5月5日
    00
  • java io文件操作删除文件或文件夹的7种方法

    请看下面的详细讲解: Java IO文件操作删除文件或文件夹的7种方法 在Java程序中,有时候需要删除文件或文件夹。Java IO提供了多种删除文件或文件夹的方法,下面将介绍其中的7种方法。 1. 使用File.delete()方法删除单个文件 我们可以使用File类的delete()方法删除单个文件。delete()方法返回一个bool值,表示删除操作是…

    Java 2023年5月26日
    00
  • 详谈hibernate,jpa与spring data jpa三者之间的关系

    详谈hibernate,jpa与spring data jpa三者之间的关系 什么是Hibernate? Hibernate是一个开源的ORM(Object Relational Mapping)框架,旨在通过映射Java对象和数据库表,将数据持久化到数据库中。Hibernate执行了许多数据库操作并自动处理所有底层细节,使得编写数据访问层的代码变得更简单。…

    Java 2023年6月3日
    00
  • Java正则表达式入门基础篇(新手必看)

    让我来为你详细讲解一下“Java正则表达式入门基础篇(新手必看)”这篇文章的完整攻略。 标题 首先,我们来看一下文章的标题:“Java正则表达式入门基础篇(新手必看)”。这个标题十分的清晰明了,表明了本文的主题和受众人群。接下来我们来一步一步的解析这篇文章的内容: 介绍 首先,文章介绍了正则表达式的定义,即一种用来匹配字符串的文本模式。同时也解释了正则表达式…

    Java 2023年5月27日
    00
  • JSP简单添加,查询功能代码

    下面我将为您详细讲解“JSP简单添加、查询功能代码”的攻略。 准备工作 首先,您需要准备好以下环境: JSP运行环境,如Tomcat MySQL数据库 创建数据库 我们先创建一个名为“test”的数据库,并创建一个名为“user”的表,表结构如下: CREATE TABLE `user` ( `id` int(11) NOT NULL AUTO_INCREM…

    Java 2023年6月15日
    00
  • Javaweb实现上传下载文件的多种方法

    Javaweb实现上传下载文件的多种方法攻略 在开发Javaweb应用时,文件的上传和下载是非常常见的需求。本文将介绍Javaweb实现上传下载文件的多种方法,并提供两个代码示例。 上传文件的几种方式 1. 使用Servlet API实现文件上传 使用Servlet API实现文件上传需要使用标准的 javax.servlet 库中配套的 HttpServl…

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