JSP 用戶端請求
當瀏覽器要求一個網頁時,它會向網頁伺服器發送一系列無法直接讀取的訊息,因為這些訊息是作為HTTP訊息頭的一部分來傳送的。您可以查閱HTTP協定來獲得更多的資訊。
下表列出了瀏覽器端資訊頭的一些重要內容,在以後的網路程式設計中將會經常見到這些資訊:
訊息 | 說明 |
---|---|
Accept | 指定瀏覽器或其他用戶端可以處理的MIME類型。它的值通常為 image/png 或 image/jpeg |
指定瀏覽器要使用的字元集。如 ISO-8859-1 | |
指定編碼類型。它的值通常為 | gzip 或compress |
指定客戶端首選語言,servlet會優先傳回以目前語言構成的結果集,如果servlet支援這種語言的話。如 en,en-us,ru等等 | |
在造訪受密碼保護的網頁時辨識不同的使用者 | |
表示客戶端是否可以處理HTTP持久連線。持久連線允許客戶端或瀏覽器在一個請求中取得多個檔案。Keep-Alive 表示啟用持久連線 | |
Content-Length | 僅適用於POST請求,表示 POST 資料的位元組數 |
Cookie | 回傳先前寄給瀏覽器的cookies至伺服器 |
Host | 指出原始URL中的主機名稱和連接埠號碼 |
If-Modified-Since | 表示只有當網頁在指定的日期被修改後客戶端才需要這個網頁。 伺服器寄304碼給客戶端,表示沒有更新的資源 |
If-Unmodified-Since | 與If-Modified-Since相反, 只有文件在指定日期後仍未被修改過,操作才會成功 |
Referer | 標誌著所引用頁面的URL。例如,如果你在頁面1,然後點了個連結至頁2,那麼頁面1的URL就會包含在瀏覽器請求頁2的資訊頭中 |
User-Agent | 用來區分不同瀏覽器或用戶端發送的請求,並對不同類型的瀏覽器傳回不同的內容 |
HttpServletRequest類別
request物件是javax.servlet.http.HttpServletRequest類別的實例。每當客戶端請求一個頁面時,JSP引擎就會產生一個新的物件來代表這個請求。
request物件提供了一系列方法來取得HTTP資訊頭,包括表單數據,cookies,HTTP方法等等。
接下來將會介紹一些在JSP程式設計中常用的取得HTTP資訊頭的方法。詳細內容請見下表:
序號 | #方法##& 說明 |
---|---|
Cookie[] getCookies()
| |
Enumeration getAttributeNames()
| |
Enumeration getHeaderNames()
| |
Enumeration getParameterNames()
| |
HttpSession getSession()
| |
HttpSession getSession(boolean create)
| |
Locale getLocale()
| |
Object getAttribute(String name)
| |
ServletInputStream getInputStream()
| |
10 | String getAuthType() |
11 | String getCharacterEncoding() |
12 | String getContentType() |
13 | String getContextPath() |
14 | String getHeader(String name) |
15 | String getMethod() |
# 16 | String getParameter(String name) |
17 | String getPathInfo() |
18 | String getProtocol() |
19 | String getQueryString() |
20 | String getRemoteAddr() |
21 | String getRemoteHost() |
22 | String getRemoteUser() |
23 | String getRequestURI() |
24 | String getRequestedSessionId() |
25 | String getServletPath() |
26 | String[] getParameterValues(String name) |
27 | boolean isSecure() |
28 | int getContentLength() |
29 | int getIntHeader(String name) |
30 | int getServerPort() |
HTTP訊息頭範例
在這個範例中,我們會使用HttpServletRequest類別的getHeaderNames()方法來讀取HTTP訊息頭。這個方法以枚舉的形式傳回目前HTTP請求的頭資訊。
取得Enumeration物件後,用標準的方式來遍歷Enumeration對象,用hasMoreElements()方法來決定什麼時候停止,用nextElement()方法來取得每個參數的名字。
<%@ page language="java" contentType="text/html; charset=UTF-8" pageEncoding="UTF-8"%> <%@ page import="java.io.*,java.util.*" %> <!DOCTYPE html> <html> <head> <meta charset="utf-8"> <title>php中文网(php.cn)</title> </head> <body> <h2>HTTP 头部请求实例</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> </body> </html>
訪問main.jsp,將會得到以下結果:
#您可以在上面程式碼中嘗試HttpServletRequest類別的其它方法。