日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

Request和Response-学习笔记05【ServletContext对象、文件下载】

發布時間:2024/9/30 编程问答 31 豆豆
生活随笔 收集整理的這篇文章主要介紹了 Request和Response-学习笔记05【ServletContext对象、文件下载】 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
  • Java后端 學習路線 筆記匯總表【黑馬程序員】
  • Request和Response-學習筆記01【Request_原理和繼承體系、Request_獲取請求數據】【day01】
  • Request和Response-學習筆記02【請求轉發和request共享數據、Request_獲取ServletContext、request登錄案例】[day01]
  • Request和Response-學習筆記03【HTTP響應協議、response之重定向、response之相對路徑和絕對路徑】【day02】
  • Request和Response-學習筆記04【response之輸出數據、response之驗證碼】【day02】
  • Request和Response-學習筆記05【ServletContext對象、文件下載】【day02】
  • 目錄

    11 ServletContext對象

    ServletContext_概述

    ServletContext_獲取

    ServletContext_功能_獲取MIME

    ServletContext_功能_域對象

    ServletContext_功能_獲取文件

    12 文件下載

    案例_文件下載_分析

    案例_文件下載_代碼實現

    download.html

    DownloadServlet.java

    案例_文件下載_中文 文件名 問題

    DownLoadUtils.java


    11 ServletContext對象

    ServletContext_概述

    ServletContext對象
    1. 概念:代表整個web應用,可以和程序的容器(服務器)來通信。
    2. 獲取
    3. 功能:
    ?? ?1. 獲取MIME類型
    ?? ?2. 域對象:共享數據。
    ?? ?3. 獲取文件的真實(服務器)路徑

    ServletContext_獲取

    ServletContext對象
    1. 概念:代表整個web應用,可以和程序的容器(服務器)來通信。
    2. 獲取:
    ?? ?1. 通過request對象獲取
    ?? ??? ?request.getServletContext();
    ?? ?2. 通過HttpServlet獲取
    ?? ??? ?this.getServletContext();
    3. 功能

    ??

    package cn.itcast.web.servletcontext;import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.IOException;@WebServlet("/servletContextDemo1") public class ServletContextDemo1 extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {/*ServletContext對象獲取:1. 通過request對象獲取request.getServletContext();2. 通過HttpServlet獲取this.getServletContext();*///1. 通過request對象獲取ServletContext context1 = request.getServletContext();//2. 通過HttpServlet獲取ServletContext context2 = this.getServletContext();System.out.println(context1);System.out.println(context2);System.out.println(context1 == context2);//true}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);} }

    ServletContext_功能_獲取MIME

    ServletContext對象
    1. 概念:代表整個web應用,可以和程序的容器(服務器)來通信。
    2. 獲取
    3. 功能:
    ?? ?1. 獲取MIME類型:
    ?? ??? ?* MIME類型:在互聯網通信過程中定義的一種文件數據類型。
    ?? ??? ??? ?* 格式:大類型/小類型,text/html、image/jpeg
    ?? ??? ?* 獲取:String getMimeType(String file)
    ?? ?2. 域對象:共享數據。
    ?? ?3. 獲取文件的真實(服務器)路徑

    ??

    ServletContext_功能_域對象

    ServletContext對象
    1. 概念:代表整個web應用,可以和程序的容器(服務器)來通信。
    2. 獲取
    3. 功能:
    ?? ?1. 獲取MIME類型
    ?? ?2. 域對象:共享數據。
    ?? ??? ?1. setAttribute(String name,Object value)
    ?? ??? ?2. getAttribute(String name)
    ?? ??? ?3. removeAttribute(String name)
    ?? ??? ?* ServletContext對象范圍:所有用戶、所有請求的數據。
    ?? ?3. 獲取文件的真實(服務器)路徑

    ServletContext_功能_獲取文件

    ServletContext對象
    1. 概念:代表整個web應用,可以和程序的容器(服務器)來通信。
    2. 獲取
    3. 功能:
    ?? ?1. 獲取MIME類型
    ?? ?2. 域對象:共享數據。
    ?? ?3. 獲取文件的真實(服務器)路徑
    ?? ??? ?1. 方法:String getRealPath(String path) ?
    ?? ??? ??? ?String b = context.getRealPath("/b.txt");//web目錄下資源訪問
    ?? ? ? ? ? ?System.out.println(b);
    ?? ? ? ? ? ?String c = context.getRealPath("/WEB-INF/c.txt");//WEB-INF目錄下的資源訪問
    ?? ? ? ? ? ?System.out.println(c);
    ?? ? ? ? ? ?String a = context.getRealPath("/WEB-INF/classes/a.txt");//src目錄下的資源訪問
    ?? ? ? ? ? ?System.out.println(a);

    ??

    12 文件下載

    案例_文件下載_分析

    * 文件下載需求:

  • 頁面顯示超鏈接
  • 點擊超鏈接后彈出下載提示框
  • 完成圖片文件下載
  • * 分析:

  • 超鏈接指向的資源如果能夠被瀏覽器解析,則在瀏覽器中展示;如果不能解析,則彈出下載提示框。
  • 任何資源都必須彈出下載提示框。
  • 使用響應頭設置資源的打開方式:content-disposition:attachment;filename=xxx
  • * 步驟:

  • 定義頁面,編輯超鏈接href屬性,指向Servlet,傳遞資源名稱filename。
  • 定義Servlet
  • 獲取文件名稱
  • 使用字節輸入流加載文件進內存
  • 指定response的響應頭:content-disposition:attachment;filename=xxx
  • 將數據寫出到response輸出流
  • 案例_文件下載_代碼實現

    download.html

    <!DOCTYPE html> <html lang="en"> <head><meta charset="UTF-8"><title>文件下載</title> </head> <body><a href="/day15/img/1.jpg">圖片1</a><a href="/day15/img/1.avi">視頻</a><hr><a href="/day15/downloadServlet?filename=九尾.jpg">圖片1</a><a href="/day15/downloadServlet?filename=1.avi">視頻</a> </body> </html>

    DownloadServlet.java

    package cn.itcast.web.download;import cn.itcast.web.utils.DownLoadUtils;import javax.servlet.ServletContext; import javax.servlet.ServletException; import javax.servlet.ServletOutputStream; import javax.servlet.annotation.WebServlet; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import java.io.FileInputStream; import java.io.IOException;@WebServlet("/downloadServlet") public class DownloadServlet extends HttpServlet {protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {//1.獲取請求參數,文件名稱String filename = request.getParameter("filename");//2.使用字節輸入流加載文件進內存//2.1找到文件服務器路徑ServletContext servletContext = this.getServletContext();String realPath = servletContext.getRealPath("/img/" + filename);//2.2用字節流關聯FileInputStream fis = new FileInputStream(realPath);//3.設置response的響應頭//3.1設置響應頭類型:content-typeString mimeType = servletContext.getMimeType(filename);//獲取文件的mime類型response.setHeader("content-type", mimeType);//3.2設置響應頭打開方式:content-disposition//解決中文文件名問題//1.獲取user-agent請求頭、String agent = request.getHeader("user-agent");//2.使用工具類方法編碼文件名即可filename = DownLoadUtils.getFileName(agent, filename);response.setHeader("content-disposition", "attachment;filename=" + filename);//4.將輸入流的數據寫出到輸出流中ServletOutputStream sos = response.getOutputStream();byte[] buff = new byte[1024 * 8];int len = 0;while ((len = fis.read(buff)) != -1) {sos.write(buff, 0, len);}fis.close();}protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {this.doPost(request, response);} }

    案例_文件下載_中文 文件名 問題

    * 問題:
    ?? ?* 中文文件問題
    ?? ??? ?* 解決思路:
    ?? ??? ??? ?1. 獲取客戶端使用的瀏覽器版本信息
    ?? ??? ??? ?2. 根據不同的版本信息,設置filename的編碼方式不同

    ??

    DownLoadUtils.java

    package cn.itcast.web.utils;import sun.misc.BASE64Encoder;import java.io.UnsupportedEncodingException; import java.net.URLEncoder;public class DownLoadUtils {public static String getFileName(String agent, String filename) throws UnsupportedEncodingException {if (agent.contains("MSIE")) {// IE瀏覽器filename = URLEncoder.encode(filename, "utf-8");filename = filename.replace("+", " ");} else if (agent.contains("Firefox")) {// 火狐瀏覽器BASE64Encoder base64Encoder = new BASE64Encoder();filename = "=?utf-8?B?" + base64Encoder.encode(filename.getBytes("utf-8")) + "?=";} else {// 其它瀏覽器filename = URLEncoder.encode(filename, "utf-8");}return filename;} }

    加油~~~

    總結

    以上是生活随笔為你收集整理的Request和Response-学习笔记05【ServletContext对象、文件下载】的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。