web 服務器接收到客戶端的?http 請求
針對這個請求,分別創建一個代表請求的 HttpServletRequest 對象,代表響應的 HttpServletResponse 對象
獲取客戶端請求過來的參數:HttpServletRequest
給客戶端響應一些信息:HttpServletResponse
下載文件:
1.獲取下載文件的路徑
2.下載的文件名
3.讓瀏覽器支持下載
4.獲取下載文件的輸入流
5.創建緩沖區
6.獲取 OutputStream 對象
7.將 FileOutputStream 流寫入到 buffer 緩沖區
8.使用 OutputStream 將緩沖區中的數據輸出到客戶端
pom.xml 導入 jar 包
<dependency><groupId>javax.servlet</groupId><artifactId>javax.servlet-api</artifactId><version>4.0.1</version><scope>provided</scope></dependency><dependency><groupId>javax.servlet.jsp</groupId><artifactId>javax.servlet.jsp-api</artifactId><version>2.3.3</version><scope>provided</scope></dependency>
?getRealPath 絕對路徑,resources 放入需要下載的文件
substring 截取字符串
setHeader 文件頭信息
resp.setHeader("Content-disposition","attachment;filename"+fileName);
new FileInputStream 輸入流
new byte[1024]
getOutputStream 輸出流
讀數據、寫數據
關閉流
web.xml 注冊和映射:
<servlet><servlet-name>down</servlet-name><servlet-class>com.demo.response.FileDown</servlet-class></servlet><servlet-mapping><servlet-name>down</servlet-name><url-pattern>/down</url-pattern></servlet-mapping>
(如果重新創建了 Module,Smart Tomcat 也要添加一個自己創建的路徑)
代碼如下:
package com.demo.response;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.io.PrintWriter;public class FileDown extends HttpServlet {@Overrideprotected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {//1.獲取下載文件的路徑//getRealPath 絕對路徑String realPath = this.getServletContext().getRealPath("/1.png");//String realPath = "D:\\IntelliJProject\\javaweb\\response\\target\\classes\\com\\1.png";//2.下載的文件名//substring 截取字符串 /需要轉義,用\\,+1獲取下一個String fileName = realPath.substring(realPath.lastIndexOf("\\")+1);//3.讓瀏覽器支持下載//setHeader 文件頭信息,固定寫法resp.setHeader("Content-disposition","attachment;filename"+fileName);//URLEncoder.encode編碼支持中文//resp.setHeader("Content-disposition","attachment;filename"+ URLEncoder.encode(fileName,"UTF-8"));//4.獲取下載文件的輸入流FileInputStream fileInputStream = new FileInputStream(realPath);//5.創建緩沖區int len = 0;byte[] buffer = new byte[1024];//6.獲取 OutputStream 對象,輸出流ServletOutputStream outputStream = resp.getOutputStream();//7.將 FileOutputStream 流寫入到 buffer 緩沖區//8.使用 OutputStream 將緩沖區中的數據輸出到客戶端while ((len = fileInputStream.read(buffer))!=-1){ //>0也行outputStream.write(buffer,1,len); //從1到len長度}//IO流后開先關outputStream.close();fileInputStream.close();}@Overrideprotected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {doGet(req, resp);}
}