JSP客戶端請求
在本章中,我們將在JSP中討論和學習客戶端請求。當瀏覽器請求網頁時,它會向Web服務器發送大量信息。這些信息不能直接讀取,因爲這些信息作爲HTTP請求標頭的一部分。可以通過HTTP協議以瞭解更多信息。
下表列出了瀏覽器中的重要HTTP請求頭信息。這些信息經常在Web編程中使用 -
編號
請求頭
描述
1
Accept
此請求頭指定瀏覽器或其他客戶端可以處理的MIME
類型。 image/png
或image/jpeg
是兩種最常見的值。
2
Accept-Charset
此請求頭指定瀏覽器可用於顯示信息的字符集。 例如:ISO-8859-1
,UTF-8
和GB2312
等。
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
,表示如果沒有較新的結果可用,則不修改標題。
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
,或者如果沒有當前會話,並且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()
返回發送請求的客戶端的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 ,得到以下結果 -