公用介面類HttpServletRequest繼承自ServletRequest.用戶端瀏覽器發出的請求被封裝成為一個HttpServletRequest對象。所有的資訊包括請求的地址,請求的參數,提交的資料,上傳的檔案用戶端的ip甚至用戶端作業系統都包含在其內。HttpServletResponse繼承了ServletResponse介面,並提供了與Http協議有關的方法,這些方法的主要功能是設定HTTP狀態代碼和管理Cookie。 一、HttpServletRequest介面 定義 public interface HttpServletRequest extends ServletRequest; 用來處理一個對Servlet的HTTP格式的請求資訊。 方法 1、getAuthType public String getAuthType(); 返回這個請求的身分識別驗證模式。 2、getCookies public Cookie[] getCookies(); 返回一個 數組 ,該數組包含這個請求中當前的所有cookie。如果這個請求中沒有cookie,返回一個空數組。 3、getDateHeader public long getDateHeader(String name); 返回指定的要求標頭域的值,這個值被轉換成一個反映自1970-1-1日(GMT)以來的精確到毫秒的長整數。 如果頭域不能轉換,拋出一個IllegalArgumentException。如果這個要求標頭域不存在,這個方法返回-1。 4、getHeader public String getHeader(String name); 返回一個要求標頭域的值。(譯者註:與上一個方法不同的是,該方法返回一個字串) 如果這個要求標頭域不存在,這個方法返回-1。 5、getHeaderNames public Enumeration getHeaderNames(); 該方法返回一個String對象的列表,該列表反映請求的所有頭網域名稱。 有的引擎可能不允許通過這種方法訪問頭域,在這種情況下,這個方法返回一個空的列表。 6、getIntHeader public int getIntHeader(String name); 返回指定的要求標頭域的值,這個值被轉換成一個整數。 如果頭域不能轉換,拋出一個IllegalArgumentException。如果這個要求標頭域不存在,這個方法返回-1。 7、getMethod public String getMethod(); 返回這個請求使用的HTTP方法(例如:GET、POST、PUT) 8、getPathInfo public String getPathInfo(); 這個方法返回在這個請求的URL的Servlet路徑之後的請求URL的額外的路徑資訊。如果這個請求URL包括一個查詢字串,在傳回值內將不包括這個查詢字串。這個路徑在返回之前必須經過URL解碼。如果在這個請求的URL的Servlet路徑之後沒有路徑資訊。這個方法返回空值。 9、getPathTranslated public String getPathTranslated(); 這個方法獲得這個請求的URL的Servlet路徑之後的額外的路徑資訊,並將它轉換成一個真實的路徑。在進行轉換前,這個請求的URL必須經過URL解碼。如果在這個URL的Servlet路徑之後沒有附加路徑資訊。這個方法返回空值。 10、getQueryString public String getQueryString(); 返回這個請求URL所包含的查詢字串。一個查詢字串符在一個URL中由一個“。”引出。如果沒有查詢字串,這個方法返回空值。 11、getRemoteUser public String getRemoteUser 返回作了請求的使用者名稱,這個資訊用來作HTTP使用者論證。 如果在請求中沒有使用者名稱資訊,這個方法返回空值。 12、getRequestedSessionId public String getRequestedSessionId(); 返回這個請求相應的session id。如果由於某種原因 用戶端 提供的session id是無效的,這個session id將與在當前session中的session id不同,與此同時,將建立一個新的session。 如果這個請求沒與一個session關聯,這個方法返回空值。 13、getRequestURI public String getRequestURI(); 從 HTTP請求 的第一行返回請求的URL中定義被請求的資源的部分。如果有一個查詢字串存在,這個查詢字串將不包括在傳回值當中。例如,一個請求通過/catalog/books?id=1這樣的URL路徑訪問,這個方法將返回/catalog/books。這個方法的傳回值包括了Servlet路徑和路徑資訊。 如果這個URL路徑中的的一部分經過了URL編碼,這個方法的傳回值在返回之前必須經過解碼。 14、getServletPath public String getServletPath(); 這個方法返回請求URL反映調用Servlet的部分。例如,一個Servlet被映射到/catalog/summer這個URL路徑,而一個請求使用了/catalog/summer/casual這樣的路徑。所謂的反映調用Servlet的部分就是指/catalog/summer。 如果這個Servlet不是通過路徑匹配來調用。這個方法將返回一個空值。 15、getSession public HttpSession getSession(); public HttpSession getSession(boolean create); 返回與這個請求關聯的當前的有效session。如果調用這個方法時沒帶參數,那麼在沒有session與這個請求關聯的情況下,將會建立一個session。如果調用這個方法時帶入了一個布爾型的參數,只有當這個參數為真時,session才會被建立。 為了確保session能夠被完全維持。Servlet開發人員必須在響應被提交之前調用該方法。 如果帶入的參數為假,而且沒有session與這個請求關聯。這個方法會返回空值。 16、isRequestedSessionIdValid public boolean isRequestedSessionIdValid(); 這個方法檢查與此請求關聯的session當前是不是有效。如果當前請求中使用的session無效,它將不能通過getSession方法返回。 17、isRequestedSessionIdFromCookie public boolean isRequestedSessionIdFromCookie(); 如果這個請求的session id是通過用戶端的一個cookie提供的,該方法返回真,否則返回假。 18、isRequestedSessionIdFromURL public boolean isRequestedSessionIdFromURL(); 如果這個請求的session id是通過用戶端的URL的一部分提供的,該方法返回真,否則返回假。請注意此方法與isRequestedSessionIdFromUrl在URL的拼字上不同。 以下方法將被取消 19、isRequestedSessionIdFromUrl public boolean isRequestedSessionIdFromUrl(); 該方法被isRequestedSessionIdFromURL代替。 HttpServletRequest類主要處理: 1.讀取和寫入HTTP頭標 2.取得和設定cookies 3.取得路徑資訊 4.標識HTTP會話方法: String getAuthType() 如果servlet由一個評鑑方案所保護,如HTTP基本評鑑,則返回方案名稱。 String getContextPath() 返回指定servlet上下文(web應用)的URL的首碼。 Cookie[] getCookies() 返回與請求相關cookie的一個數組。 Long getDateHeader(String name) 將輸出轉換成適合構建Date對象的long類型取值的getHeader()的簡化版。 String getHeader(String name) 返回指定的HTTP頭標指。如果其由請求給出,則名字應為大小寫不敏感。 Enumeration getHeaderNames() 返回請求給出的所有HTTP頭標名稱的權舉值。 Enumeration getHeaders(String name) 返回請求給出的指定類型的所有HTTP頭標的名稱的枚舉值,它對具有多取值的頭標非常有用。 int getIntHeader(String name) 將輸出轉換為int取值的getHeader()的簡化版。 String getMethod() 返回HTTP要求方法(例如GET、POST等等) String getPathInfo() 返回在URL中指定的任意附加路徑資訊。 String getPathTranslated() 返回在URL中指定的任意附加路徑資訊,被子轉換成一個實際路徑。 String getQueryString() 返回查詢字串,即URL中?後面的部份。 String getRemoteUser() 如果使用者通過評鑑,返回遠端使用者名,否則為null。 String getRequestedSessionId() 返回用戶端的會話ID String getRequestURI() 返回URL中一部分,從“/”開始,包括上下文,但不包括任意查詢字串。 String getServletPath() 返回請求URI上下文後的子串 HttpSession getSession() 調用getSession(true)的簡化版。 HttpSession getSession(boolean create) 返回當前HTTP會話,如果不存在,則建立一個新的會話,create參數為true。 Principal getPrincipal() 如果使用者通過評鑑,返回代表目前使用者的java.security.Principal對象,否則為null。 boolean isRequestedSessionIdFromCookie() 如果請求的會話ID由一個Cookie對象提供,則返回true,否則為false。 boolean isRequestedSessionIdFromURL() 如果請求的會話ID在請求URL中解碼,返回true,否則為false boolean isRequestedSessionIdValid() 如果用戶端返回的會話ID仍然有效,則返回true。 Boolean isUserInRole(String role) 如果當前已通過評鑑使用者與指定角色相關,則返回true,如果不是或使用者未通過評鑑,則返回false。
HttpServletRequest簡介
擷取請求行的相關資訊
擷取網路連接資訊
擷取要求標頭資訊
瀏覽器傳遞參數資訊的細節
擷取請求參數
擷取請求訊息的實體內容
利用請求域屬性傳遞資訊
請求參數的中文讀取問題
WEB用戶端發送給WEB伺服器的HTTP請求訊息分為三個部分:
請求行 POST /demo/login HTTP/1.1
請求訊息頭
訊息本文(也叫實體內容) username=xxxx&password=1234
Servlet API中定義的ServletRequest介面類用於封裝請求訊息。
HttpServletRequest是專用於HTTP協議的ServletRequest子介面,它用於封裝HTTP請求訊息。
在service()方法內部調用HttpServletRequest對象的各種方法來擷取請求訊息。
HTTP請求訊息的請求行包括請求方式、資源路徑和HTTP協議版本:
GET /it315/servlet/RequestURI?param1=a¶m2=b HTTP/1.1
getMethod方法返回HTTP請求訊息中的請求方式。
getRequestURI方法返回請求行中的資源名部分。
getQueryString 方法返回請求行中的參數部分。
getProtocol方法返回請求行中的協議名和版本。
getContextPath方法返回請求資源所屬於的WEB應用程式的路徑。
getPathInfo方法返回請求URL中的額外路徑資訊。額外路徑資訊是請求URL中的位於Servlet的路徑之後和查詢參數之前的內容,它以“/”開頭。
getPathTranslated方法返回URL中的額外路徑資訊所對應的資源的真實路徑。
getServletPath方法返回Servlet的名稱或Servlet所映射的路徑。
getRemoteAddr方法返回傳出請求的客戶機的IP地址,其格式為“192.168.0.3”這種形式的字元文本。 (*)
getRemoteHost方法返回傳出請求的客戶機的完整主機名稱,即“pc1.it315.org”這種格式。
getRemotePort方法返回傳出請求的客戶機所使用的網路介面的連接埠號碼。
getLocalAddr方法返回WEB伺服器上接收當前請求的網路介面的IP地址。
getLocalName方法返回WEB伺服器上接收當前請求的網路介面的IP地址所對應的主機名稱。
getLocalPort方法返回WEB伺服器上接收當前請求的網路介面的連接埠號碼。
getServerName方法返回當前請求所指向的主機名稱。
getServerPort方法返回當前請求所已連線的服務器連接埠號碼。
getScheme方法返回請求的協議名,例如http、https或ftp。
getRequestURL方法返回用戶端發出請求時的完整URL。
getHeader方法
getHeaders方法
getHeaderNames方法
getIntHeader方法
getDateHeader方法
getContentType方法
getContentLength方法
getCharacterEncoding方法
Enumeration headerNames = request.getHeaderNames();
while(headerNames.hasMoreElements()){
String headerName = (String)headerNames.nextElement();
out.print(headerName + " : " + request.getHeader(headerName) + "<br>");
/*如果要考慮同一個要求標頭名可能出現多次,
那麼應該用下面的程式碼片段代替上面一行程式碼*/
/*Enumeration values = request.getHeaders(headerName);
while(values.hasMoreElements()) {
out.print(headerName + " : " + (String)values.nextElement() + "<br>");
}*/
}