一、HTTP協議
GET請求協議格式 (get請求沒有請求體)
POST請求協議格式
-
請求消息:客戶端發送給服務器端的數據
* 數據格式:
①. 請求行
②. 請求頭
③. 請求空行
④. 請求體 -
響應消息:服務器端發送給客戶端的數據
數據格式:
①. 響應行
組成:協議/版本 響應狀態碼 狀態碼描述
響應狀態碼:服務器告訴客戶端瀏覽器本次請求和響應的一個狀態。
* 狀態碼都是3位數字
* 分類:
1xx:服務器就收客戶端消息,但沒有接受完成,等待一段時間後,發送1xx多狀態碼
2xx:成功。代表:200
3xx:重定向。代表:302(重定向),304(訪問緩存)
4xx:客戶端錯誤。 * 404(請求路徑沒有對應的資源) * 405:請求方式沒有對應的doXxx方法
5xx:服務器端錯誤。代表:500(服務器內部出現異常)
②. 響應頭:
格式:頭名稱: 值
常見的響應頭:
Content-Type:服務器告訴客戶端本次響應體數據格式以及編碼格式
Content-disposition:服務器告訴客戶端以什麼格式打開響應體數據
響應空行
響應體:傳輸的數據
二、功能:response對象主要用於對客戶端的請求進行迴應。
以及處理http的連接信息,例如設置http文件頭,設置cookie對象等。
3. 設置響應行
①. 格式:HTTP/1.1 200 ok
② 設置狀態碼:setStatus(int sc)
4. 設置響應頭:setHeader(String name, String value)
- 設置響應體:
* 使用步驟:
1. 獲取輸出流
* 字符輸出流:PrintWriter getWriter()
* 字節輸出流:ServletOutputStream getOutputStream()
2. 使用輸出流,將數據輸出到客戶端瀏覽器
三、response對象方法:
方法 | 說明 |
---|---|
addCookie | 添加一個Cookie對象 |
addHeader | 添加Http文件指定名字頭信息 |
containsHeader | 判斷指定名字Http文件頭信息是否存在 |
encodeURL | 使用sessionid封裝URL |
flushBuffer | 強制把當前緩衝區內容發送到客戶端 |
getBufferSize | 返回緩衝區大小 |
getOutputStream | 返回到客戶端的輸出流對象 |
sendError | 向客戶端發送錯誤信息 |
sendRedirect | 把響應發送到另一個位置進行處理 |
setContentType | 設置響應的MIME類型 |
setHeade | 設置指定名字的Http文件頭信息 |
三、重定向
//訪問responseDemo1這個資源會跳轉到responseDemo2資源
//1.設置狀態碼302
response.setStatus(302);
//2.1方法一:設置響應頭location
//response.setHeader("location","/JavaScript_Response_war_exploded/responseDemo2");
//2.2方法二:簡單的重定向方法
response.sendRedirect("/JavaScript_Response_war_exploded/responseDemo2");
//response.sendRedirect("https://www.baidu.com");
forward 和 redirect 區別
- 重定向的特點:redirect response.sendRedirect(“目標絕對路徑”);
1. 地址欄發生變化
2. 重定向可以訪問其他站點(服務器)的資源
3. 重定向是兩次請求。不能使用request對象來共享數據 - 轉發的特點:forward request.getRequestDispatcher(“目標相對路徑”).forward(request,response);
1. 轉發地址欄路徑不變
2. 轉發只能訪問當前服務器下的資源(一種在服務器內部的資源跳轉方式)
3. 轉發是一次請求,可以使用request對象來共享數據