JSP客戶端請求

在本章中,我們將在JSP中討論和學習客戶端請求。當流覽器請求網頁時,它會向Web伺服器發送大量資訊。這些資訊不能直接讀取,因為這些資訊作為HTTP請求標頭的一部分。可以通過HTTP協議以瞭解更多資訊。

下表列出了流覽器中的重要HTTP請求頭資訊。這些資訊經常在Web編程中使用 -

編號 請求頭 描述
1 Accept 此請求頭指定流覽器或其他客戶端可以處理的MIME類型。 image/pngimage/jpeg是兩種最常見的值。
2 Accept-Charset 此請求頭指定流覽器可用於顯示資訊的字元集。 例如:ISO-8859-1UTF-8GB2312等。
3 Accept-Encoding 此請求頭指定流覽器知道如何處理的編碼類型。gzipcompress是兩種最常見的值。
4 Accept-Language 此請求頭指定客戶端的首選語言,以防servlet可以使用多種語言生成結果。例如:enen-usru
5 Authorization 訪問受密碼保護的網頁時,客戶端使用此請求頭來標識自己。
6 Connection 此請求頭指示客戶端是否可以處理持久的HTTP連接。 持久連接允許客戶端或其他流覽器通過單個請求檢索多個檔。如果是Keep-Alive值表示使用持久連接。
7 Content-Length 此請求頭僅適用於POST請求,並以位元組為單位給出POST數據的大小。
8 Cookie 此請求頭將返回給先前發送到伺服器的cookie到流覽器。
9 Host 此請求頭指定原始URL中給出的主機和端口。
10 If-Modified-Since 此請求頭表示客戶端僅在指定日期之後更改頁面。 伺服器發送代碼304,表示如果沒有較新的結果可用,則不修改標題。
11 If-Unmodified-Since 該請求頭與If-Modified-Since相反; 它指定只有當文檔比指定日期更早時,動作才能成功。
12 Referer 此請求頭指示引薦網頁的URL。 例如,如果位於網頁A並單擊鏈接到網頁B,則當流覽器請求網頁B時,網頁A的URL包含在Referer標頭中。

HttpServletRequest對象

request對象是javax.servlet.http.HttpServletRequest對象的一個實例。 每當客戶端請求頁面時,JSP引擎將創建一個新對象來表示該請求。

請求對象提供了獲取包括表單數據,Cookie,HTTP方法等HTTP頭資訊的方法。

下表列出了可用於在JSP程式中讀取HTTP頭的重要方法。 HttpServletRequest對象可以使用這些方法,該對象代表Web伺服器的客戶端請求。

編號 方法 描述
1 Cookie[] getCookies() 返回一個數組,其中包含客戶端使用此請求發送的所有Cookie對象。
2 Enumeration getAttributeNames() 返回枚舉,其中包含此請求可用屬性的名稱。
3 Enumeration getHeaderNames() 返回此請求包含的所有頭名稱的枚舉。
4 Enumeration getParameterNames() 返回此請求中包含的參數名稱的String對象的枚舉。
5 HttpSession getSession() 返回與此請求相關聯的當前會話,或者如果請求沒有會話,則自動創建一個會話。
6 HttpSession getSession(boolean create) 返回與此請求相關聯的當前HttpSession,或者如果沒有當前會話,並且createtrue,則返回創建一個新會話。
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方法的名稱,例如:GETPOSTPUT
16 String getParameter(String name) String形式返回請求參數的值,如果該參數不存在,則返回null
17 String getPathInfo() 返回與客戶端發出此請求時發送的URL相關聯的任何額外的路徑資訊。
18 String getProtocol() 返回請求使用的協議的名稱和版本。
19 String getQueryString() 返回路徑後請求URL中包含的查詢字串。
20 String getRemoteAddr() 返回發送請求的客戶端的Internet協議(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) 返回包含給定請求參數的所有值的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()方法來獲取每個參數名稱的名稱。

首先打開Eclipse,創建一個動態Web專案:ClientRequest,其專案結構如下所示 -

創建一個JSP檔:index.jsp,其代碼如下所示 -

<%@ page language="java" contentType="text/html; charset=UTF-8"
    pageEncoding="UTF-8"%>
<%@ page import="java.io.*,java.util.*"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
<title>客戶端請求參數數據</title>
</head>
<body>
    <div style="margin: auto; width: 80%;">
        <h2>客戶端請求頭參數數據示例</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>
    </div>
</body>
</html>

執行上面示例代碼,打開流覽器訪問URL: http://localhost:8080/ClientRequest/index.jsp ,得到以下結果 -


上一篇: JSP隱式對象 下一篇: JSP伺服器回應