當前位置:首頁 » Servlets » Servlet客戶端HTTP請求

Servlet客戶端HTTP請求

Servlets客戶端的HTTP請求實例代碼 - 當瀏覽器請求的Web頁時,它發送特定信息不能被直接讀取,因為此信息的傳輸作為HTTP請求的標頭的一部分到Web服務器。

當瀏覽器請求的Web頁時,它發送特定信息不能被直接讀取,因為此信息的傳輸作為HTTP請求的標頭的一部分到Web服務器。您可以查看HTTP協議的更多信息。

以下是來自於瀏覽器端,你會在網絡編程中使用非常頻繁的重要頭信息:

頭信息 描述
Accept 這個頭指定瀏覽器或其他客戶端可以處理的MIME類型。image/PNG和image/JPEG是最常見的兩種的可能
Accept-Charset 這個頭指定的字符集的瀏覽器可以使用它來顯示信息。例如ISO-8859-1。
Accept-Encoding 這個頭指定的編碼類型,瀏覽器知道如何處理。gzip壓縮或compressare最常見的兩種的可能的值。
Accept-Language 這個頭指定客戶端的首選語言的情況下,servlet可以在一個以上的語言產生的結果。例如,en,EN-US等。
Authorization 這頭用於客戶端識彆自己的身份訪問受密碼保護的網頁。
Connection 此標頭指示客戶端是否可以處理持久HTTP連接。持久連接允許客戶端或其他瀏覽器,在單個請求來檢索多個文件。值保持活動的方式,持續的連接應使用
Content-Length 此頭是隻適用於POST請求,並給出的POST數據的大小(以字節為單位)。
Cookie 這頭返回到服務器以前發送到瀏覽器的cookie。
Host 這個頭指定的主機和端口,在原來的URL。
If-Modified-Since 這頭表示客戶端想要的頁麵,隻有當它在指定的日期後已更改。服務器發送一個代碼,304表示不修改的頭,如果冇有新的結果可以使用。
If-Unmodified-Since 這頭是相反的If-Modified-Since的,它指定的操作應該會成功,如果該文件是早於指定日期。
Referer 此標頭指示的Web頁的URL。例如,如果你在網頁1,點擊一個鏈接到網頁2,Referer標頭中包含的網頁的URL是當瀏覽器請求的網頁2。
User-Agent 此標頭識彆提出請求的瀏覽器或其他客戶端,並可以使用不同類型的瀏覽器返回不同的內容。

讀取HTTP頭的方法:

有以下的方法,它們可以被用來讀取HTTP報頭中的Servlet程序。這些方法可與HttpServletRequest對象。

S.N. 方法& 描述
1 Cookie[] getCookies()
返回一個數組,包含所有的Cookie對象的客戶端發送此請求。
2 Enumeration getAttributeNames()
返回一個枚舉,其中包含的屬性,提供給此請求的名稱。
3 Enumeration getHeaderNames()
返回一個枚舉這個請求包含所有的頭名。
4 Enumeration getParameterNames()
返回一個枚舉的String對象,包含在該請求中包含的參數的名稱。
5 HttpSession getSession()
返回與此請求關聯的當前會話,或者如果請求冇有會話,創建一個。
6 HttpSession getSession(boolean create)
返回與此請求關聯的HttpSession中,如果如果冇有當前會話,並創建是真實的,則返回一個新的會話。.
7 Locale getLocale()
返回的首選區域設置,客戶端將接受的內容,根據Accept-Language頭
8 Object getAttribute(String name)
返回值的命名屬性的對象,如果冇有給定名稱的屬性存在,則返回null。
9 ServletInputStream getInputStream()
檢索請求主體的二進製數據,使用一個ServletInputStream。
10 String getAuthType()
返回的身份驗證方案,用於保護的servlet的名稱,例如,“基本”或“SSL”,則返回null,如果JSP冇有受到保護
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)
返回值的請求參數為字符串,或者為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()
返回調用JSP的請求的URL的一部分。
26 String[] getParameterValues(String name)
返回一個數組,包含所有給定的請求參數的值,則返回null,如果該參數不存在的String對象。
27 boolean isSecure()
返回一個布爾值,指示是否要求使用安全通道,如HTTPS。
28 int getContentLength()
返回的長度,以字節為單位,請求體,並提供輸入流,或如果長度不知道時為-1
29 int getIntHeader(String name)
返回指定的請求頭為一個int值。
30 int getServerPort()
返回的端口號上接收到這個請求。

HTTP頭請求示例:

下麵的例子使用HttpServletRequest的getHeaderNames()方法讀取HTTP頭信息。此方法返回一個枚舉包含與當前的HTTP請求頭信息。

一旦我們有一個枚舉,我們可以循環下來的枚舉以標準方式,使用調用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 - by www.gitbook.net
      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 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