Servlet - 客戶端HTTP請求



當瀏覽器請求網頁時,它會向Web伺服器傳送大量資訊,這些資訊無法直接讀取,因為這些資訊作為HTTP請求頭的部分傳輸。您可以檢視HTTP協議以獲取更多資訊。

以下是來自瀏覽器端的重要頭部資訊,您在Web程式設計中會經常使用:

序號 頭部 & 描述
1

Accept

此頭部指定瀏覽器或其他客戶端可以處理的MIME型別。image/pngimage/jpeg是兩種最常見的可能性。

2

Accept-Charset

此頭部指定瀏覽器可以使用哪些字元集來顯示資訊。例如 ISO-8859-1。

3

Accept-Encoding

此頭部指定瀏覽器知道如何處理的編碼型別。gzipcompress是兩種最常見的可能性。

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中指定的host和port。

10

If-Modified-Since

此頭部指示客戶端僅在指定日期之後更改頁面才需要該頁面。如果沒有任何更新的結果,伺服器會發送程式碼304,表示未修改

11

If-Unmodified-Since

此頭部與If-Modified-Since相反;它指定只有當文件早於指定日期時,操作才能成功。

12

Referer

此頭部指示引用網頁的URL。例如,如果您在網頁1上,並點選指向網頁2的連結,則當瀏覽器請求網頁2時,網頁1的URL將包含在Referer頭部中。

13

User-Agent

此頭部標識發出請求的瀏覽器或其他客戶端,並可用於向不同型別的瀏覽器返回不同的內容。

讀取HTTP頭部的方法

在servlet程式中可以使用以下方法讀取HTTP頭部。這些方法可用於HttpServletRequest物件

序號 方法 & 描述
1

Cookie[] getCookies()

返回一個包含客戶端隨此請求傳送的所有Cookie物件的陣列。

2

Enumeration getAttributeNames()

返回一個包含此請求可用的屬性名稱的Enumeration。

3

Enumeration getHeaderNames()

返回此請求包含的所有頭部名稱的列舉。

4

Enumeration getParameterNames()

返回一個包含此請求中包含的引數名稱的String物件的列舉。

5

HttpSession getSession()

返回與此請求關聯的當前會話,或者如果請求沒有會話,則建立一個新會話。

6

HttpSession getSession(boolean create)

返回與此請求關聯的當前HttpSession,或者如果沒有當前會話並且create的值為true,則返回一個新的會話。

7

Locale getLocale()

根據Accept-Language頭部返回客戶端將接受內容的首選Locale。

8

Object getAttribute(String name)

返回值為名為name的屬性的物件,如果不存在給定名稱的屬性,則返回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請求關聯的頭部資訊的Enumeration。

一旦我們有了Enumeration,我們就可以使用標準方式迴圈遍歷Enumeration,使用hasMoreElements()方法確定何時停止,並使用nextElement()方法獲取每個引數名稱。

// Import required java libraries
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import java.util.*;
 
// Extend HttpServlet class
public class DisplayHeader extends HttpServlet {
 
   // Method to handle GET method request.
   public void doGet(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {
      
      // Set response content type
      response.setContentType("text/html");
 
      PrintWriter out = response.getWriter();
      String title = "HTTP Header Request Example";
      String docType =
         "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n";

      out.println(docType +
         "<html>\n" +
         "<head><title>" + title + "</title></head>\n"+
         "<body bgcolor = \"#f0f0f0\">\n" +
         "<h1 align = \"center\">" + title + "</h1>\n" +
         "<table width = \"100%\" border = \"1\" align = \"center\">\n" +
         "<tr bgcolor = \"#949494\">\n" +
         "<th>Header Name</th><th>Header Value(s)</th>\n"+
         "</tr>\n"
      );
 
      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");
      }
      out.println("</table>\n</body></html>");
   }
   
   // Method to handle POST method request.
   public void doPost(HttpServletRequest request, HttpServletResponse response)
      throws ServletException, IOException {

      doGet(request, response);
   }
}

現在呼叫上述servlet將生成以下結果:

HTTP Header Request Example

Header Name Header Value(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
廣告
© . All rights reserved.