
- JSP 基礎教程
- JSP - 首頁
- JSP - 概述
- JSP - 環境搭建
- JSP - 架構
- JSP - 生命週期
- JSP - 語法
- JSP - 指令
- JSP - 動作
- JSP - 隱式物件
- JSP - 客戶端請求
- JSP - 伺服器響應
- JSP - HTTP 狀態碼
- JSP - 表單處理
- JSP - 編寫過濾器
- JSP - Cookie 處理
- JSP - 會話跟蹤
- JSP - 檔案上傳
- JSP - 處理日期
- JSP - 頁面重定向
- JSP - 點選計數器
- JSP - 自動重新整理
- JSP - 傳送郵件
- 高階 JSP 教程
- JSP - 標準標籤庫
- JSP - 資料庫訪問
- JSP - XML 資料
- JSP - JavaBean
- JSP - 自定義標籤
- JSP - 表示式語言
- JSP - 異常處理
- JSP - 除錯
- JSP - 安全
- JSP - 國際化
- JSP 有用資源
- JSP - 問答
- JSP - 快速指南
- JSP - 有用資源
- JSP - 討論
JSP - 客戶端請求
在本章中,我們將討論 JSP 中的客戶端請求。當瀏覽器請求一個網頁時,它會向 Web 伺服器傳送大量資訊。這些資訊無法直接讀取,因為這些資訊作為 HTTP 請求頭的一部分傳輸。您可以檢視 HTTP 協議 以獲取更多資訊。
下表列出了來自瀏覽器的重要的頭部資訊。這些資訊在 Web 程式設計中經常使用:
序號 | 頭部 & 描述 |
---|---|
1 | Accept 此頭部指定瀏覽器或其他客戶端可以處理的 **MIME** 型別。**image/png** 或 **image/jpeg** 的值是最常見的兩種可能性。 |
2 | Accept-Charset 此頭部指定瀏覽器可以使用哪些字元集來顯示資訊。例如,**ISO-8859-1**。 |
3 | Accept-Encoding 此頭部指定瀏覽器知道如何處理的編碼型別。**gzip** 或 **compress** 的值是最常見的兩種可能性。 |
4 | Accept-Language 如果 servlet 可以生成多種語言的結果,則此頭部指定客戶端的首選語言。例如 **en, en-us, ru** 等。 |
5 | Authorization 此頭部用於客戶端在訪問受密碼保護的網頁時進行身份識別。 |
6 | Connection 此頭部指示客戶端是否可以處理永續性 HTTP 連線。永續性連線允許客戶端或其他瀏覽器使用單個請求檢索多個檔案。**Keep-Alive** 的值表示應使用永續性連線。 |
7 | Content-Length 此頭部僅適用於 **POST** 請求,並以位元組為單位給出 POST 資料的大小。 |
8 | Cookie 此頭部將 Cookie 返回給之前將其傳送到瀏覽器的伺服器。 |
9 | Host 此頭部指定原始 URL 中給出的主機和埠。 |
10 | If-Modified-Since 此頭部指示客戶端僅在指定日期之後更改了頁面時才需要該頁面。如果沒有任何更新的結果可用,伺服器將傳送程式碼 304,這意味著 **Not Modified** 頭部。 |
11 | If-Unmodified-Since 此頭部與 **If-Modified-Since** 相反;它指定操作僅在文件早於指定日期時才應成功。 |
12 | Referer 此頭部指示引用網頁的 URL。例如,如果您位於網頁 1 並單擊指向網頁 2 的連結,則當瀏覽器請求網頁 2 時,網頁 1 的 URL 將包含在 Referer 頭部中。 |
13 | User-Agent 此頭部標識發出請求的瀏覽器或其他客戶端,可用於向不同型別的瀏覽器返回不同的內容。 |
HttpServletRequest 物件
request 物件是 **javax.servlet.http.HttpServletRequest** 物件的一個例項。每次客戶端請求一個頁面時,JSP 引擎都會建立一個新物件來表示該請求。
request 物件提供方法來獲取 HTTP 頭部資訊,包括 **表單資料、Cookie、HTTP 方法** 等。
下表列出了可在 JSP 程式中用於讀取 HTTP 頭部的重要方法。這些方法可用於表示客戶端對 Web 伺服器請求的 HttpServletRequest 物件。
序號 | 方法 & 描述 |
---|---|
1 | Cookie[] getCookies() 返回一個包含客戶端隨此請求傳送的所有 Cookie 物件的陣列。 |
2 | Enumeration getAttributeNames() 返回一個包含此請求可用的屬性名稱的列舉。 |
3 | Enumeration getHeaderNames() 返回此請求包含的所有頭部名稱的列舉。 |
4 | Enumeration getParameterNames() 返回一個包含此請求中包含的引數名稱的 String 物件列舉。 |
5 | HttpSession getSession() 返回與此請求關聯的當前會話,或者如果請求沒有會話,則建立一個新會話。 |
6 | HttpSession getSession(boolean create) 返回與此請求關聯的當前 HttpSession,或者如果沒有當前會話且 create 為 true,則返回一個新會話。 |
7 | Locale getLocale() 根據 Accept-Language 頭部返回客戶端將接受內容的首選區域設定。 |
8 | Object getAttribute(String name) 將命名屬性的值作為 Object 返回,如果不存在給定名稱的屬性,則返回 null。 |
9 | ServletInputStream getInputStream() 使用 ServletInputStream 檢索請求正文作為二進位制資料。 |
10 | String getAuthType() 返回用於保護 servlet 的身份驗證方案的名稱,例如“BASIC”或“SSL”,或者如果 JSP 未受保護,則返回 null。 |
11 | String getCharacterEncoding() 返回在此請求正文中使用的字元編碼的名稱。 |
12 | String getContentType() 返回請求正文的 MIME 型別,或者如果型別未知,則返回 null。 |
13 | String getContextPath() 返回請求 URI 中指示請求上下文的請求部分。 |
14 | String getHeader(String name) 將指定請求頭的值作為 String 返回。 |
15 | String getMethod() 返回發出此請求的 HTTP 方法的名稱,例如 GET、POST 或 PUT。 |
16 | String getParameter(String name) 將請求引數的值作為 String 返回,或者如果引數不存在,則返回 null。 |
17 | String getPathInfo() 返回與客戶端發出此請求時傳送的 URL 關聯的任何額外路徑資訊。 |
18 | String getProtocol() 返回請求使用的協議的名稱和版本。 |
19 | String getQueryString() 返回請求 URL 中路徑之後包含的查詢字串。 |
20 | String getRemoteAddr() 返回傳送請求的客戶端的網際網路協議 (IP) 地址。 |
21 | String getRemoteHost() 返回傳送請求的客戶端的完全限定域名。 |
22 | String getRemoteUser() 如果使用者已透過身份驗證,則返回發出此請求的使用者登入名,或者如果使用者未透過身份驗證,則返回 null。 |
23 | String getRequestURI() 返回此請求的 URL 中從協議名稱到 HTTP 請求第一行中的查詢字串的部分。 |
24 | String getRequestedSessionId() 返回客戶端指定的會話 ID。 |
25 | String getServletPath() 返回此請求的 URL 中呼叫 JSP 的部分。 |
26 | String[] getParameterValues(String name) 返回一個包含給定請求引數具有的所有值的 String 物件陣列,或者如果引數不存在,則返回 null。 |
27 | boolean isSecure() 返回一個布林值,指示此請求是否使用安全通道(例如 HTTPS)發出。 |
28 | int getContentLength() 返回請求正文的長度(以位元組為單位),並由輸入流提供,或者如果長度未知,則返回 -1。 |
29 | int getIntHeader(String name) 將指定請求頭的值作為 int 返回。 |
30 | int getServerPort() 返回接收此請求的埠號。 |
HTTP 頭部請求示例
以下示例使用 HttpServletRequest 的 getHeaderNames() 方法讀取 HTTP 頭部資訊。此方法返回一個包含與當前 HTTP 請求關聯的頭部資訊的列舉。
獲得列舉後,我們可以以標準方式向下迴圈列舉。我們將使用 hasMoreElements() 方法確定何時停止以及 nextElement() 方法獲取每個引數名稱的名稱。
<%@ page import = "java.io.*,java.util.*" %> <html> <head> <title>HTTP Header Request Example</title> </head> <body> <center> <h2>HTTP Header Request Example</h2> <table width = "100%" border = "1" align = "center"> <tr bgcolor = "#949494"> <th>Header Name</th> <th>Header Value(s)</th> </tr> <% Enumeration headerNames = request.getHeaderNames(); while(headerNames.hasMoreElements()) { String paramName = (String)headerNames.nextElement(); out.print("<tr><td>" + paramName + "</td>\n"); String paramValue = request.getHeader(paramName); out.println("<td> " + paramValue + "</td></tr>\n"); } %> </table> </center> </body> </html>
現在讓我們將上述程式碼放入 main.jsp 中並嘗試訪問它。
HTTP 頭部請求示例
頭部名稱 | 頭部值(s) |
---|---|
accept | */* |
accept-language | en-us |
user-agent | Mozilla/4.0 (compatible; MSIE 7.0; Windows NT 5.1; Trident/4.0; InfoPath.2; MS-RTC LM 8) |
accept-encoding | gzip, deflate |
host | localhost:8080 |
connection | Keep-Alive |
cache-control | no-cache |
您可以嘗試以類似的方式使用所有方法。