简单实现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日

相关文章

  • 浅谈apache和nginx的rewrite的区别

    浅谈Apache和Nginx的Rewrite的区别 在Web服务器中,Apache和Nginx都是非常流行的选择,它们都提供了rewrite模块,用于重定向和重写URL。本文将探讨Apache和Nginx rewrite模块之间的区别,并且提供两个示例。 Apache Rewrite Apache是一个非常流行的Web服务器软件,它的rewrite模块使用A…

    Java 2023年6月15日
    00
  • Spring mvc Controller和RestFul原理解析

    下面是关于Spring MVC Controller和RestFul的原理解析,包含两个示例说明。 Spring MVC Controller和RestFul原理解析 Spring MVC是一个流行的Java Web框架,它可以帮助我们快速构建Web应用程序。在Spring MVC中,Controller是一个重要的组件,它用于处理请求并返回响应。在本文中,…

    Java 2023年5月17日
    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
  • javaweb实现在线支付功能

    针对“javaweb实现在线支付功能”的完整攻略,下面是一份详细的解释: 1. 概述 在 javaweb 中实现在线支付功能,需要借助第三方支付平台的支持。目前市面上有许多第三方支付平台可供选择,如支付宝、微信支付、银联支付等,本文以支付宝为例,介绍如何在 javaweb 中实现在线支付功能。 2. 前置条件 在开始之前,我们需要先获得支付宝的接口文档,并获…

    Java 2023年5月19日
    00
  • Java数组使用binarySearch()方法查找指定元素的实现

    Java数组提供了许多方法来操作数组,其中一个十分方便的方法是使用binarySearch()方法来查找指定元素在数组中的位置。本文将详细讲解如何使用binarySearch()方法来查找数组中的元素。 使用binarySearch()方法查找指定元素的声明 Java数组数提供了名为binarySearch()方法的内置方法,它可以协助开发人员在数组中查找特…

    Java 2023年5月26日
    00
  • Java语言实现简单的酒店前台管理小功能(实例代码)

    Java语言实现简单的酒店前台管理小功能(实例代码) 1.概述 本文将介绍如何使用Java语言实现简单的酒店前台管理小功能。本文使用的开发工具是Eclipse,Java版本是Java 8。 2.实现细节 2.1.功能需求 本文中实现的酒店前台管理小功能包含以下需求: 客户入住:记录客户姓名、身份证号、入住时间、退房时间、房间号等信息,并将信息保存到文件中。 …

    Java 2023年5月18日
    00
  • Java的基础语法学习笔记

    下面我将为大家详细介绍关于“Java的基础语法学习笔记”的完整攻略。 一、学习前准备 在学习Java基础语法之前,我们需要先掌握一些基本知识,包括: 编程基础:了解计算机的基础知识、掌握基本的编程逻辑和算法知识。 面向对象编程思想:掌握面向对象编程思想,包括封装、继承、多态等概念。 Java基础环境:安装配置好Java的基础环境,包括Java SE Deve…

    Java 2023年5月30日
    00
  • Spring如何使用PropertyPlaceholderConfigurer读取文件

    下面是“Spring如何使用PropertyPlaceholderConfigurer读取文件”的完整攻略: PropertyPlaceholderConfigurer简介 在Spring框架中,PropertyPlaceholderConfigurer是常用于读取属性文件(如.properties文件)并进行动态注入的类。我们可以通过该类来替换配置文件中的…

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