JSP的客戶端請求


以下內容引用自http://wiki.jikexueyuan.com/project/jsp/client-request.html

當瀏覽器請求一個網頁時,它向Web服務器發送大量的信息,信息不能直接閱讀,因為這些信息作為HTTP請求標題的一部分行進。

以下是來自瀏覽器端的重要的標題,在網絡編程中將會頻繁的使用:

標題 描述
Accept 該標題指定了瀏覽器或其他客戶可以處理的MIME類型。image/png或image/jpeg的值是兩種最常見的可能性。
Accept-Charset 該標題指定了瀏覽器可以用來顯示信息的字符集。例如iso-8859-1。
Accept-Encoding 這個標題指定了瀏覽器知道如何處理的編碼類型。gzip或compressare的值是兩種最常見的可能性。
Accept-Language 這個標題指定客戶的首選語言,以防Servlet可以產生多個語言的結果。例如英語,美語,俄語等。
Authorization 這個標題是客戶訪問密碼保護的Web頁面時用來識別他們自己的。
Connection 這個標題表明客戶端是否能處理持續的HTTP連接。持續連接允許客戶端或其他瀏覽器用單個請求檢索多個文件。Keep-Alive的值意味着應該使用持續連接
Content-Length 該標題只適用於POST請求和以字節形式給出POST數據的大小。
Cookie 這個標題為之前發送它們到瀏覽器的服務器返回Cookies。
Host 這個標題指定主機和端口正如原始URL給出的一樣。
If-Modified-Since 這個標題表明,客戶只想得到在指定日期后更改的頁面。服務器發送一個代碼,304意味着沒有修改標題如果沒有更新的結果是可用的。
If-Unmodified-Since 這個標題的作用與if-modified–since是相反的;它指定當且僅當文檔比指定的日期要早時,操作應該成功。
Referer 這個標題表示了引用的Web頁面的URL。例如,如果在Web頁面1,點擊一個鏈接到Web頁面2,當瀏覽器請求Web頁面2時,Web頁面1的URL是包含在引用標題中的。
User-Agent 這個標題標識瀏覽器或其他做出請求的客戶,對應不同類型的瀏覽器可以返回不同的內容。

一、HttpServletRequest對象

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

請求對象提供方法來獲取HTTP標題信息,包括表單數據,Cookies,HTTP方法等。

有以下重要的方法可用於讀取JSP程序中的HTTP標題。有了HttpServletRequest對象,這些方法都可用的,該對象代表客戶端對網絡服務器的請求。

方法 描述

Cookie[] getCookies()

返回一個數組,其中包含客戶端用這個請求發送的所有Cookie對象。

Enumeration getAttributeNames()

返回一個枚舉包含此請求可用的屬性的名稱。

Enumeration getHeaderNames()

返回一個這個請求包含的所有標題名稱的枚舉。

Enumeration getParameterNames()

返回一個字符串對象的枚舉,該字符串對象包括包含在此請求中的參數的名稱。

HttpSession getSession()

返回與此請求相關的當前會話,或者如果該請求沒有會話,那么就創建一個。

HttpSession getSession(boolean create)

返回與這個請求相關的當前的HttpSession或,如果沒有當前會話並且create為真,那么返回一個新的會話。

Locale getLocale()

返回客戶會接受內容的首選區域設置,基於所包含的accept–language標題

Object getAttribute(String name)

作為一個對象返回指定屬性的值,如果指定的名稱沒有屬性,返回null。

ServletInputStream getInputStream()

使用ServletInputStream將請求的主體作為二進制數據檢索。

String getAuthType()

返回用於保護Servlet的驗證方案的名稱,例如,“BASIC”或“SSL”,如果JSP沒有被保護,那么返回null

String getCharacterEncoding()

返回在該請求內部使用的字符編碼的名稱。

String getContentType()

返回該請求主體的MIME類型,如果不知道類型,返回null。

String getContextPath()

返回表示請求上下文的請求URI的一部分。

String getHeader(String name)

將指定的請求標題的值作為一個字符串返回。

String getMethod()

返回生成該請求的HTTP方法的名稱,比如GET,POST,或PUT。

String getParameter(String name)

將一個請求參數的值作為字符串返回,如果參數不存在,返回null。

String getPathInfo()

返回與客戶端生成請求時發送的URL相關聯的任何額外的路徑信息。

String getProtocol()

返回請求協議的名稱和版本。

String getQueryString()

返回在路徑后包含在請求URL的查詢字符串。

String getRemoteAddr()

返回發送請求的客戶端的互聯網協議(IP)地址。

String getRemoteHost()

返回發送請求的客戶機的全稱。

String getRemoteUser()

如果用戶已經通過身份驗證,就返回發出這一請求的登錄用戶,如果用戶沒有被驗證,那么返回null。

String getRequestURI()

從取決於HTTP請求首行的查詢字符串的協議名稱中返回請求URL的一部分。

String getRequestedSessionId()

返回客戶端指定的會話ID。

String getServletPath()

返回調用JSP的請求URL的部分。

String[] getParameterValues(String name)

返回一個字符串對象數組,其中包含所有的給定的請求參數的值,如果參數不存在,那么返回null。

boolean isSecure()

返回一個布爾值表示是否使用一個安全通道發出了這個請求,比如HTTPS。

int getContentLength()

以字節為單位,返回請求的主體長度並通過輸入流使其可用,如果長度是未知的,那么返回-1。

int getIntHeader(String name)

作為int返回指定請求標題的值。

int getServerPort()

返回收到這個請求的端口號。

二、HTTP標題請求實例

下面是使用HttpServletRequest的getHeaderNames()方法讀取HTTP標題信息的實例。該方法返回一個枚舉,包含與當前HTTP請求相關的標題信息。

一旦得到一個枚舉,可以以標准的方式循環枚舉,使用hasMoreElements()方法來確定何時停止,使用nextElement()方法得到每個參數的名字。

<%@ page import="java.io.*,java.util.*" %>
<html>
<head>
<title>HTTP Header Request Example</title>
</head>
<body>
<center>
<h2>HTTP Header Request Example</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>
</center>
</body>
</html>

現在把上述代碼添加到main.jsp中並試圖訪問它。這將產生的如下所示的結果:

 

測試工程:https://github.com/easonjim/5_java_example/tree/master/jspbasics/test4


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM