1. 程式人生 > >JavaWeb10-HTML篇筆記(一)

JavaWeb10-HTML篇筆記(一)

Java

1.1 上次課內容回顧:

HTTP協議:
* HTTP協議請求部分:
    * 請求行 :請求方式 請求路徑 協議版本
    * 請求頭 :一個key對應一個value ,也有一個key對應多個value
        * Referer,User-Agent,If-Modified-Since
    * 請求體 :POST方式的參數.
* HTTP協議響應部分:
    * 響應行 :協議版本 狀態碼 狀態碼描述
        * 狀態碼:200 302 304 404 500
    * 響應頭 :一個key對應一個value ,也有一個key對應多個value
        * Location,Refresh,Last-Modified,禁用本地緩存,Content-Dispostion
    * 響應體 :顯示到頁面的內容.

Servlet:服務器端程序.
* 編寫Servlet:
    * 編寫一個類,實現Servlet接口.繼承GenericServlet,HttpServlet.
    * 配置Servlet.在web.xml中配置Servlet
* Servlet的執行原理:
* Servlet的生命周期:
    * 第一次訪問Servlet的時候,服務器創建一個Servlet的對象.init方法就會執行.任何一次請求服務器都會創建一個新的線程執行service方法.service的方法內部根據請求方式調用doXXX方法.當服務器關閉的時候,servlet就會被銷毀.destroy方法就會執行.
* Servlet的接口實現關系:
* Servlet的登錄的案例:
    * 頁面提交Servlet
        * 獲得請求參數:request.getParameter();
        * 封裝請求參數:
        * 調用業務層類:
        * 根據處理結果作出響應:
* 頁面定時刷新:
* ServletConfig對象:(了解)
* ServletContext對象:(重要)-被多個用戶共享.
    * 記錄網站被登錄的次數.
    * 在服務器啟動的時候ServletContext就會被創建.一個WEB項目創建一個ServletContext對象.

在服務器關閉的時候銷毀.域對象-存的數據有作用範圍.

  • 功能:
    • 1.獲得文件的MIME的類型.
    • 2.獲得全局初始化參數.
    • 3.存取數據-作為域對象來使用.
      • setAttribute(String name,String value);
      • getAttribute(String name);
      • removeAttribute(String name);
    • 4.讀取WEB項目的文件:
      • getResourceAsStream(String path);
      • getRealPath(String path);
        1.2 案例一:完成登錄用戶對他提供文件的下載的功能.1.2.1 需求:
        之前的案例中已經完成的了一個登錄的功能,登錄失敗後回到登錄頁面.登錄成功以後,服務器提供多個文件的下載的鏈接,點擊鏈接可以完成文件的下載的功能.
        1.2.2 分析:1.2.2.1 技術分析:
        【響應對象-Response對象】
        ? 響應行:
        Response設置狀態碼:
        技術分享圖片
        ? 響應頭:
        Response設置響應頭:
        • 一個key對應一個value
          技術分享圖片
        • 一個key對應多個value
          技術分享圖片
          ? 響應體:
          Response設置響應體:
          技術分享圖片
          【response處理中文亂碼】

? 字節流:
設置瀏覽器默認打開編碼
response.setHeader("Content-Type", "text/html;charset=UTF-8");
中文轉成字節數組編碼
response.getOutputStream().write("王守義".getBytes("UTF-8"));

? 字符流:
設置response的緩沖區的編碼
response.setCharacterEncoding("UTF-8");
設置瀏覽器默認打開的編碼.
response.setHeader("Content-Type", "text/html;charset=UTF-8");

response.setContentType("text/html;charset=UTF-8");相當於上面兩句
【文件下載】
一種:超鏈接方式.(不推薦)

  • <a href=”aa.zip”>下載</a>
  • <a href=”1.jpg”>下載</a>
    二種:手動編碼方式完成文件下載.
  • 設置兩個頭和一個流:
  • Content-Type:文件MIME的類型.
  • Content-Dispostion:
  • 文件的輸入流:
    1.2.2.2 步驟分析:
    ? 之前的登錄案例已經存在:
    ? 登錄成功跳轉的頁面上提供一組鏈接:
    ? 當點擊下載的鏈接之後,提交到Servlet:
    ? 設置兩個頭和一個流:
    1.2.3 代碼實現:

1.在頁面中提供一組下載的鏈接:
response.getWriter().println("<h2>手動編碼方式下載</h2>");
response.getWriter().println("<a href=‘/WEB10/downloadServlet?filename=a.bmp‘>a.bmp</a><br/>");
response.getWriter().println("<a href=‘/WEB10/downloadServlet?filename=WEB01.zip‘>WEB01.zip</a>");

2.編寫DownloadServlet:
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

/**
 *  接收參數:
 *  設置兩個頭和一個流:
 *  文件輸入流和響應的輸出流對接:
 */
// 接收參數:get亂碼  new String("中文".getBytes("ISO-8859-1"),"UTF-8");
String filename = request.getParameter("filename");
System.out.println(filename);
// 設置兩個頭和一個流:
// 設置Content-Type頭
String fileType = this.getServletContext().getMimeType(filename);
response.setContentType(fileType);
// 設置Content-Disposition:
response.setHeader("Content-Disposition", "attachment;filename="+filename);
// 設置文件的輸入流:
String path = this.getServletContext().getRealPath("/download/"+filename); //
InputStream is = new FileInputStream(path);
OutputStream os = response.getOutputStream();
int len = 0;
byte[] b = new byte[1024];
while((len = is.read(b))!=-1){
os.write(b, 0, len);
}
is.close();
}

1.2.4 總結:
1.2.4.1 中文文件名下載:
中文文件在不同的瀏覽器中編碼方式不同:
IE :URL編碼

Firefox :Base64編碼

if(agent.contains("Firefox")){
// 火狐瀏覽器
filename = base64EncodeFileName(filename);
}else{
// IE,其他瀏覽器
filename = URLEncoder.encode(filename, "UTF-8");
}

public static String base64EncodeFileName(String fileName) {
BASE64Encoder base64Encoder = new BASE64Encoder();
try {
return "=?UTF-8?B?"
+ new String(base64Encoder.encode(fileName
.getBytes("UTF-8"))) + "?=";
} catch (UnsupportedEncodingException e) {
e.printStackTrace();
throw new RuntimeException(e);
}
}

JavaWeb10-HTML篇筆記(一)