为什么直接就是Response的应用二呢?因为Response的应用一就是向浏览器输出消息,即
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
PrintWriter writer = resp.getWriter();
writer.println("Hello Servlet");
}
诸如此类。
那么我们长话短说,直接进入正题。
利用Response实现文件的下载大致有七个步骤,分别为:
1.获取文件的路径,获取文件的路径方法有很多种,下面只列举出了一种;
2.获取文件的名称;
3.设置浏览器的相关信息,最重要的就是要让浏览器支持下载;
4.获取文件的输入流;
5.创建缓冲区;
6.获取ServletOutputStream输出流;
7.利用输入流将文件写入缓冲区,再利用输出流发送给客户端。
话不多说直接上源码
1 package com.jms.servlet;
2
3 import java.io.FileInputStream;
4 import java.io.IOException;
5 import java.net.URLEncoder;
6
7 import javax.servlet.ServletException;
8 import javax.servlet.ServletOutputStream;
9 import javax.servlet.http.HttpServlet;
10 import javax.servlet.http.HttpServletRequest;
11 import javax.servlet.http.HttpServletResponse;
12
13 public class filedown extends HttpServlet{
14
15 @Override
16 protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
17 //1.获取文件路径
18 String filepath = this.getServletContext().getRealPath("/WEB-INF/classes/jms.png");
19 //2.获取文件的名称
20 //原理就是截取最后一个"/"后面的部分,“//”是进行了转义
21 String filename = filepath.substring(filepath.lastIndexOf("//") + 1);
22 filename = URLEncoder.encode(filename, "UTF-8");//对文件名进行编码,否则中文名可能出现乱码问题
23 System.out.print(filename);
24 //3.设置浏览器支持下载
25 resp.setHeader("Content-Disposition","attachment;filename="+filename);
26 //4.获取文件的输入流
27 FileInputStream fis =new FileInputStream(filepath);
28 //5.创建缓冲区
29 int len = 0;
30 byte buffer[] = new byte[1024];
31 //6.获取ServletOutputStream
32 ServletOutputStream sos = resp.getOutputStream();
33 //7.将输入流写入到缓冲区,再利用ServletOutputStream将数据发送给客户端
34 while((len=fis.read(buffer))!=-1){
35 sos.write(buffer, 0, len);
36 }
37 //不要忘记关闭流
38 fis.close();
39 sos.close();
40 }
41
42 @Override
43 protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
44 // TODO Auto-generated method stub
45 doGet(req, resp);
46 }
47
48
49 }
修改web.xml文件
<servlet>
<servlet-name>down</servlet-name>
<servlet-class>com.jms.servlet.filedown</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>down</servlet-name>
<url-pattern>/down</url-pattern>
</servlet-mapping>
测试

没有问题,文件成功下载。
(本文仅作个人学习记录用,如有纰漏,敬请指正)
原创文章,作者:wdmbts,如若转载,请注明出处:https://blog.ytso.com/tech/pnotes/276779.html