回顧上一章的知識:
請求網絡資源HTTP會發出多個請求並得到響應
設置響應狀態行關鍵是設置狀態碼
在向客戶端輸出內容之前要設置狀態碼和響應頭
設置響應頭讓Servlet發揮最大功能
消息體可以用文本或二進制流方式發送
響應重定向把請求轉發給另外一個URL,利用302狀態碼和Locatoin頭,讓瀏覽器處理
可以根據時間來控制響應
本章目標:
HTTP請求提交的方法
獲取HTTP請求行與請求頭
獲取表單數據
請求派發和請求范圍
GET/POST提交方法:
瀏覽器向Web服務器發送HTTP請求
–用戶在網頁上點擊一個超連接
–用戶提交在網頁上填寫好的表單
–用戶在瀏覽器地址欄中輸入URL地址並回車
默認情況下都是使用HTTP協議的GET方法提交請求
GET/POST提交方法區別:
何時使用GET/POST方法:
1:請求一個靜態頁面或圖形文件時使用GET方法,因為僅僅需要發送文件名;
2:發送大數據的時候,使用POST方法;
3:上傳文件時,使用POST方法;
4:發送用戶名、密碼或其他保密信息的時候使用POST方法;
獲取HTTP協議請求行:
HttpServletRequest對象的如下方法訪問
–getMethod():獲取HTTP的請求方法,例如GET、POST等
-getRequestURI():獲取請求的URI資源
–getRequestURL():獲取請求的URL,包含協議名、服務器名或IP、端口號和請求資源但不包括查詢字符串參數
–getQueryString():獲取請求URL后面的查詢字符串
–getProtocol():獲取HTTP的協議名和版本號
–getContextPath():獲取請求URI資源的上下文路徑
–getServletPath():獲取Servlet的映射路徑
獲取HTTP協議請求頭:
HTTP請求頭用於告訴服務器客戶端使用什么軟件以及客戶端想要服務器如何返回請求的信息
HttpServletRequest對象的如下方法訪問
–getHeader(name):返回指定的請求頭的值
–getHeaders(name) :返回一個Enumeration(枚舉)包含請求頭中的所有值
–getHeaderNames():特定請求中接受到的所有請求頭的名稱
–getIntHeader(name):獲取特定請求頭的值,並將其轉化為int類型
–getDateHeader(name):獲取特定請求頭的值,並將其轉化為Date類型
Enumeration enum = request.getHeaderNames();
while (enum.hasMoreElements()) {
String headerName = (String) enum.nextElement();
String headerValue = request.getHeader(headerName);
out.print("<b>"+headerName + "</b>: ");
out.println(headerValue + "<br>");
}
獲取請求消息體:
消息體可以是普通文本也可以是二進制數據
HttpServletRequest對象可以使用通用的方法來獲取表單數據
請求轉發和請求方法:
重定向和請求轉發之間最大的區別在於,重定向讓客戶端瀏覽器來完成,而請求轉發是在服務器端做工作。
請求轉發:
RequestDispatcher對象可以通過調用ServletRequest對象的方法:getRequestDispatcher(String path);
RequestDispatcher對象提供了兩種方法來包含資源以及請求轉發到不同的資源:
forward(ServletRequest, ServletResponse):派發請求和響應對象到RequestDispatcher 對象所確定的新資源(Servlet、JSP或者HTML等)
include(ServletRequest, ServletResponse):該方法關鍵是能包含服務器端的資源
總結:
HttpServletRequest對象主要用於處理分析請求
默認情況下,使用HTTP協議的GET方法提交請求
HTML表單通過“method”屬性使瀏覽器使用HTTP POST方法
GET/POST方法適用於不同場合
HttpServletRequest對象中最常用的方法是獲取請求表單參數
HttpServletRequest對象也可以得到請求中參數的原始字節數據
重定向和請求派發之間最大的區別在於,重定向讓客戶端瀏覽器來完成,而請求派發是在服務器端做工作
HttpServletRequest可以把一個對象用名字綁定在請求范圍內,並且進行訪問和刪除