一、獲取 ServletContext 對象
ServletContext 對象代表整個 web 應用,可以和程序的容器進行通信,即和服務器通信,用來交互數據,獲取 ServletContext 對象有兩種方法:
1、通過 request 對象獲取
- request.getServletContext();
2、通過 HttpServlet 獲取
- this.getServletContext();
//獲取 ServletContext 對象的兩種方法
ServletContext SC1 = request.getServletContext();
ServletContext SC2 = this.getServletContext();
二、ServletContext 功能
1、獲取 MIME類型
- MIME 類型:在互聯網通信過程中定義的一種文件數據類型
- 格式:大類型/小類型 eg:text/html image/jpeg
- 獲取方法:String getMimeType(String file)
//獲取MIME類型
ServletContext SC1 = request.getServletContext();
String name = "a.jpg";
String mime = SC1.getMimeType(name);
System.out.println(mime);
2、域對象:共享數據
- setAttribute(String name,Object value):獲取值
- getAttribute(String name):通過名稱獲取值
- removeAttribute(String name):通過名稱移除值
ServletContext 對象範圍:所有用戶請求的數據
3、獲取文件的真實路徑
在開發過程中,會有配置資源文件需要加載,而配置資源文件所放的位置會有不同,這時就需要獲取文件的真實路徑
- 方法:String getRealPath(s),對於參數 s 的要求(以 a.txt 爲例):
- 配置文件放在 web 目錄下:"/a.txt"
- 配置文件放在 WEB-INF 目錄下:"/WEB-INF/a.txt"
- 配置文件放在 src 目錄下:"/WEB-INF/classes/a.txt"
三、實現文件下載
步驟:
- 定義html頁面,編輯超鏈接 href 屬性,指向 Servlet,傳遞資源名稱 filename
- 定義 Servlet
- 獲取文件名稱
- 使用字節輸入流加載文件進內存
- 指定 response 的響應頭
- 將數據寫到 response 輸出流
Java文件:
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
//獲取請求參數(文件名稱)
String filename = request.getParameter("filename");
//使用字節輸入流加載進內存
//找到文件服務器路徑
ServletContext SC = this.getServletContext();
String realPath = SC.getRealPath("/pic/" + filename);
//用字節流關聯
FileInputStream FIS = new FileInputStream(realPath);
//設置response相應頭
String name = SC.getMimeType(filename);
//設置響應頭類型
response.setHeader("content-type",name);
//設置響應頭的打開方式
response.setHeader("content-disposition","attachment;filename=" + filename);
//將輸入流的數據寫到輸出流中
ServletOutputStream SOS = response.getOutputStream();
byte[] buf = new byte[1024 * 4];
int lenth;
while ((lenth = FIS.read(buf)) != -1){
SOS.write(buf,0,lenth);
}
FIS.close();
}
HTML文件:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<title>Download</title>
</head>
<body>
<a href="/servletContext?filename=1.jpeg" >圖片</a>
</body>
</html>