JSP 客戶端請求
jsp 客戶端請求
當(dāng)瀏覽器請求一個網(wǎng)頁時,它會向網(wǎng)絡(luò)服務(wù)器發(fā)送一系列不能被直接讀取的信息,因?yàn)檫@些信息是作為http信息頭的一部分來傳送的。您可以查閱http協(xié)議來獲得更多的信息。
下表列出了瀏覽器端信息頭的一些重要內(nèi)容,在以后的網(wǎng)絡(luò)編程中將會經(jīng)常見到這些信息:
信息 | 描述 |
---|---|
accept | 指定瀏覽器或其他客戶端可以處理的mime類型。它的值通常為 image/png 或 image/jpeg |
accept-charset | 指定瀏覽器要使用的字符集。比如 iso-8859-1 |
accept-encoding | 指定編碼類型。它的值通常為 gzip 或compress |
accept-language | 指定客戶端首選語言,servlet會優(yōu)先返回以當(dāng)前語言構(gòu)成的結(jié)果集,如果servlet支持這種語言的話。比如 en,en-us,ru等等 |
authorization | 在訪問受密碼保護(hù)的網(wǎng)頁時識別不同的用戶 |
connection | 表明客戶端是否可以處理http持久連接。持久連接允許客戶端或?yàn)g覽器在一個請求中獲取多個文件。keep-alive 表示啟用持久連接 |
content-length | 僅適用于post請求,表示 post 數(shù)據(jù)的字節(jié)數(shù) |
cookie | 返回先前發(fā)送給瀏覽器的cookies至服務(wù)器 |
host | 指出原始url中的主機(jī)名和端口號 |
if-modified-since | 表明只有當(dāng)網(wǎng)頁在指定的日期被修改后客戶端才需要這個網(wǎng)頁。 服務(wù)器發(fā)送304碼給客戶端,表示沒有更新的資源 |
if-unmodified-since | 與if-modified-since相反, 只有文檔在指定日期后仍未被修改過,操作才會成功 |
referer | 標(biāo)志著所引用頁面的url。比如,如果你在頁面1,然后點(diǎn)了個鏈接至頁面2,那么頁面1的url就會包含在瀏覽器請求頁面2的信息頭中 |
user-agent | 用來區(qū)分不同瀏覽器或客戶端發(fā)送的請求,并對不同類型的瀏覽器返回不同的內(nèi)容 |
httpservletrequest類
request對象是javax.servlet.http.httpservletrequest類的實(shí)例。每當(dāng)客戶端請求一個頁面時,jsp引擎就會產(chǎn)生一個新的對象來代表這個請求。
request對象提供了一系列方法來獲取http信息頭,包括表單數(shù)據(jù),cookies,http方法等等。
接下來將會介紹一些在jsp編程中常用的獲取http信息頭的方法。詳細(xì)內(nèi)容請見下表:
序號 | 方法& 描述 |
---|---|
1 | cookie[] getcookies() 返回客戶端所有的cookie的數(shù)組 |
2 | enumeration getattributenames() 返回request對象的所有屬性名稱的集合 |
3 | enumeration getheadernames() 返回所有http頭的名稱集合 |
4 | enumeration getparameternames() 返回請求中所有參數(shù)的集合 |
5 | httpsession getsession() 返回request對應(yīng)的session對象,如果沒有,則創(chuàng)建一個 |
6 | httpsession getsession(boolean create) 返回request對應(yīng)的session對象,如果沒有并且參數(shù)create為true,則返回一個新的session對象 |
7 | locale getlocale() 返回當(dāng)前頁的locale對象,可以在response中設(shè)置 |
8 | object getattribute(string name) 返回名稱為name的屬性值,如果不存在則返回null。 |
9 | servletinputstream getinputstream() 返回請求的輸入流 |
10 | string getauthtype() 返回認(rèn)證方案的名稱,用來保護(hù)servlet,比如 "basic" 或者 "ssl" 或 null 如果 jsp沒設(shè)置保護(hù)措施 |
11 | string getcharacterencoding() 返回request的字符編碼集名稱 |
12 | string getcontenttype() 返回request主體的mime類型,若未知則返回null |
13 | string getcontextpath() 返回request uri中指明的上下文路徑 |
14 | string getheader(string name) 返回name指定的信息頭 |
15 | string getmethod() 返回此request中的http方法,比如 get,,post,或put |
16 | string getparameter(string name) 返回此request中name指定的參數(shù),若不存在則返回null |
17 | string getpathinfo() 返回任何額外的與此request url相關(guān)的路徑 |
18 | string getprotocol() 返回此request所使用的協(xié)議名和版本 |
19 | string getquerystring() 返回此 request url包含的查詢字符串 |
20 | string getremoteaddr() 返回客戶端的ip地址 |
21 | string getremotehost() 返回客戶端的完整名稱 |
22 | string getremoteuser() 返回客戶端通過登錄認(rèn)證的用戶,若用戶未認(rèn)證則返回null |
23 | string getrequesturi() 返回request的uri |
24 | string getrequestedsessionid() 返回request指定的session id |
25 | string getservletpath() 返回所請求的servlet路徑 |
26 | string[] getparametervalues(string name) 返回指定名稱的參數(shù)的所有值,若不存在則返回null |
27 | boolean issecure() 返回request是否使用了加密通道,比如https |
28 | int getcontentlength() 返回request主體所包含的字節(jié)數(shù),若未知的返回-1 |
29 | int getintheader(string name) 返回指定名稱的request信息頭的值 |
30 | int getserverport() 返回服務(wù)器端口號 |
http信息頭示例
在這個例子中,我們會使用httpservletrequest類的getheadernames()方法來讀取http信息頭。這個方法以枚舉的形式返回當(dāng)前http請求的頭信息。
獲取enumeration對象后,用標(biāo)準(zhǔn)的方式來遍歷enumeration對象,用hasmoreelements()方法來確定什么時候停止,用nextelement()方法來獲得每個參數(shù)的名字。
<%@ 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>碩編程(yapf.com)</title> </head> <body> <h2>http 頭部請求實(shí)例</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,將會得到以下結(jié)果:
您可以在上面代碼中嘗試httpservletrequest類的其它方法。