Web高階三 HTTP&Response
第一章 HTTP響應報文詳解
HTTP協議: HTTP請求報文及HttpServletRequest物件。 HTTP響應報文及HttpServletResponse物件。
1. HTTP響應報文
HTTP是基於請求和響應的協議,一次請求對應一次響應。請求和響應的資料格式都遵從HTTP的超文字傳輸協議。 與HTTP的請求一樣,HTTP響應的資料也分為3部分:響應行 ,響應頭 ,響應體 這3部分組成。所以,請求是通過瀏覽器將資料傳送到伺服器,而響應是將伺服器處理的結果響應到瀏覽器。
2. 抓包檢視響應資料
<!DOCTYPE html> <html> <head> <meta charset="UTF‐8"> <title>Insert title here</title> </head> <body> <h2>hehe world 你好</h2> <form action="" method="get"> 使用者名稱:<input type="text" name="username" value="jack" /> <br/> 密碼:<input type="text" name="password" value="1234" /> <br/> <input type="submit" value="get提交" /> </form> <form action="" method="post"> 使用者名稱:<input type="text" name="username" value="jack" /> <br/> 密碼:<input type="text" name="password" value="1234" /> <br/> <input type="submit" value="post提交" /> </form> </body> </html>
抓取的響應報文如下圖所示: 【響應行】 響應行格式:協議/版本 狀態碼
常見狀態碼 :
【響應頭】 響應頭也是用的鍵值對key:value,伺服器基於響應頭通知瀏覽器的行為。
常見響應頭 :
【響應體】 響應體,就是伺服器傳送給瀏覽器的資料。當前請求的資源是hello.html,所以瀏覽器響應的資料是一個html頁面。
總結 : 響應行:200 404 500 302 304
響應頭:
refresh:定時重新整理
content-type:告訴瀏覽器檔案型別 解決中文亂碼問題
location:和狀態碼302一起使用實現重定向功能
content-disposition: 告訴瀏覽器以附件形式解析 通常用於下載
第二章 HttpServletResponse物件
一切皆物件,Servlet程式接受客戶端請求之後,通過HttpServletResponse物件來完成客戶端的響應。 通過該物件,將資料(可以是文字資料,也可以是二進位制資料) 返回給客戶端。
1. HttpServletResponse物件作用
HttpServletResponse物件代表伺服器響應,tomcat建立HttpServletResponse物件,並將該物件作為引數傳遞給servlet的service方法。 HttpServletResponse物件作用 : 通過HttpServletResponse物件提供的API,設定響應行,頭,體。
2. HttpServletResponse物件常用API
2.1 響應行 setStatus(int code); 向瀏覽器傳送狀態碼
常用狀態碼 :
2.2 響應頭 setHeader(String name,String value); 設定響應頭資訊
// Content-Disposition 告訴瀏覽器以附件的形式開啟這個檔案
respon.setHeader("Content-Disposition","attachment;filename="+filename);
常見響應頭
2.2.1處理響應亂碼 : 亂碼產生原因 : 伺服器如果需要響應給瀏覽器中文資料,tomcat使用getWriter()輸出字元時,對於中文需要進行編碼處理,而tomcat8 預設編碼是ISO-8859-1,該碼錶是不支援中文編碼的。所以響應給瀏覽器,出現亂碼。
亂碼解決方案 : 通過response.setContentType(“text/html;charset=utf-8”);
1.設定響應的資料型別(mime-type); 2.設定響應的資料編碼(utf-8);
2.2.2 重定向 重定向可以去一個servlet,也可以去一個html靜態資源
注 : 開發中使用 response.sendRedirect(“otherServlet”);來實現重定向。
2.3 轉發的重定向的區別
轉發和重定向怎麼選擇
- 如果需要共享request域,必須使用轉發;
- 如果需要將瀏覽器位址列地址變為第二次請求的地址,必須使用重定向;
2.4 響應體