HttpServletRequest接口是繼承自ServletRequest接口的。增加了和HTTP相關(guān)的一些方法。 而所謂的 request(在JSP中使用的)其實(shí)只是規(guī)范中的一個(gè)名稱而已。它當(dāng)然是一個(gè)對(duì)象,但并不是SUN提供的,這是由各個(gè)不同的Servlet提供商編寫 的,SUN只是規(guī)定這個(gè)類要實(shí)現(xiàn)HttpServletRequest接口,并且規(guī)定了各個(gè)方法的用途,但具體是什么類是由各個(gè)提供商自己決定的。 你可以在JSP中使用out.println(request)來看看這個(gè)類的名字。 ServletRequest getParameter()是接受jsp或是html的值。 getAtrribute()是接受servlet的傳遞值。 ServletRequest里的getServerName()和getLocalName;getSeverPort()和getLocalPort(): 這些方法提供了查詢low-level的IP connections的細(xì)節(jié)和理解connections是如何被路由的一種機(jī)制。getRemotePort()方法與原先存在的 getRemoteAddr()和getRemoteHost()方法組合在一起,用于獲得client端的IP connections。新的getLocalPort(),getLocalAddr()和getLocalPort()方法用于獲得server端的 IP connections。原先存在的getServerName()和getServerPort()方法被重新定義用來獲得HTTP層的細(xì)節(jié),它們解析 HTTP Host頭并返回"主機(jī)名:端口"。在一個(gè)虛擬主機(jī)或用于負(fù)載平衡的系統(tǒng)上,這些方法提供了如何知道有哪些clients,proxies或起負(fù)載平衡作 用的設(shè)備與servlet服務(wù)端通信的方式,而不論是物理上的直接連接還是以一種虛擬的模式進(jìn)行連接。 Request對(duì)象探討 Request 是ASP里的一個(gè)內(nèi)部對(duì)象,用于獲取HTTP請(qǐng)求中傳遞的任意信息(如頭信息、表單數(shù)據(jù)、cookies等等)。所以這是在ASP里面最常用的內(nèi)部對(duì)象, 常用來獲得GET方式提交的數(shù)據(jù)(Request.QueryString)、表單POST提交的數(shù)據(jù)(Request. Form)和Cookies(Request.Cookies)。 我們用Request對(duì)象可以指定獲取某個(gè)特定方式提交的數(shù)據(jù)。比如我們用這段代碼獲得通過POST提交的數(shù)據(jù)lake2的值:request.Form("lake2");而request.queryString("CSDN")獲得GET方式提交的CSDN的值。 對(duì) 于獲取HTTP數(shù)據(jù),ASP還給了我們一個(gè)更簡(jiǎn)單的方法:request(key),即直接使用request而不指定數(shù)據(jù)集合。此時(shí)ASP會(huì)依次在 QueryString、From、Cookies、ServerVariables、ClientCertificate、Browser中檢查匹配的 數(shù)據(jù),若發(fā)現(xiàn)則返回?cái)?shù)據(jù)。 上面6個(gè)集合中,ServerVariables、ClientCertificate和Browser的變量是固定了的;而QueryString、From、Cookies的變量可以任意指定。想不到Cookies可以拿來傳遞任意數(shù)據(jù),以前倒沒有注意。 OK,test一下先。在本地web目錄新建test.asp文件,內(nèi)容為:<%=request("b")%> Step 1:直接訪問http://127.0.0.1/test.asp?b=la<b>k</b>e2,瀏覽器顯示lake2 Step 2:構(gòu)造表單提交結(jié)果也如step 1 Step 3: 構(gòu)造表單,GET傳遞b值為“He”,同時(shí)POST的b為“She”,瀏覽器顯示為“He”。呵呵,按前面的排序有個(gè)優(yōu)先級(jí)的 Step 4:Telnet到本地80端口,構(gòu)造HTTP請(qǐng)求如下(注意Cookies哦): Request和Response對(duì)象 從ASP中能夠應(yīng)用客戶請(qǐng)求和服務(wù)器響應(yīng)的細(xì)節(jié)是通過ASP內(nèi)置的Request和Response對(duì)象來實(shí)現(xiàn)的。 · Request對(duì)象:為腳本提供了當(dāng)客戶端請(qǐng)求一個(gè)頁面或者傳遞一個(gè)窗體時(shí),客戶端提供的全部信息。這包括能指明瀏覽器和用戶的HTTP變量,在這個(gè)域名 下存放在瀏覽器中的cookie,任何作為查詢字符串而附于URL后面的字符串或頁面的<FORM>段中的HTML控件的值。也提供使用 Secure Socket Layer(SSL)或其他加密通信協(xié)議的授權(quán)訪問,及有助于對(duì)連接進(jìn)行管理的屬性。 · Response對(duì)象:用來訪問服務(wù)器端所創(chuàng)建的并發(fā)回到客戶端的響應(yīng)信息。為腳本提供HTTP變量,指明服務(wù)器和服務(wù)器的功能和關(guān)于發(fā)回瀏覽器的內(nèi)容的 信息,以及任何將為這個(gè)域而存放在瀏覽器里新的cookie。它也提供了一系列的方法用來創(chuàng)建輸出,例如無處不在的Response.Write方法。 1、 Request對(duì)象成員的概述 a) Request對(duì)象的集合 對(duì)象調(diào)用方法:Request.Cookies("UserName")=UserName Request對(duì)象提供了5個(gè)集合,可以用來訪問客戶端對(duì)Web服務(wù)器請(qǐng)求的各類信息,這些集合如下表: Request對(duì)象的集合及說明 集合名稱:ClientCertificate 說明:當(dāng)客戶端訪問一個(gè)頁面或其他資源時(shí),用來向服務(wù)器表明身份的客戶證書的所有字段或條目的數(shù)值集合,每個(gè)成員均是只讀 集合名稱:Cookies 說明: 根據(jù)用戶的請(qǐng)求,用戶系統(tǒng)發(fā)出的所有cookie的值的集合,這些cookie僅對(duì)相應(yīng)的域有效,每個(gè)成員均為只讀 集合名稱:Form 說明: METHOD的屬性值為POST時(shí),所有作為請(qǐng)求提交的<FORM>段中的HTML控件單元的值的集合,每個(gè)成員均為只讀 集合名稱:QueryString 說明: 依附于用戶請(qǐng)求的URL后面的名稱/數(shù)值對(duì)或者作為請(qǐng)求提交的且METHOD屬性為GET(或者省略其屬性)的,或<FORM>中所有HTML控件單元的值,每個(gè)成員均為只讀 集合名稱:ServerVariables 說明: 隨同客戶端請(qǐng)求發(fā)出的HTTP報(bào)頭值,以及Web服務(wù)器的幾種環(huán)境變量的值的集合,每個(gè)成員均為只讀 b) Request對(duì)象的屬性 Request對(duì)象唯一的屬性及說明如下表所示,它提供用戶請(qǐng)求的字節(jié)數(shù)量的信息,它很少用于ASP頁,我們通常關(guān)注指定值而不是整個(gè)請(qǐng)求字符串。 屬性:TotlBytes 說明:只讀,返回由客戶端發(fā)出的請(qǐng)求的整個(gè)字節(jié)數(shù)量 c) Request對(duì)象的方法 Request對(duì)象唯一的方法及說明如下表所示,它允許訪問從一個(gè)<FORM>段中傳遞給服務(wù)器的用戶請(qǐng)求部分的完整內(nèi)容。 Request對(duì)象的方法及說明 方法: BinaryRead(count) 說明:當(dāng)數(shù)據(jù)作為POST請(qǐng)求的一部分發(fā)往服務(wù)器時(shí),從客戶請(qǐng)求中獲得count字節(jié)的數(shù)據(jù),返回一個(gè)Variant數(shù)組(或者SafeArray)。如 果ASP代碼已經(jīng)引用了Request.Form集合,這個(gè)方法就不能用。同時(shí),如果用了BinaryRead方法,就不能訪問Request.Form 集合 2、 Response對(duì)象成員概述 a) Response對(duì)象的集合 Response對(duì)象只有一個(gè)集合,如下表所示,該集合設(shè)置希望放置在客戶系統(tǒng)上的cookie的值,它直接等同于Request.Cookies集合。 Response對(duì)象的集合及說明 集合名稱: Cookies 說明:在當(dāng)前響應(yīng)中,發(fā)回客戶端的所有cookie的值,這個(gè)集合為只寫 b) Response對(duì)象的屬性 Response對(duì)象也提供一系列的屬性,可以讀?。ǘ鄶?shù)情況下)和修改,使響應(yīng)能夠適應(yīng)請(qǐng)求。這些由服務(wù)器設(shè)置,我們不需要設(shè)置它們。需要注意的是,當(dāng)設(shè)置某些屬性時(shí),使用的語法可能與通常所使用的有一定的差異。 Response對(duì)象的屬性及說明 屬性:Buuffer=True|False 說 明:讀/寫,布爾型,表明由一個(gè)ASP頁所創(chuàng)建的輸出是否一直存放在IIS緩沖區(qū),直到當(dāng)前頁面的所有服務(wù)器腳本處理完畢或Flush、End方法被調(diào) 用。在任何輸出(包括HTTP報(bào)送信息)送住IIS之前這個(gè)屬性必須設(shè)置。因此在.asp文件中,這個(gè)設(shè)置應(yīng)該<%@LANGUAGE=…%& gt;語句后面的第一行。ASP 3.0缺省設(shè)置緩沖為開(True),而在早期版本中缺省為關(guān)(False) 屬性:CacheControl”setting” 說明:讀/寫,字符型,設(shè)置這個(gè)屬性為“Public”允許代理服務(wù)器緩存頁面,如為“Private”則禁止代理服務(wù)器緩存的發(fā)生 屬性:Charset=”value” 說明:讀/寫,字符型,在由服務(wù)器為每個(gè)響應(yīng)創(chuàng)建的HTTP Content-Type報(bào)頭中附上所用的字符集名稱(例如:ISO-LATIN-7) 屬性:Content Type=”MIME-type” 說明:讀/寫,字符型,指明響應(yīng)的HTTP內(nèi)容類型,標(biāo)準(zhǔn)的MIME類型(例如“text/xml”或者“Image/gif”)。假如缺省,表示使用MIME類型“text/html”,內(nèi)容類型告訴瀏覽器所期望內(nèi)容的類型 屬性:Expires minutes 說明:讀/寫,數(shù)值型,指明頁面有效的以分鐘計(jì)算的時(shí)間長(zhǎng)度,假如用戶請(qǐng)求其有效期滿之前的相同頁面,將直接讀取顯示緩沖中的內(nèi)容,這個(gè)有效期間過后,頁面將不再保留在私有(用戶)或公用(代理服務(wù)器)緩沖中 屬性:Expires Absolute #date [time]# 說明:讀/寫,日期/時(shí)間型,指明當(dāng)一個(gè)頁面過期和不再有效時(shí)的絕對(duì)日期和時(shí)間 屬性:IsClientConnected 說明:只讀,布爾型,返回客戶是否仍然連接和下載頁面的狀態(tài)標(biāo)志。在當(dāng)前的頁面已執(zhí)行完畢之前,假如一個(gè)客戶轉(zhuǎn)移到別一個(gè)頁面,這個(gè)標(biāo)志可用來中止處理(使用Response.End方法) 屬性:PICS(“PICS-Label-string”) 說明:只寫,字符型,創(chuàng)建一個(gè)PICS報(bào)頭定義頁面內(nèi)容中的詞匯等級(jí),如暴力、性、不良語言等 屬性:Status=”Code message” 說明:讀/寫,字符型,指明發(fā)回客戶的響應(yīng)的HTTP報(bào)頭中表明錯(cuò)誤或頁面處理是否成功的狀態(tài)值和信息。例如“200 OK”和“404 Not Found” c) Response對(duì)象的方法 Response對(duì)象提供一系列的方法,如下表所示,允許直接處理為返回給客戶端而創(chuàng)建的頁面內(nèi)容。 Response對(duì)象的方法及說明 方法:AddHeader(“name”,”content”) 說明:通過使用name和Content值,創(chuàng)建一個(gè)定制的HTTP報(bào)頭,并增加到響應(yīng)之中。不能替換現(xiàn)有的相同名稱的報(bào)頭。一旦已經(jīng)增加了一個(gè)報(bào)頭就不能被刪除。這個(gè)方法必須在任何頁面內(nèi)容(即text和HTML)被發(fā)住客戶端前使用 方法:AppendToLog(“string”) 說明:當(dāng)使用“W3C Extended Log File Format”文件格式時(shí),對(duì)于用戶請(qǐng)求的Web服務(wù)器的日志文件增加一個(gè)條目。至少要求在包含頁面的站點(diǎn)的“Extended Properties”頁中選擇“URL Stem” 方法:BinaryWrite(safeArray) 說明:在當(dāng)前的HTTP輸出流中寫入Variant類型的SafeArray,而不經(jīng)過任何字符轉(zhuǎn)換。對(duì)于寫入非字符串的信息,例如定制的應(yīng)用程序請(qǐng)求的二進(jìn)制數(shù)據(jù)或組成圖像文件的二進(jìn)制字節(jié),是非常有用的 方法:Clear() 說明:當(dāng)Response.Buffer為True時(shí),從IIS響應(yīng)緩沖中刪除現(xiàn)存的緩沖頁面內(nèi)容。但不刪除HTTP響應(yīng)的報(bào)頭,可用來放棄部分完成的頁面 方法:End() 說明:讓ASP結(jié)束處理頁面的腳本,并返回當(dāng)前已創(chuàng)建的內(nèi)容,然后放棄頁面的任何進(jìn)一步處理 方法:Flush() 說明:發(fā)送IIS緩沖中所有當(dāng)前緩沖頁給客戶端。當(dāng)Response.Buffer為True時(shí),可以用來發(fā)送較大頁面的部分內(nèi)容給個(gè)別的用戶 方法:Redirect(“url”) 說明:通過在響應(yīng)中發(fā)送一個(gè)“302 Object Moved”HTTP報(bào)頭,指示瀏覽器根據(jù)字符串url下載相應(yīng)地址的頁面 方法:Write(“string”) 說明:在當(dāng)前的HTTP響應(yīng)信息流和IIS緩沖區(qū)寫入指定的字符,使之成為返回頁面的一部分 |
|