最近在學習java的servlet,網頁下載圖片、視頻、文檔都是經常使用的操作,現(xiàn)在通過一個例子來實現(xiàn)下載視頻。
軟件:eclipse
語言:java web
知識點:Servlet,響應頭,ServletContext
步驟
1、建立dynamic web工程,新建立的時候需要選擇2.5的版本(因為2.5的版本可以在新建的時候就自帶web.xml,3.0就沒有),我命名工程為“DownloadMovie”,并且在java Resource里面新建立了一個servlet,命名為“DownServlet”,并且在WebContent的下面新建index.html文件,并且新建download文件夾,里面放置需要的下載文件”travel.mp4“,文件的結構如下圖

2、在平常的下載中,經常是點擊關鍵字,然后就進行下載了,所以要用<a>標簽,在html中,我就在<body>標簽加了一句話

href中的網址就是點擊訪問的網址,“DownloadMovie”是工程的名字,/downServelt是對應DownServlet對應url,可以在web.xml設置,后面的“?filename=travel.mp4”就是傳遞了travel.mp4這個文件名到創(chuàng)建的DownServlet中的作用。
3、在DownServlet的代碼如下:
package com.fffff.download;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import java.io.OutputStream;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
網頁下載demo
***/
public class DownServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//拿到從html傳遞來的參數(shù)
String filename = request.getParameter("filename");
//從ServletContext的getMimeType方法得到里面命名為”travel.mp4“的文件類型
response.setContentType(this.getServletContext().getMimeType(filename));
//這句話的意思是,在點擊關鍵字的時候下載而不是預覽
response.setHeader("Content-Disposition", "attachment;filename="+filename);
//設置input輸入,得需要下載文件的輸入
String realPath = this.getServletContext().getRealPath("/download/"+filename);
InputStream in = new FileInputStream(realPath);
//獲得輸出流
ServletOutputStream? out = response.getOutputStream();
//讓文件傳出
int len=0;
? byte[] buffer =new byte[1024];
? while((len=in.read(buffer))>0) {
? out.write(buffer,0,len);
? }
? in.close();
}
public void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doGet(request, response);
}
}
4、整個實驗可能會出現(xiàn)404,那么就是web.xml沒有配置好,還可能會出現(xiàn)直接預覽了MP4文件而不是下載提示那么就是這句”response.setHeader("Content-Disposition", "attachment;filename="+filename);“有錯誤,在servlet學習中,覺得關鍵在于一些url地址要配置正確
如下為結果截圖


若有問題可以留言,互相勉勵,共同學習