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 頭部請求示例

以下示例使用 HttpServletRequestgetHeaderNames() 方法讀取 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

您可以嘗試以類似的方式使用所有方法。

廣告