JSP 用戶端請求


當瀏覽器要求一個網頁時,它會向網頁伺服器發送一系列無法直接讀取的訊息,因為這些訊息是作為HTTP訊息頭的一部分來傳送的。您可以查閱HTTP協定來獲得更多的資訊。

下表列出了瀏覽器端資訊頭的一些重要內容,在以後的網路程式設計中將會經常見到這些資訊:

##                    Accept-Charset                    指定瀏覽器要使用的字元集。如 ISO-8859-1                    Accept-Encoding                    指定編碼類型。它的值通常為                     Accept-Language                    指定客戶端首選語言,servlet會優先傳回以目前語言構成的結果集,如果servlet支援這種語言的話。如 en,en-us,ru等等                    Authorization                    在造訪受密碼保護的網頁時辨識不同的使用者                    Connection                    表示客戶端是否可以處理HTTP持久連線。持久連線允許客戶端或瀏覽器在一個請求中取得多個檔案。Keep-Alive 表示啟用持久連線
訊息說明
                    Accept                    指定瀏覽器或其他用戶端可以處理的MIME類型。它的值通常為 image/png 或 image/jpeg
gzip 或compress
                    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資訊頭的方法。詳細內容請見下表:

                    1                    2                    3                    4                    5                    6                    7                    8                    9
序號#方法##& 說明
Cookie[] getCookies()


傳回客戶端所有的Cookie的陣列

Enumeration getAttributeNames()


傳回request物件的所有屬性名稱的集合

Enumeration getHeaderNames()


回傳所有HTTP頭的名稱集合

Enumeration getParameterNames()


回傳請求中所有參數的集合

HttpSession getSession()


傳回request對應的session對象,如果沒有,則建立一個

HttpSession getSession(boolean create)


傳回request對應的session對象,如果沒有且參數create為true,則傳回一個新的session物件

Locale getLocale()


# 返回目前頁的Locale對象,可在response中設定

Object getAttribute(String name)


傳回名稱為name的屬性值,如果不存在則傳回null。

ServletInputStream getInputStream()


回傳請求的輸入流

                    10String getAuthType()


# 回傳認證方案的名稱,用來保護servlet,例如 "BASIC" 或 "SSL" 或 null 如果 JSP沒有設定保護措施
                    11String getCharacterEncoding()


回傳request的字元編碼集名稱
                    12String getContentType()


# 傳回request主體的MIME類型,若未知則回傳null
                    13String getContextPath()


# 返回request URI中所指明的上下文路徑
                    14String getHeader(String name)


# 回傳name指定的資訊頭
                    15String getMethod()


# 回此request中的HTTP方法,如 GET,,POST,或PUT
#                    16String getParameter(String name)


# 傳回此request中name指定的參數,若不存在則回傳null
                    17String getPathInfo()


# 返回任何額外的與此request URL相關的路徑
                    18String getProtocol()


# 回傳此request所使用的協定名稱及版本
                    19String getQueryString()


# 回傳此 request URL所包含的查詢字串
                    20String getRemoteAddr()


回傳客戶端的IP位址
                    21String getRemoteHost()


# 回傳客戶端的完整名稱
                    22String getRemoteUser()


# 返回用戶端通過登入認證的用戶,若用戶未認證則回傳null
                    23String getRequestURI()


# 回request的URI
                    24String getRequestedSessionId()


回傳request指定的session ID
                    25String getServletPath()


# 返回所請求的servlet路徑
                    26String[] getParameterValues(String name)


傳回指定名稱的參數的所有值,若不存在則回傳null
                    27boolean isSecure()


# 回傳request是否使用了加密頻道,例如HTTPS
                    28int getContentLength()


# 傳回request主體所包含的位元組數,若未知的回傳-1
                    29int getIntHeader(String name)


# 傳回指定名稱的request訊息標頭的值
                    30int 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,將會得到以下結果:

jspheadmsg.jpg

#您可以在上面程式碼中嘗試HttpServletRequest類別的其它方法。