當浏覽器請求一個網頁時,它會向網絡伺服器發送一系列不能被直接讀取的資訊,因為這些資訊是作為HTTP資訊頭的一部分來傳送的。接下來學習一些浏覽器端資訊頭的重要内容,在以後的網絡程式設計中将會經常見到這些資訊:
資訊 | 描述 |
---|---|
Accept | 指定浏覽器或其他用戶端可以處理的MIME類型。它的值通常為 image/png 或 image/jpeg |
Accept-Charset | 指定浏覽器要使用的字元集。比如 ISO-8859-1 |
Accept-Encoding | 指定編碼類型。它的值通常為 gzip 或compress |
Accept-Language | 指定用戶端首選語言,servlet會優先傳回以目前語言構成的結果集,如果servlet支援這種語言的話。比如 en,en-us,ru等等 |
Authorization | 在通路受密碼保護的網頁時識别不同的使用者 |
Connection | 表明用戶端是否可以處理HTTP持久連接配接。持久連接配接允許用戶端或浏覽器在一個請求中擷取多個檔案。Keep-Alive 表示啟用持久連接配接 |
Content-Length | 僅适用于POST請求,表示 POST 資料的位元組數 |
Cookie | 傳回先前發送給浏覽器的cookies至伺服器 |
Host | 指出原始URL中的主機名和端口号 |
If-Modified-Since | 表明隻有當網頁在指定的日期被修改後用戶端才需要這個網頁。 伺服器發送304碼給用戶端,表示沒有更新的資源 |
If-Unmodified-Since | 與If-Modified-Since相反, 隻有文檔在指定日期後仍未被修改過,操作才會成功 |
Referer | 标志着所引用頁面的URL。比如,如果你在頁面1,然後點了個連結至頁面2,那麼頁面1的URL就會包含在浏覽器請求頁面2的資訊頭中 |
User-Agent | 用來區分不同浏覽器或用戶端發送的請求,并對不同類型的浏覽器傳回不同的内容 |
HttpServletRequest類
request對象是javax.servlet.http.HttpServletRequest類的執行個體。每當用戶端請求一個頁面時,JSP引擎就會産生一個新的對象來代表這個請求。
request對象提供了一系列方法來擷取HTTP資訊頭,包括表單資料,cookies,HTTP方法等等。
詳細内容見下表:
序号 | 方法& 描述 |
---|---|
1 | Cookie[] getCookies() 傳回用戶端所有的Cookie的數組 |
2 | Enumeration getAttributeNames() 傳回request對象的所有屬性名稱的集合 |
3 | Enumeration getHeaderNames() 傳回所有HTTP頭的名稱集合 |
4 | Enumeration getParameterNames() 傳回請求中所有參數的集合 |
5 | HttpSession getSession() 傳回request對應的session對象,如果沒有,則建立一個 |
6 | HttpSession getSession(boolean create) 傳回request對應的session對象,如果沒有并且參數create為true,則傳回一個新的session對象 |
7 | Locale getLocale() 傳回目前頁的Locale對象,可以在response中設定 |
8 | Object getAttribute(String name) 傳回名稱為name的屬性值,如果不存在則傳回null。 |
9 | ServletInputStream getInputStream() 傳回請求的輸入流 |
10 | String getAuthType() 傳回認證方案的名稱,用來保護servlet,比如 “BASIC” 或者 “SSL” 或 null 如果 JSP沒設定保護措施 |
11 | String getCharacterEncoding() 傳回request的字元編碼集名稱 |
12 | String getContentType() 傳回request主體的MIME類型,若未知則傳回null |
13 | String getContextPath() 傳回request URI中指明的上下文路徑 |
14 | String getHeader(String name) 傳回name指定的資訊頭 |
15 | String getMethod() 傳回此request中的HTTP方法,比如 GET,,POST,或PUT |
16 | String getParameter(String name) 傳回此request中name指定的參數,若不存在則傳回null |
17 | String getPathInfo() 傳回任何額外的與此request URL相關的路徑 |
18 | String getProtocol() 傳回此request所使用的協定名和版本 |
19 | String getQueryString() 傳回此 request URL包含的查詢字元串 |
20 | String getRemoteAddr() 傳回用戶端的IP位址 |
21 | String getRemoteHost() 傳回用戶端的完整名稱 |
22 | String getRemoteUser() 傳回用戶端通過登入認證的使用者,若使用者未認證則傳回null |
23 | String getRequestURI() 傳回request的URI |
24 | String getRequestedSessionId() 傳回request指定的session ID |
25 | String getServletPath() 傳回所請求的servlet路徑 |
26 | String[] getParameterValues(String name) 傳回指定名稱的參數的所有值,若不存在則傳回null |
27 | boolean isSecure() 傳回request是否使用了加密通道,比如HTTPS |
28 | int getContentLength() 傳回request主體所包含的位元組數,若未知的傳回-1 |
29 | int getIntHeader(String name) 傳回指定名稱的request資訊頭的值 |
30 | int getServerPort() 傳回伺服器端口号 |
JSP 伺服器響應
Response響應對象主要将JSP容器處理後的結果傳回到用戶端。可以通過response變量設定HTTP的狀态和向用戶端發送資料,如Cookie、HTTP檔案頭資訊等。
表摘要出了HTTP1.1響應頭中最有用的部分
響應頭 | 描述 |
---|---|
Allow | 指定伺服器支援的request方法(GET,POST等等) |
Cache-Control | 指定響應文檔能夠被安全緩存的情況。通常取值為 public,private 或no-cache 等等。 Public意味着文檔可緩存,Private意味着文檔隻為單使用者服務并且隻能使用私有緩存。No-cache 意味着文檔不被緩存。 |
Connection | 指令浏覽器是否要使用持久的HTTP連接配接。close值 指令浏覽器不使用持久HTTP連接配接,而keep-alive 意味着使用持久化連接配接。 |
Content-Disposition | 讓浏覽器要求使用者将響應以給定的名稱存儲在磁盤中 |
Content-Encoding | 指定傳輸時頁面的編碼規則 |
Content-Language | 表述文檔所使用的語言,比如en, en-us,,ru等等 |
Content-Length | 表明響應的位元組數。隻有在浏覽器使用持久化 (keep-alive) HTTP 連接配接時才有用 |
Content-Type | 表明文檔使用的MIME類型 |
Expires | 指明啥時候過期并從緩存中移除 |
Last-Modified | 指明文檔最後修改時間。用戶端可以 緩存文檔并且在後續的請求中提供一個 If-Modified-Since請求頭 |
Location | 在300秒内,包含所有的有一個狀态碼的響應位址,浏覽器會自動重連然後檢索新文檔 |
Refresh | 指明浏覽器每隔多久請求更新一次頁面。 |
Retry-After | 與503 (Service Unavailable)一起使用來告訴使用者多久後請求将會得到響應 |
Set-Cookie | 指明目前頁面對應的cookie |
HttpServletResponse類
response 對象是 javax.servlet.http.HttpServletResponse 類的一個執行個體。就像伺服器會建立request對象一樣,它也會建立一個用戶端響應。
response對象定義了處理建立HTTP資訊頭的接口。通過使用這個對象,開發者們可以添加新的cookie或時間戳,還有HTTP狀态碼等等。
下表列出了用來設定HTTP響應頭的方法,這些方法由HttpServletResponse 類提供:
S.N. | 方法 & 描述 |
---|---|
1 | String encodeRedirectURL(String url) 對sendRedirect()方法使用的URL進行編碼 |
2 | String encodeURL(String url) 将URL編碼,回傳包含Session ID的URL |
3 | boolean containsHeader(String name) 傳回指定的響應頭是否存在 |
4 | boolean isCommitted() 傳回響應是否已經送出到用戶端 |
5 | void addCookie(Cookie cookie) 添加指定的cookie至響應中 |
6 | void addDateHeader(String name, long date) 添加指定名稱的響應頭和日期值 |
7 | void addHeader(String name, String value) 添加指定名稱的響應頭和值 |
8 | void addIntHeader(String name, int value) 添加指定名稱的響應頭和int值 |
9 | void flushBuffer() 将任何緩存中的内容寫入用戶端 |
10 | void reset() 清除任何緩存中的任何資料,包括狀态碼和各種響應頭 |
11 | void resetBuffer() 清除基本的緩存資料,不包括響應頭和狀态碼 |
12 | void sendError(int sc) 使用指定的狀态碼向用戶端發送一個出錯響應,然後清除緩存 |
13 | void sendError(int sc, String msg) 使用指定的狀态碼和消息向用戶端發送一個出錯響應 |
14 | void sendRedirect(String location) 使用指定的URL向用戶端發送一個臨時的間接響應 |
15 | void setBufferSize(int size) 設定響應體的緩存區大小 |
16 | void setCharacterEncoding(String charset) 指定響應的編碼集(MIME字元集),例如UTF-8 |
17 | void setContentLength(int len) 指定HTTP servlets中響應的内容的長度,此方法用來設定 HTTP Content-Length 資訊頭 |
18 | void setContentType(String type) 設定響應的内容的類型,如果響應還未被送出的話 |
19 | void setDateHeader(String name, long date) 使用指定名稱和值設定響應頭的名稱和内容 |
20 | void setHeader(String name, String value) 使用指定名稱和值設定響應頭的名稱和内容 |
21 | void setIntHeader(String name, int value) 指定 int 類型的值到 name 标頭 |
22 | void setLocale(Locale loc) 設定響應的語言環境,如果響應尚未被送出的話 |
23 | void setStatus(int sc) 設定響應的狀态碼 |