前言:

经常在网上点开一个链接,就可以让你下载一个文件,比如jar,jdk等的文件。就通过response实现这种下载文件、

使用response下载文件_Java

实现步骤:

1.要获取下载文件的路径
2.下载的文件名是啥?
3.设置想办法让浏览器能够支持下载我们需要的东西
4.获取下载文件的输入流
5.创建缓冲区
6.获取OutputStream对象
7.将FileOutputStream流写入到buffer缓冲区
8.使用OutputStream将缓冲区中的数据输出到客户端!

代码:

在maven项目的resources下放一个图片,这样项目发布的时候,用户就可以点击链接下载对应的文件:

import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import java.io.FileInputStream;
import java.io.IOException;
import java.net.URL;
import java.net.URLEncoder;

public class Resopn下载文件 extends HttpServlet {
    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        //1、获取要下载文件的绝对路径
        String realPath = "F:\\Maven\\web-maven\\servlet-03\\target\\classes\\壁纸.png";
        System.out.println("下载的文件路径" + realPath);
        //2、下载的文件名是什么[截取文件绝对路径的最后一个\后面的字符//右键复制的路径【可以】F:\Maven\web-maven\servlet-03\target\classes\壁纸.png
        String fileName = realPath.substring(realPath.lastIndexOf("\\") + 1);
        //3、让浏览器能够支持我们下载的文件[如果文件名是中文就需要转码]
        response.setHeader("Content-Disposition", "attachment;filename=" + URLEncoder.encode(fileName, "UTF-8"));
        //4、获取下载文件的输入流
        FileInputStream fis = new FileInputStream(realPath);
        //5、创建缓冲区
        int len = 0;
        byte[] bytes = new byte[1024];
        //6、创建输出流
        ServletOutputStream sot = response.getOutputStream();
        //7、写出文件
        while ((len = fis.read(bytes)) != -1) {
            sot.write(bytes, 0, len);
            sot.flush();
        }
        //8、关闭流
        sot.close();
        fis.close();
    }
}

先码后看,这里没有什么难理解的,就是第三步是比较生疏的,要用的话就上网查询一下就好了。

 拓展:

1、点击一个链接,或者是超链接,或者是表单,就可以下载资源就很好。

所以我们新增一个JSP页面,让用户点击这个页面上面的按钮,进行下载文件:

使用response下载文件_Servlet_02

 

 

2、EL, Expression Language,表达式语言,是一种在JSP页面中获取数据的简单方式。EL表达式是从JSP2.0版本开始才引入的概念。EL表达式的基本语法形式很简单:在JSP页面的任何静态部分均可通过${变量}的形式获取到指定表达式的值。

3、解释一下${pageContext.request.contextPath}取出部署的应用程序名或者是当前的项目名称

使用response下载文件_Servlet_03

 

 

 

4、注意:如果EL表达式没有提示的话,就在Maven项目中的pro.xml文件中添加:

 

1
2

3

4

5

6

<dependency>

      <groupId>javax.servlet</groupId>

      <artifactId>jsp-api</artifactId>

      <version>2.0</version>

      <scope>provided</scope>

</dependency>