付費(fèi)下載
下載本文檔
版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
第2 上一章介紹了安裝設(shè)置的一些基本問題和ASP的使用,以及其所提供的內(nèi)置對(duì)象。本章將進(jìn)一步研究?jī)蓚€(gè)最常用的對(duì)象。在瀏覽器(或其他用戶)和Web服務(wù)器之間,請(qǐng)求與響應(yīng)中發(fā)生的信息交流可以通過ASP中的兩個(gè)內(nèi)置對(duì)象來進(jìn)行和管理,這兩個(gè)對(duì)象稱為在ASP頁中所要進(jìn)行的工作幾乎都要這兩個(gè)對(duì)象,使用這兩個(gè)對(duì)象的方式將影響頁面的效率及可靠性。當(dāng)然,它們的主要用途是用戶發(fā)回到服務(wù)器的值,即從HTML頁的<FORM>段獲得或附在URL后面作為查詢字符串,并創(chuàng)建合適的輸出返回給用戶,且它們可以享多同因例兩對(duì)都使在戶計(jì)機(jī)的 。(每個(gè)對(duì)象一部分),并且首先從客戶端與服務(wù)器之如何讀入或創(chuàng) 服務(wù)器的變量是什么?如何和修改HTTP報(bào)頭首先看一下客戶瀏覽器(或“用戶”)和ASP的Web服務(wù)器之間交流的情況當(dāng)瀏覽器或其他的用戶eb站點(diǎn)請(qǐng)求頁面時(shí),在客戶服務(wù)器和eb服務(wù)器之間就產(chǎn)生了一個(gè),仔細(xì)研究這個(gè)問題,因?yàn)槔斫膺@個(gè)問題有助于掌握使用ASPReqet和epone對(duì)象的基本知識(shí),進(jìn)而才能進(jìn)一步掌握的知。住的是,能夠Web頁面的應(yīng)用程序絕不僅只有瀏覽器,有許多特殊的應(yīng)用程序從站點(diǎn)上網(wǎng)頁,如為那些視力有缺陷用戶設(shè)計(jì)的特殊的客戶端程序或者是用通常的瀏面考慮這些因素,包括普通的Web瀏覽器,準(zhǔn)確的詞匯應(yīng)該是用戶(useragent)。當(dāng)一個(gè)瀏覽器向eb站點(diǎn)提出頁面請(qǐng)求時(shí),顯然必須告訴服務(wù)器,其請(qǐng)求的是哪一個(gè)頁面。首先要做的是通過與服務(wù)器建立連接,然后提供所請(qǐng)求頁面的全路徑和名稱。為什e(一章介紹ASP如何做到這點(diǎn))這就意味著每當(dāng)服務(wù)器完成向客戶發(fā)送頁面后,服務(wù)器就徹底忘記了這個(gè)客戶。因此,當(dāng)客戶請(qǐng)求下一個(gè)頁面時(shí),與一個(gè)新的者是完全相同的。服務(wù)器無法記住這個(gè)客戶,相應(yīng)的,也就無法判斷它們上次請(qǐng)求的頁面是哪一個(gè)。因此,不能使用相對(duì)路徑來提供一個(gè)頁面,即使頁面包含一個(gè)相對(duì)的也不行,例如:瀏覽器將自動(dòng)建立完整的新頁面的URL<HEAD>段中的<BASE>元素,告訴瀏覽器一個(gè)頁面中所有的基URL是什么。例如當(dāng)把鼠標(biāo)指向一個(gè)頁面的時(shí),可在瀏覽器的狀態(tài)欄中看到如圖2-1所示的情況。當(dāng)前頁面的路徑和當(dāng)前或基已經(jīng)與請(qǐng)求的頁面名結(jié)合在
所請(qǐng)求頁面的全路徑和名稱的組合是瀏覽器請(qǐng)求頁面時(shí)發(fā)往服務(wù)器的唯一信息。瀏覽器的請(qǐng)求也能包含瀏覽器宿主的信息和客戶端運(yùn)行的操作系統(tǒng)。實(shí)際的信息內(nèi)容將隨著瀏覽器的不同有相的變,只很少部分夠由他應(yīng)用程如搜引擎robot提供。為了更清楚地了解該信息,下面是從IE5.0發(fā)出的一個(gè)對(duì)頁面http:// .com/StoreDownload.asp的請(qǐng)求信息:從中以出這信中關(guān)用和戶的細(xì)節(jié)(如缺省的語言),也能夠接受的文件或應(yīng)用程序類型列表,這些是MIME類型的,在后面將會(huì)見到。瀏覽器能夠接受幾種圖像文件及多種 Office如text/html和text/text沒有列在其中。文件列表中*/*表示可向?yàn)g覽器發(fā)回任何類型的文件,由瀏覽器解釋或通過一個(gè)插件(plug-in)應(yīng)用程序來進(jìn)行解釋。:條目包含的存放在客戶端的計(jì)算機(jī)上,并僅對(duì)該域有效。假如請(qǐng)求是點(diǎn)擊的結(jié)果,而不是在瀏覽器的地址欄直接輸入U(xiǎn)RL,則Referer:條目被顯示,它包含了鏈因?yàn)樗鼈兺ㄟ^ISP連接時(shí),IP地址是動(dòng)態(tài)分配的,或者通過一個(gè)服務(wù)器連接時(shí),為響應(yīng)上述的請(qǐng)求,并對(duì)的瀏覽器(即用戶不必提供用戶名和口令)提供請(qǐng)求的可以看出服務(wù)器向客戶端說明自己所用的軟件及版本,第一行表明所使用的是HTTP及返回碼的狀態(tài)。信息“200OK”表示請(qǐng)求被接受并得到了滿足。后面的信息是被返回的頁面的細(xì)節(jié),包括MIME類型(Content-Length:)、大小(字節(jié))、最近更改的時(shí)間,和返回客戶端的。響應(yīng)中的其他信息是頁面內(nèi)容的信息流。在某些情況下,服務(wù)器響應(yīng)一個(gè)請(qǐng)求后,不能返回一個(gè)頁面,也許因?yàn)轫撁娌淮嬖冢蛘呖蛻魶]有相應(yīng)權(quán)限來它。在本書后續(xù)章節(jié)討論安全問題。現(xiàn)在,對(duì)于請(qǐng)求頁面不存在的情況(例如用戶在瀏覽器的地址欄輸入了錯(cuò)誤的URL),返回的信息開頭為:這里,狀態(tài)碼和信息表明客戶請(qǐng)求的頁面無法找到。瀏覽器可使用這個(gè)信息向用戶顯示相應(yīng)的信息(這種情況在IE5.0中不顯示服務(wù)器的響應(yīng)信息,而顯示相應(yīng)“幫助性”的錯(cuò)誤提示頁面),也可顯示服務(wù)器創(chuàng)建的缺省頁面(依賴于服務(wù)器的設(shè)置)。至此,我們已經(jīng)看到了客戶機(jī)與服務(wù)器交互作用中的一些細(xì)節(jié),下面介紹ASP對(duì)象Request和Response在ASP中能夠應(yīng)用客戶請(qǐng)求和服務(wù)器響應(yīng)的細(xì)節(jié)是通過ASP內(nèi)置的Request和Response對(duì)Request對(duì)象:為提供了當(dāng)客戶端請(qǐng)求一個(gè)頁面或者傳遞一個(gè)窗體時(shí),客戶端提供的全部信息。這包括能明瀏覽器和用戶的HTTP變量,在這個(gè)下存放在瀏覽器中的 ,任何作為查詢字符串而附于URL后面的字符串或頁面的<FORM>段中的HTMLecureSocketLayer(SL)或其他加密通信協(xié)議的,及有助于對(duì)連接進(jìn)行管理的屬性。Response對(duì)象:用來服務(wù)器端所創(chuàng)建的并發(fā)回到客戶端的響應(yīng)信息。為提供HTTP變量,指明服務(wù)器和服務(wù)器的功能和關(guān)于發(fā)回瀏覽器的內(nèi)容的信息以及任何將為這個(gè)域而存放在瀏覽器里新的。它也提供了一系列的方法用來創(chuàng)建輸出,例如無處不在的Repone.rit方法。在這一節(jié)中,首先概述Request和Response對(duì)象的成員,然后繼續(xù)探討如何使用它們完成創(chuàng)建任務(wù),以及如何使用每個(gè)對(duì)象的成員的細(xì)節(jié)。RequestRequest對(duì)象提供了5個(gè)集合,可以用來客戶端對(duì)Web服務(wù)器請(qǐng)求的各類信息,這些集表2- 集合名 Client當(dāng)客戶端一個(gè)頁面或其他資源時(shí),用來向服務(wù)器表明的客戶的所s 根據(jù)用戶的請(qǐng)求,用戶系統(tǒng)發(fā)出的所有的值的集合,這些僅對(duì)相應(yīng)的域有效,每個(gè)成員均為只讀m HOD的屬性值為OS時(shí),所有作為請(qǐng)求提交的<OR>段中的HL控QueryString 依附于用戶請(qǐng)求的URL后面的名稱/數(shù)值對(duì)或者作為請(qǐng)求提交的且METHOD屬性值為GET(或者省略其屬性)的,或<FORM>中所有HTML控件單元的值,每個(gè)成員均為只讀evrVras 隨同客戶端請(qǐng)求發(fā)出的HTP報(bào)頭值,以及eb服務(wù)器的幾種環(huán)境變量的值的集合,每個(gè)成員均為只讀Request2-2所示,它提供關(guān)于用戶請(qǐng)求的字節(jié)數(shù)量的信息,它很表2- 只讀,返回由客戶端發(fā)出的請(qǐng)求的整個(gè)字節(jié)Request對(duì)象唯一的方法及說明如表2-3所示,它允許從一個(gè)<FORM>段中傳遞給服務(wù)表2- BinaryRead(coun) 當(dāng)數(shù)據(jù)作為POST請(qǐng)求的一部分發(fā)往服務(wù)器時(shí),從客戶請(qǐng)求中獲得count字節(jié)的數(shù)據(jù),返回一個(gè)ariant數(shù)組(或者SafeArray)。如果ASP代碼已經(jīng)了Request.Form集合,這個(gè)方法就不能用。同樣,如果用了 BinaryRead方法,就不能Request.Form集合ResponseResponse對(duì)象只有一個(gè)集合,如表2-4所示,該集合設(shè)置希望放置在客戶系統(tǒng)上的 表2- 集合名 在當(dāng)前響應(yīng)中,發(fā)回客戶端的所 的值,這個(gè)集合為只Response對(duì)象也提供一系列的屬性,可以(多數(shù)情況下)和修改,響應(yīng)能夠適應(yīng)請(qǐng)。這些由服務(wù)器設(shè)置,我們不需要設(shè)置它們。需要注意的是,當(dāng)設(shè)置某些屬性時(shí),使用的語法2-5所示。表2- 讀/寫,布爾型,表明由一個(gè)ASP頁所創(chuàng)建的輸出是否一直存放在IIS直到當(dāng)前頁面的所有服務(wù)器處理完畢或Flush、End方法被調(diào)用。在任何輸出(包括HTTP報(bào)頭信息)送往IIS之前這個(gè)屬性必須設(shè)置。因此在.asp文件中,這個(gè)設(shè)置應(yīng)該在<%@LANGUAGE=...%>語句后面的第一行。ASP3.0缺省設(shè)置緩沖為開(rue),而在早期版本中缺省為關(guān)(False)CacheConrol"seg" /寫,字符型,設(shè)置這個(gè)屬性為“ Publc”允許服務(wù)器緩存頁面,如為“Prvae”則 服務(wù)器緩存的發(fā)生。 讀/寫,字符型,在由服務(wù)器為每個(gè)響應(yīng)創(chuàng)HTTPContent-Type報(bào)頭中附上所用的字符集名稱(例如ISO-LATIN-7)ContentType="MIME- 讀/寫,字符型,指明響應(yīng)的HTTP內(nèi)容類型,標(biāo)準(zhǔn)的MIME類型(“exxml”或者“Imagegf”)。假如省略,表示使用IM類型“exhml”,xpresmues 讀寫,數(shù)值型,指明頁面有效的以分鐘計(jì)算的時(shí)間長(zhǎng)度,假如用戶請(qǐng)求其有效期滿之前的相同頁面,將直接顯示緩沖中的內(nèi)容,這個(gè)有效期間過后,頁面將不再保留在私有(用戶)或公用(服務(wù)器)緩沖中ExpiresAbsolute 讀/寫,日期/時(shí)間型,指明當(dāng)一個(gè)頁面過期和不再有效時(shí)的絕對(duì)日期和時(shí) 只讀,布爾型,返回客戶是否仍然連接和頁面的狀態(tài)標(biāo)志。在當(dāng)前頁面已執(zhí)行完畢之前,假如一個(gè)客戶轉(zhuǎn)移到另一個(gè)頁面,這個(gè)標(biāo)志可用來中止處理(使用Response.End方法)PICS("PICS-Label- 只寫,字符型,創(chuàng)建一個(gè)PICS報(bào)頭并將之加到響應(yīng)中的HTTP報(bào)頭PICS報(bào)頭定義頁面內(nèi)容中的詞匯等級(jí),如、性、不良語言Status="Code 讀/寫,字符型,指明發(fā)回客戶的響應(yīng)的HTTP報(bào)頭中表明錯(cuò)誤或頁面處是否成功的狀態(tài)值和信息200OK”和“404Not最后,Response對(duì)象提供一系列的方法,如表2-6所示,允許直接處理為返給客戶端而創(chuàng)表2- 通過使用name和Content值,創(chuàng)建一個(gè)定制的HTTP報(bào)頭,并增加中。不能替換現(xiàn)有的相同名稱的報(bào)頭。一旦已經(jīng)增加了一個(gè)報(bào)頭就不能被刪除。這個(gè)方法必須在任何頁面內(nèi)容(即text和HTML)被發(fā)往客戶端前使用 當(dāng)使W3CExtendedLogFileFormat”文件格式時(shí),對(duì)于用戶請(qǐng)求Web服務(wù)器的日志文件增加一個(gè)條目至少要求在包含頁面的站點(diǎn)的“ExtendedProperties”頁中選擇“URIStem” 在當(dāng)前的HTTP輸出流中寫入Variant類型的SafeArray,而不經(jīng)過任何轉(zhuǎn)換。對(duì)于寫入非字符串的信息,例如定制的應(yīng)用程序請(qǐng)求的二進(jìn)制數(shù)據(jù)或組成圖像文件的二進(jìn)制字節(jié),是非常有用的
(續(xù)Car 當(dāng)ResponseBuffer為rue時(shí),從II響應(yīng)緩沖中刪除現(xiàn)存的緩沖頁面內(nèi)容。但不刪除HP響應(yīng)的報(bào)頭,可用來放棄部分完成的頁面End() 讓ASP結(jié)束處理頁面的,并返回當(dāng)前已創(chuàng)建的內(nèi)容,然后放棄頁面的任何進(jìn)一步處理uh 發(fā)送IIS緩沖中所有當(dāng)前緩沖頁給客戶端。當(dāng)Responsebuffer為rue時(shí),可Rdecr) 通過在響應(yīng)中發(fā)送一個(gè)“302Obectoved”H報(bào)頭,指示瀏覽器根據(jù)字符串url相應(yīng)地址的頁面rsrg) 在當(dāng)前的HTP響應(yīng)信息流和II緩沖區(qū)寫入指定的字符,使之成為返回頁Request和Response對(duì)象提供的屬性、方法和集合。在從WroxWeb站點(diǎn) 使用Form和QueryString當(dāng)用戶填寫頁面<FORM>內(nèi)容時(shí)所提供的全部值,或在瀏覽器地址欄輸入在URL后的值,通過Form和QueryString集合為ASP所用。這是在ASP代碼中值的一種簡(jiǎn)單方法。ASP大多數(shù)ASP集合與在VB中見到的普通集合相差不多。實(shí)際上,它們是值的數(shù)組,但能通過使用一個(gè)文本字符串鍵(對(duì)大小寫不敏感)以及一個(gè)整型索引進(jìn)行。因此,假如客戶端eb頁面包含的<FORM>如下:可通過ASP的Form集合來其控件內(nèi)的值也可使用窗體中控件的整型索引,索引的范圍從在HTML中第一個(gè)定義的控件開始,然HTML中的控件發(fā)生了變化,或者插入一個(gè)新的控件,則ASP代碼將得到錯(cuò)誤的值。進(jìn)一步而言,對(duì)于閱讀代碼的人來講,極容易??梢酝ㄟ^集合把整個(gè)Form上的一系列值變成單個(gè)的字符變量,且不用提供鍵或索引。(=控件值),并且每一對(duì)名稱/值相互之間是用符號(hào)“&”相分隔的。假如打算把窗體中的內(nèi)容傳遞單獨(dú)的希望得到值的標(biāo)準(zhǔn)格式的可執(zhí)行應(yīng)用程序或DLL,這個(gè)技術(shù)是很有用的。然而,一般說來,都是通過以窗體中控件名稱為文本鍵來集合中的內(nèi)容。遍歷一個(gè)ASP有兩種方式遍歷一個(gè)ASP集合中的所有成員,方式與普通VB集合的基本相同。每個(gè)集合提供一個(gè)Count屬性,返回的是集合中條目數(shù)量。可通過使用一個(gè)整型索引使用count屬性來然而,更好的方法是使用ForEach...Next結(jié)構(gòu)。 注意,一些瀏覽器返回到ASP的<FORM>值可ASPHTML定義中有在FormOtherHobby”創(chuàng)建一個(gè)條目。然而,它將包括從三個(gè)文本框中得到的值。假如在提交時(shí),用戶留下了一個(gè)或多個(gè)為空,則返回的值為空字符串。假如用戶在第一和第三個(gè)文本框分別輸入Gardening和Mountaineering,第二個(gè)文本框?yàn)榭?,在我們的ASP代碼中Requet.orm(“OtherHobby”),將返回字符串: 對(duì)于前面的包含三個(gè)OtherHobby控件的窗體實(shí)例HTML中的單選或選項(xiàng)按扭控件在HTML中,需要給幾個(gè)控件相同的Name屬性的情況是單選(或選項(xiàng))按鈕瀏覽器只能發(fā)送所選擇控件的值。因此,假如這個(gè)窗體的用戶已經(jīng)選擇了“Europe”,將得到假如省略了VALUE屬性,瀏覽器將返回的值為“on”,因此將得到:VALUEHTML當(dāng)一個(gè)窗體中HTML源碼包含一個(gè)復(fù)選框控件時(shí),一般都給定唯一的名稱,例如: (加標(biāo)記),遍歷如果除第三個(gè)復(fù)選框外,全部提交,在Request.Form集合假如編寫更復(fù)雜一些集合遍歷代碼,如先前所述需要注意的是兩種情況,沒有選中的控件根本不返回任何值。在第一種情況的結(jié)果里,沒有期騙性的逗號(hào),第二種情況也沒有空值。這與上述的使用文本框的相當(dāng)?shù)臏y(cè)試的結(jié)果不一樣。使用文本框時(shí),每個(gè)文本框都返回一個(gè)值,即使是一個(gè)空字符串。這是瀏覽器造成這樣的結(jié)果。因此在ASP代碼中集合時(shí),要注意這個(gè)問題。上述情況一個(gè)棘手的負(fù)作用是使用復(fù)選框時(shí),復(fù)選框值的索引與在原始的HTML中控件的位置沒有任何聯(lián)系,在上述的例子中第四個(gè)復(fù)選框的子鍵數(shù)為3,因?yàn)楫?dāng)窗HTML下列的窗體創(chuàng)建了包含5個(gè)值可供用戶選擇,由于包含了MULTIPLE屬性,因此可以通過選擇 假如使用更加復(fù)雜一些的集合遍歷代碼(單獨(dú)顯示每個(gè)子鍵)SELECT列表是一列復(fù)選然而,列表框也有指定的值,假如在<OPTION>標(biāo)記中設(shè)置VALUE屬性,將得到的是選擇Request.Form集將包含這樣一個(gè)項(xiàng)目:如果沒有提供VALUE這允許既可以缺省(即無VALUE顯示選項(xiàng)文本,也可做相應(yīng)的改變。后一種情況在某些情況下是極為有用的,如要顯示一個(gè)說明的字符串)和傳遞一個(gè)完全不同的內(nèi)容(如用一個(gè)短碼代表一個(gè)說明性的字符串)。HTML復(fù)選框和單選框是布爾型控件的例子,選中或選擇返回的為“on”,不像文本框和大多數(shù)還有另外一種常用的布爾型控件,稱為HTML按鈕。如<INPUTTYPE=“SUBMIT”><INPUTTYPE=“RESET”>、<INPUTTYPE=“IMAGE”>、<INPUT>和<BUTTON>...</BUTTON>BUTTON類型的控件不返回任何值,因其對(duì)窗體沒有直接的影響。即使使用用來調(diào)用窗體的Submit方法,瀏覽器在任何請(qǐng)求中將不包含BUTTON類型控件的值。同樣,一個(gè)<INPUTTYPE=“RESET”>按鈕的值也決不然而,輸入按鈕控件BT和IE類型實(shí)際提交窗體給服務(wù)器,其LE屬性包含窗體的其他控件的值(只要在TL定義中包含一個(gè)E屬性)。例如,這個(gè)窗體可能是向?qū)ь愋蚭b在一個(gè)窗體中,可以包括多個(gè)SUBMIT按鈕。在這種情況下,應(yīng)該給每一個(gè)按鈕唯一的VALUERequest.Form集合的值,將產(chǎn)生一個(gè)值,這個(gè)值依賴于按下哪個(gè)按鈕用于提交這個(gè)窗體。假如用戶按下的“Previous”按鈕,將得到:因此,可查詢Request.Form集合來決定下一個(gè)顯示的頁面,例如:NAME屬性。且選擇其值包含在Form集合中的控件名稱。在控件沒有一個(gè)完整的標(biāo)記而是隨后跟著較長(zhǎng)的文本的情況下,極為有用,如圖2-3圖2-3提交按鈕屏在ASP頁面中,接收到該數(shù)據(jù)后,可以檢查按鈕名稱提供的值來判斷按下的是哪個(gè)按鈕。這個(gè)工作是查詢一個(gè)鍵上的ASP集合,如果不存在則返回一個(gè)空的字符串。換句話說,如果第二個(gè)按鈕(previous頁)按下,則Request.Form(“btnNext”)的值是一個(gè)空字符串,則其長(zhǎng)度為零而不至于產(chǎn)生一個(gè)錯(cuò)誤。當(dāng)?shù)诙€(gè)按鈕按下時(shí),則在 Form集合中這個(gè)條目的值Request.Form(“btnPrevious”,將“&;&;&;”其長(zhǎng)度大于零。提高使用Request一個(gè)ASP集合來一個(gè)值是費(fèi)時(shí)的需計(jì)算資源的過程,因?yàn)檫@個(gè)操作包含了一系列對(duì)相關(guān)集合的搜索,這比一個(gè)局部變量要慢得多。因此,如果打算在頁面中多次使用集合中的一個(gè)值,應(yīng)該考慮將其存貯成為一個(gè)局部變量,例如:搜索所有的Request在某些情況下,可能知道一個(gè)值的鍵名將出現(xiàn)在Request集合中,但不能準(zhǔn)確地知道是哪一個(gè)集合。例如,假幾個(gè)頁面(或一頁面的不同段)發(fā)送一個(gè)值給同一個(gè)ASP,它可能本章后面部分將研究Form和QueryString集合的要看一下一個(gè)值為什么可能出現(xiàn)在不同的集合中,考慮一下這種情況:使用了<A>超級(jí)元素請(qǐng)求一個(gè)頁面。在這種情況下,增加一個(gè)值到請(qǐng)求的唯一方法是把它加到URL在這種情況下,按下窗體上的Help按鈕,將發(fā)送RequestForm集合中一對(duì)名稱/值“page=Help”。然而,按下<A>超級(jí)也可能發(fā)送名稱/值“page=Help”,但是這次卻是在Quergstring集合里。為這個(gè)值,可使用ASPRequest對(duì)象的一個(gè)特殊功能:這將按序搜索全部的集合—QueryString、Form、Cookies、ClientCertificate、Serverariables,直到發(fā)現(xiàn)第一個(gè)匹配值的名稱。這樣做比直接適當(dāng)?shù)募闲实停⑶沂遣话踩?,除非能絕對(duì)保證這個(gè)值不會(huì)出現(xiàn)在另外一個(gè)集合中。例如,可能希望搜集滿足客戶請(qǐng)求的Web服務(wù)器的名稱,這通過出現(xiàn)在每個(gè)查詢中的總而言之,使用“搜索全部集合”技術(shù)要格外,且只在沒有其他技術(shù)能夠提供你需要的結(jié)果時(shí)使用。本章的這一節(jié)里,已經(jīng)集中討論了Form集合,這可能是使用得最多的一個(gè)。然而,所有這些技術(shù)同樣適用于其他的對(duì)象。包括那些由Request對(duì)象提供的(即Form、QueryString、 兩章遇到的其他對(duì)象提供的集合)。簡(jiǎn)短了解一個(gè)值如何進(jìn)入一個(gè)QueryString集合,及其優(yōu)點(diǎn)和不足。然而,同時(shí)這兩個(gè) s集合有額外的功能,可以使使用 更加方便,下面討論這個(gè)內(nèi)容。和更 s集s的值比ASP其他集合(例如Form和ServerVariables)的值要復(fù)雜得多 是一ASP使得應(yīng)用 包含可用兩種方式構(gòu)造的信息,單值提供其值給代碼是通過一個(gè)一般的類 通常,客戶只在對(duì)創(chuàng)建的中的頁面提出請(qǐng)求時(shí),才將隨發(fā)往服務(wù)器。 如果隨對(duì)整個(gè)站點(diǎn)的頁面請(qǐng)求發(fā)送,設(shè)置path為“/”。假如Expires屬性沒有設(shè)置,關(guān)閉當(dāng)前的瀏覽器實(shí)例時(shí) 注意,我們?cè)谙驗(yàn)g覽器發(fā)送任何輸出時(shí),已經(jīng)創(chuàng)建了,因?yàn)?,這些是頁面HTTP報(bào)頭的一部分。在ASP3.0中,緩沖的缺省狀態(tài)是打開的,且沒有輸出被發(fā)送,除非使用 在頁面上的任何位置,直到任何輸出“刷新”(flush)到客戶端前,它都可以被執(zhí)行。 s集合??梢詥为?dú)其中項(xiàng)目,方法類似于創(chuàng)建 是只寫的,事實(shí)上可以這個(gè)集合中一系列的名稱,而不是它們的值。遍 s集合更加方便,可使用名稱為Haskeys的附加屬性。假如的 ,這將返回True。使用Haskeys屬性,可以遍歷完整 這非常類似于前面的從Request.Form集合中提取多個(gè)值的復(fù)雜代碼。但是這里可以使用Haskeys屬性來判別每個(gè)條目是否為一個(gè)集合。而在Form例子里,必須查詢Request.Form(item_name).Count屬性,這是因?yàn)镕orm集合(和所有的除 外的他集合)成員不可能是真正的集合。ASP只是做了“幕后”的工作,得到了每個(gè)多條目集合的值。了解了各種ASP集合的技術(shù)以后,需要解決另一個(gè)問題是:Form和QueryString集合之間的差異是什么?假如準(zhǔn)備使用ASP,應(yīng)該清楚這種差異,但需要參考HTTP工作方通過HTTP從Web服務(wù)器請(qǐng)求頁面或其他資源,有兩個(gè)通用的方法??墒褂肎ET方法直接獲得資源,也可使用POST把值傳給相應(yīng)資源。GET方法是缺省的,可以看一下本章前面的一假如把一個(gè)或多個(gè)成對(duì)的名稱/值附在請(qǐng)求頁面的URL后,就變成請(qǐng)求的查詢字符串,且在QueryString集合中提供給ASP頁面。單擊eb頁面、 消息或其它文檔超,或在瀏覽的地欄中入地并按車,單擊覽中的Links或Favorites按鈕,所有這些都要使用GET方法。因此,從這些動(dòng)作中傳遞值給ASP的唯一方法是通過QueryString集合,把值附出現(xiàn)在Request.QueryString合中被的,與面看到的Form集合實(shí)例中的工作方式相同。URL和查詢字符串的結(jié)合:可以采用如下方式在QueryString集合中提供的值窗體的GET和POST在一個(gè)頁面內(nèi)使用<FORM>段時(shí),可以設(shè)置打開的FORM標(biāo)記的METHOD屬性值為“GETPOSTGETGET”或省略其屬性,瀏覽器將該值綁定在頁面所有控件上,成為一個(gè)查詢字符串,且附在被請(qǐng)求頁面的URL上。當(dāng)這個(gè)請(qǐng)求到達(dá)eb服務(wù)器時(shí),其值由ASP的Request.QueryString集合提供。然而,假如設(shè)置METHOD屬性為“POSTHTTP報(bào)頭中,通過Request.Form集合提供給ASP。通常來說,可以在所有的HTML窗體中使用POST方法。然而,瀏覽器或服務(wù)器的URL字符串長(zhǎng)度存在一定的限制。因此,附有長(zhǎng)的字符串可能會(huì)引起溢出和某些字符串的字符被截掉。同時(shí),查詢字符串出現(xiàn)在瀏覽器的地址欄和所有的保存的鏈連和收藏夾中。不僅如此,還顯露了通過eb服務(wù)器時(shí)在HTTP請(qǐng)求中不想顯示的值,它也可能出現(xiàn)你的服務(wù)器和其他路由服務(wù)器的日志文件中。在HTTP請(qǐng)求報(bào)頭中的值很少是可見的,并且不出現(xiàn)在日志文件中。使用POST方法需要注意的小問題是,當(dāng)用戶重新<FORM>時(shí),窗體的值將不再保留,其值為空且必須重新輸。然而,當(dāng)附在URL上時(shí),其值被為一個(gè),將被保留,因此將出現(xiàn)在所有的URL與字符串結(jié)合的請(qǐng)求中,這或許是個(gè)優(yōu)點(diǎn)也可能是個(gè)缺點(diǎn),這根據(jù)應(yīng)用而定()。另一點(diǎn)是URL與查詢字符串的結(jié)合體不能包含任何空格或其他字符,否則,avigtor一些他的覽將出問題字符是些用分隔L和確的格式—加號(hào)“+”但其的字符能理)。ASP服務(wù)器對(duì)象提供RLEcoe查看Request和Response到目前,主要討論了一些理論問題,沒有列舉特別的實(shí)例。因?yàn)橐呀?jīng)討論過的內(nèi)容多數(shù)Request和Response對(duì)象的大多數(shù)屬性。應(yīng)用所講過的實(shí)例,能夠理解這些頁面,并可進(jìn)行相應(yīng)的修改,用它們作為試驗(yàn)實(shí)例。本章及其他所有章節(jié)的代碼樣例均提供給用戶,可以從Wrox站點(diǎn)必須首先在Web服務(wù)器的WWWRoot內(nèi)的 這里your_server_name_or_IP/subdirectory_name是安裝文件的本地路徑這提供一個(gè)包含選項(xiàng)的菜單用來試驗(yàn)Request和Response對(duì)象,首先選擇UsingtheRequest圖2-4實(shí)例屏幕圖2-5顯示一個(gè)HTML窗體的實(shí)例,包含一些預(yù)先設(shè)置好的值,可以按自己的想法編輯這Submit”按鈕。這將打開一個(gè)頁面,如圖2-6所示,顯示集合和otalBytes屬性的全部?jī)?nèi)容。第一屏顯示的是Form、QueryString和 s集合。圖2-5實(shí)例屏幕圖2-6實(shí)例屏幕注意,假如在窗體頁中編輯了HTML控件的值,對(duì)于 FormCollection”段中看到窗體上的HTML控件的值如何在ASP的Request.Form集合中表示。也可以用原始的<FORM>頁(名稱為request_form.asp)來試驗(yàn)和檢測(cè),以了解創(chuàng)建窗體的HTML和如何與相應(yīng)值相聯(lián)系。 集合。這里是空的,因?yàn)榉?wù)器不要求客戶端提供。在本書的后面附錄中可以找到所有ServerVariables集合成員的一個(gè)列表,及其值的說明。然而,可從前面討論的在請(qǐng)求頁面時(shí)從客戶端發(fā)出的HTTP報(bào)頭中見到這些成員。當(dāng)請(qǐng)求收到后,Web服務(wù)器也增加它本身的一些值到集合中,正如下面可以看到的由運(yùn)行在名為wroxbox服務(wù)器上的IIS5.0
圖2-7實(shí)例屏幕為創(chuàng)建這個(gè)頁面,使用了本章前面在對(duì)Form集合和如何其值的討論中所看到的完全 遍 圖2-8實(shí)例圖2-8實(shí)例的集合內(nèi)讀者應(yīng)該注意到,在兩個(gè)集合中出現(xiàn)的某些值不是從窗體的HTML控件中直接得到的。eryting集chate和mpe的值,如圖2-8。。體的ACTION屬性的URL上,這是可以接受的。工作方式與附在一個(gè)<A>元素的HREF屬性上相類似。查詢字符的值出現(xiàn)在QueryString集合中,且被POST的窗體控件值出現(xiàn)在Form集合替,讀者將在第4章的Server對(duì)象的URLEncode方法中看到這種情況。為了確保至少有些值出現(xiàn)在 <FORM>頁面request_form.asp。將創(chuàng)建名稱為VisitCount的多值 個(gè)頁面創(chuàng)建的,且已經(jīng)存在于瀏覽器中。如圖2-9所示,讀者可以看到另外的。 圖2-9實(shí)例 另外,必須將內(nèi)容進(jìn)行編碼,以便它能被正確地傳送到服務(wù)器(同樣的規(guī)則也適用于將查詢字符串附到URL上)。在第4章中,討論Server對(duì)象的URLEncode方法時(shí),讀回到Chapter02實(shí)例的最初的Default.asp頁面,這次選擇“UsingtheResponseObject”鏈接,這個(gè)頁面顯示的是Response對(duì)象的集合和屬性的內(nèi)容,且提供到所有Response對(duì)象方法圖2-10是使用瀏覽器NetscapeCommunicator4.61的屏幕,用來證明使用的是純服務(wù)器端和跨平臺(tái)兼容技術(shù)。需要注意的是 s集合是為Response對(duì)象而建立的,僅顯示 名稱而不顯示其值。瀏該頁時(shí),可能得到或得到與這個(gè)頁面不同的。各種Response屬性說明了將要用來創(chuàng)建HTTP報(bào)頭的一些信息。HTTP報(bào)頭與頁面的其他部分(HTML和文本內(nèi)容)被發(fā)往到客戶端。這些屬性中的一些以及所有的Response對(duì)象的方法頁面中的屬性是通過相應(yīng)的屬性并插入到頁面中而創(chuàng)建的。由于這些是動(dòng)態(tài),通過<> 到每個(gè)方法僅是通過<A>元素,頁面中唯一復(fù)雜的部分是Response. s集通常只能 ,Request. s集合中的值。當(dāng)Response. s集合時(shí),必須在發(fā)送任何輸出到客戶端之前結(jié)束對(duì)它的所有。因此在頁面的上部,通過遍歷集合創(chuàng)建頁面的HTML放在一個(gè)局部字符串變量中。ASP 的使面看到面中一些合、性和法已到其他頁面用來示Reques和Response對(duì)象的各個(gè)特性細(xì)節(jié),在本章的其余的部分研究這些內(nèi)容,學(xué)習(xí)那些提供給ASP代碼使用的集合、方法和屬性的各種技術(shù)。在本章前面已經(jīng)看到了如何使用 s和 s集合來創(chuàng)建和閱,點(diǎn)擊上面兩個(gè)頁面中任一個(gè)的“ s”時(shí),這個(gè)頁面包含一些設(shè)置了三個(gè)的值的ASP代碼,且在頁面上顯示被執(zhí)行的代碼,如圖2-11所示。 實(shí)例的 s的內(nèi)容屏幕點(diǎn)擊“ s”的時(shí),cookie的內(nèi)容就顯示出來了。這是通過遍 s集合而得到的,這與在上一頁所用到的方式完全相同,如圖2-12 實(shí)例的 s的內(nèi)容屏幕這個(gè)屏幕圖顯示的是運(yùn)行前面看到的設(shè)置值的代碼的結(jié)果。可能會(huì)看到其他已經(jīng)存貯在計(jì)算機(jī)系統(tǒng)里的。然而,假如現(xiàn)在關(guān)閉瀏覽器然后重新打開瀏覽器,然后運(yùn)行顯示 具有有效期的設(shè)置,其他的在瀏覽器關(guān)閉時(shí),自動(dòng)了。 來這兩類值:當(dāng)瀏覽器關(guān)閉時(shí)我們不想保存的值(例如用戶的信息)以及在用戶站點(diǎn)時(shí)要保留的值。在每種情況下 頁面請(qǐng)求的ASP都是可用的。然而,需要記住的是, 只有在對(duì) 中的虛擬路徑(path)內(nèi)的頁面發(fā)出請(qǐng)求時(shí),才會(huì)發(fā)往服務(wù)器。缺省時(shí),假如path的值在 中沒有設(shè)置,則其值為創(chuàng)建 的頁的虛擬路徑。為使一個(gè) 發(fā)往一個(gè)站點(diǎn)的所有頁面,需要使用Path="/"。這里是個(gè)實(shí)例,從自定義的Login頁面中,將用戶的信息存貯在一個(gè) 沒有應(yīng)用有效期,值僅在關(guān)閉這個(gè)瀏覽器之前保留: 由于把 中的用戶名放在Response.Redirect的URL查詢字符串中,假如在口令輸入時(shí)出現(xiàn)錯(cuò)誤且希望用戶不重新鍵入用戶名可以在login.asp頁面中使用它:可以使用ASP修改現(xiàn)有的cookie,但不能只多值cookie中的一個(gè)值。當(dāng)更新一個(gè)在 假如想要更新Visits和LastDate的值,必須先找到不需改變的所有值,然后重寫整個(gè) 且對(duì)于幾乎所有的其他Response方法和屬性,應(yīng)該在寫入任何內(nèi)容(即打開<HYML>標(biāo)記使用ServerVariables當(dāng)討論Request對(duì)象的內(nèi)容時(shí),要研究的集合之一就是ServerVariables,,圖2-13實(shí)例的ResponseCollections的內(nèi)容屏幕含了兩種值的結(jié)合體,一種是隨同頁面請(qǐng)求從客戶端發(fā)送到服務(wù)器的HTTP報(bào)頭中的值,另外一種是由服務(wù)器在接收到請(qǐng)求時(shí)本身所提供的值。為顯示ServerVariables集合中值的使用方式,在RequestObject頁面(Show_request.asp)中ServerariablesEx,,圖2-13實(shí)例的ResponseCollections的內(nèi)容屏幕圖214所示窗口顯示的是ServerVariables集合中一些非常有用的值的一個(gè) 實(shí)例的ResponseCollections的內(nèi)容屏幕“自”頁在ServerVariables集合中返回的值包含eb服務(wù)器的詳細(xì)信息和當(dāng)前頁面的路徑信息。在任何地方創(chuàng)建一個(gè)頁面都可使用這些信息。例如創(chuàng)建一個(gè)“自”頁面,此頁面能夠再次調(diào)用自身完成另一項(xiàng)任務(wù),我們可以用以下代碼:同樣的效果可以用HP的“SP_E”值獲得:使用<>元素打開一個(gè)不同頁,可以使用:即使原始頁面的名稱或位置發(fā)生變化,這些實(shí)例都能正常工作,因?yàn)槭褂昧水?dāng)前頁面的路徑信息()。換句話說,如要為搜索引擎的子會(huì)話自動(dòng)建立這將創(chuàng)建一個(gè)完整的URL包括端(這種情況下,不是標(biāo)準(zhǔn)值80)。例如,結(jié)果可能是Serverariables集合中,另外一個(gè)有用的值是用戶瀏覽器的用戶字符串。在“DetectingtheBrowserType”頁面(browsertype.asp),使用Serverariables集合中的“HTTP_USER_AGENT”值來獲得用戶字符串,一些用來解析該信息并尋找生產(chǎn)廠家名稱和瀏覽器版本。對(duì)IE5.0和Navigator4.61的搜索結(jié)果分別如圖2-15和圖2-16所示。對(duì)于其他廠家的瀏覽器,可以得到一個(gè)在AltaVistaWeb站點(diǎn)自動(dòng)開始搜索廠家的名稱。圖2-15IE5.0中顯示的結(jié) Navigator4.61中顯示的結(jié)注意,Netscape在用戶字符串中不提供廠家的名稱,因而無法絕對(duì)保證一個(gè)ServerVariables集合中另外一個(gè)有用的值是“HTTP_ACCEPT_LANGUAGE”,它包含了一個(gè)當(dāng)瀏覽器安裝時(shí)指定的,或硬編碼進(jìn)用戶的地區(qū)版本的語言代碼。語言代碼的例子有en-us(英國(guó)、)、de-at(德國(guó)、澳大利亞)和es-pe(西班牙、秘魯)。語言代碼可以是一般的且省略方言標(biāo)識(shí):例如,在我們的站點(diǎn)Wrox者,大批瀏覽者都是其他有用的ServerVariables集合的可以和使用Serverariables集合中的任何一成員,控制ASP頁面響應(yīng)一個(gè)請(qǐng)求的方式。可以檢查一個(gè)瀏覽者 站點(diǎn)時(shí)使用的是否是缺省端口80或還是另一個(gè)。在這個(gè)例子里,尋找通過端口443的 —這端口供的字層(SecureSocketLayer,SSI)(和其他的協(xié)議),且將它們重定向到一個(gè)相應(yīng)的頁面。假如要求瀏覽者且由服務(wù)器驗(yàn)證(而不是允許他們?cè)赪eb服務(wù)器的IUSR帳號(hào)下訪問,這個(gè)問題將在后面章節(jié)中詳細(xì)討論),可以查詢用戶名稱,來判定正在與我們打交道的用戶是誰,是否裝載頁面給該用戶。例如,下面的這個(gè)代碼將只向名為Administrator的用戶顯示注意ASP不填寫ServerVariables集合直到你其中的一個(gè)成員。首次該集合的一個(gè)成員將使IIS得到它的全部,應(yīng)只在需要時(shí)才使用Serverariable集合。其他Request和Response現(xiàn)在,來看一下幾個(gè)使用Request和Response連接、緩沖和頁面重定向的管理ASP的一個(gè)很有用的特點(diǎn)就是使用戶能夠從一個(gè)ASP網(wǎng)頁轉(zhuǎn)向到另一個(gè)網(wǎng)頁(ASP或HTML),或另一個(gè)源文件(例如一個(gè)ZIP文件或文本文件)。這對(duì)用戶來說是透明的,實(shí)際上是瀏覽器做這個(gè)工作。當(dāng)使用Response.Redirect方法來載入一個(gè)新的網(wǎng)頁時(shí),實(shí)際上是發(fā)送回一個(gè)特殊的TTP報(bào)頭到客戶。此報(bào)頭為:瀏覽器讀到此報(bào)頭信息,并按Location值的指示載入頁面。這在功能上與在Web頁中使用這帶來的一個(gè)問題是,服務(wù)器與用戶之間的服務(wù)器可能會(huì)提供它自己的包含與新頁面的的消息,而不是直接載入新頁面。而且瀏覽器根據(jù)廠商和版本可能做同樣的工作。這就去除了假定的透明,而且對(duì)用戶來說一直收到的是錯(cuò)誤信息,則對(duì)你的站點(diǎn)的變得在發(fā)送諸如文本或HTML等任何頁面內(nèi)容后,我們就不能再使用Redirect方法。然而,一個(gè)看起來能夠限制“服務(wù)器影響”的方法就是,先確定沒有輸出(包括HTTP報(bào)頭)被發(fā)送到客戶。在ASP2.0中,必須打開緩沖,然后使用Clear方法來清空緩沖區(qū):在ASP3.0中,緩沖缺省為打開,所以第一行可被忽略,但它是無害的,而且能確保我們與其使用這種類型的HTTP報(bào)頭重定向,不如使用ASP3.0的一個(gè)新特性,它允許我們通過Server對(duì)象的Transfer方法轉(zhuǎn)換為執(zhí)行另一個(gè)網(wǎng)頁,在第4章進(jìn)一步研ASPIIS5.0中ASP3.0頁面緩沖是缺省打開的,在早期的版本中是缺省關(guān)閉的。微軟告訴我們緩沖在IIS5.0中提供了更有效的網(wǎng)頁傳送,這就是緩沖缺省狀態(tài)被改變的原因。在大部分情況下,這對(duì)我們沒有影響。但是,假一個(gè)非常大的網(wǎng)頁,或一個(gè)用ASP或別的服務(wù)器端代碼和組件花費(fèi)一定時(shí)間創(chuàng)建的網(wǎng)頁,當(dāng)其各部分完成時(shí),我們能夠分批刷新它們到客戶:有時(shí)可能希望在頁面結(jié)束之前的某些點(diǎn)上停止代碼的執(zhí)行,可以通過調(diào)用End方法去刷新假如正在創(chuàng)建被緩沖的輸出,且沒有發(fā)往客戶,則我們可以改變主意,可以使用Clear方這里有兩個(gè)演示緩沖和重定向的實(shí)例網(wǎng)頁,可以從“ ResponseObject”主頁面(show_response.asp)它們。第一個(gè)Response.Redirect例子網(wǎng)頁命名為redirect.asp,它在緩沖的頁面中寫入一些內(nèi)容,清除緩沖區(qū),并重定向到另一個(gè)網(wǎng)頁:目標(biāo)頁show_response.aspResponseObject因?yàn)檫@些網(wǎng)頁都在緩沖區(qū)內(nèi),而且所有的輸出在重定向之前必須被清除,故在瀏覽器中沒有2-17圖2-17瀏覽器的狀態(tài)“RequestObject”主頁中,點(diǎn)擊“Response.Flush”將打開第二個(gè)示例網(wǎng)頁usebuffer.asp,它簡(jiǎn)單地遍歷一個(gè)字符串的每一字符,以一定的延遲將它們刷新到客戶,這雖是eb服務(wù)器和ASP極低效率的使用方式,但它演示了緩沖的工作方式。 下面是所要求的最小化的ASP代碼,注意我們分別把每個(gè)字符刷新到瀏覽器,因?yàn)椴贿@IsClientConnected屬性在ASP2.0中已經(jīng)存在了,但卻有些不可靠。在其返回一個(gè)準(zhǔn)確的結(jié)果之前必須發(fā)送一些輸出到客戶。這一問題在ASP3.0中已被解決。現(xiàn)在這一屬性可被自由IsClientConnected是觀察用戶是否仍連到服務(wù)器和正在載入ASP創(chuàng)建的網(wǎng)頁的有用方式。如果用戶斷開連接或停止,我們就不用再浪費(fèi)服務(wù)器的資源創(chuàng)建網(wǎng)頁,因?yàn)榫彌_區(qū)內(nèi)容將被IIS丟棄。所以,對(duì)那些需要大量時(shí)間計(jì)算或資源使用較多的網(wǎng)頁來說,值得在每一階段都檢查瀏覽者是否已離線:操作HTTP我們已經(jīng)在幾處見到ASP如何創(chuàng)建或修改在響應(yīng)頁面請(qǐng)求時(shí)被發(fā)送到客戶的HTTP報(bào)頭。圖2-19圖2-19檢查屬性和方創(chuàng)建狀態(tài)和定制的HTTP報(bào)頭。指定MIME添加PICS接下來將簡(jiǎn)要地研究每一個(gè)方面。可在“ResponseObject”主頁(show_response.asp)上,單擊相關(guān)屬性名或方法2-19緩存和“到期”ASP,用戶的瀏覽器以及他們和服務(wù)器之的任一服器都可以緩存HTML和用ASP創(chuàng)建的網(wǎng)頁。當(dāng)用戶隨后請(qǐng)求頁面時(shí),覽器發(fā)送個(gè)“修”的求到務(wù)器(使用一個(gè)包含緩存版本的日期的HTTP_IF_MODIFIED_SINCE報(bào),若沒有被修改,服務(wù)器應(yīng)用狀態(tài)碼和消息“304NotModified”來響應(yīng),瀏覽器將使用緩存的內(nèi)容而不會(huì)通過網(wǎng)絡(luò)一個(gè)副本。若已經(jīng)存在已修改的版本,它就會(huì)與“200OK”狀Response.CacheControl其他的一些因素也會(huì)影響這一處理過程。然而,任一被網(wǎng)頁使用的網(wǎng)絡(luò)路由內(nèi)的服務(wù)器(一般位于客戶機(jī)端)Response.CacheControl屬性為Private來放棄緩存網(wǎng)頁。在ASP3.0中對(duì)ASP網(wǎng)頁這是缺省的,不用設(shè)置。但在網(wǎng)頁為個(gè)別者特別定制時(shí)尤其有用。這可以別在同網(wǎng)絡(luò)的用進(jìn)入一網(wǎng)。當(dāng)CacheControl的屬性值被設(shè)為Public時(shí),允許服務(wù)器緩存網(wǎng)頁。注意,一些服務(wù)器可能表現(xiàn)得不盡相同,或忽視或越過這個(gè)報(bào)頭。在IE4中,在服務(wù)器緩存可時(shí),有可能得到虛“Thispagehasexpired”消息。我們已提供了一個(gè)網(wǎng)頁(expiretest_form.asp),可以通過自己的服務(wù)器在網(wǎng)絡(luò)上做試驗(yàn),來檢查這一屬性的影響??梢酝ㄟ^在“ResponseObject”主頁中單擊“Response.CacheControl”來顯示這個(gè)網(wǎng)頁,如圖2-20所示圖2-20顯示檢查結(jié)果這一頁面提交到expiretest_result.asp網(wǎng)頁時(shí),能夠設(shè)置Response.CacheControl屬性,然后在網(wǎng)頁中插入值和被執(zhí)行的時(shí)間:通過單擊瀏覽器上的“BackForward圖2-21顯示檢查結(jié)果Response.Expires和Response.ExpiresA圖2-21顯示檢查結(jié)果。Response對(duì)象的Expires和ExpiresAbsolute屬性Response.Expires定義了網(wǎng)頁在從緩存區(qū)被丟棄前應(yīng)保持有效的時(shí)間長(zhǎng)度,以創(chuàng)建以來的分鐘數(shù)形式表示。ExpiresAbsolute屬性為到期時(shí)間設(shè)置了一個(gè)日期和時(shí)間。。我們提供一個(gè)命名為addheaders_form.asp的例子網(wǎng)頁,用于演示如何使用這些屬性。在“ResponseObject”主頁中單擊對(duì)這兩種屬性的,如圖2-22所示 在這一頁面中,可加入自己定制的HTTP報(bào)頭,并可設(shè)置一些影響響應(yīng)的HTTP報(bào)頭的多Submit”按鈕上單擊時(shí),頁面show_headers.asp在返回的數(shù)據(jù)流中添加所選的報(bào)頭,然后顯示用來完成此操作的代碼,顯示相應(yīng)的執(zhí)行時(shí)間,可用來檢查頁面是被緩存還是被再次執(zhí)行,如圖2-23 show_headers.asp網(wǎng)頁中的代碼創(chuàng)建和添加HTTP的報(bào)頭“PRAGMA”(至今我們還沒討論過)。一些(先前的)的服務(wù)器使用它作為網(wǎng)頁是否應(yīng)被緩存的指示。缺省是網(wǎng)頁被緩沖,除非接受到HTTP報(bào)頭“PRAGMA=NO-CACHE”。創(chuàng)建狀態(tài)碼和定制的HTTP可使用先前在實(shí)例網(wǎng)頁中所看到的Response對(duì)象的AddHeader方法來創(chuàng)建自己的狀態(tài)碼或自己喜歡的定制的報(bào)頭。這一方法需要兩個(gè)參數(shù):HTTP報(bào)頭名稱或一個(gè)包含其值或分配給它REFRESH報(bào)頭:這等同于客戶機(jī)端<META>換句話說,也可配合Status屬性使用AddHeader方法Response.Status屬性可被用來發(fā)送一些所需要的狀態(tài)消息,例如添加如下幾行:強(qiáng)制瀏覽器顯示一個(gè)用戶名/口令框,然后使用BASIC驗(yàn)證把它們發(fā)送回服務(wù)器(將在本書后續(xù)部分看到驗(yàn)證方法)。當(dāng)我們想向?yàn)g覽器發(fā)送一個(gè)動(dòng)態(tài)創(chuàng)建的字符串,而且它們自己提供給瀏覽器時(shí)沒有直接Response.ContentType的。除非特別指定,所有ASPtext/typeMIME類型(MIME代表Multi-purposeInternetMultimediaExtension或Multi-purposeInternetMail例如,若發(fā)送到客戶的數(shù)據(jù)流是通過從數(shù)據(jù)庫(kù)讀二進(jìn)制值創(chuàng)建的,就需要在發(fā)送任何內(nèi)容之前添加合適的CONTENT-TYPE報(bào)頭:添加PICSResponse.Pics屬性僅僅是添加一個(gè)PICS(PlatformforInternetContentsystem卷標(biāo)到頁面這段代碼添加了如下的PICS卷標(biāo):要得到關(guān)于PICS的的信息,或了解的定義頁面內(nèi)容的方式,請(qǐng)檢索在InternetServiceManager在第1章,已經(jīng)說明了如何在InternetServiceManager(MMC插件)圖2-24HTTPHeaders選項(xiàng)卡屏 CustomHTTPHeaders欄的 Web和IIS5.0中 CustomHTTPHeaders欄的 ASP代碼設(shè)置這些屬性的替代方法”在Web站點(diǎn)或 上右擊鼠標(biāo)并選“Propertie“HTTPHeaders選項(xiàng)卡中,可設(shè)置頁面內(nèi)容有效期的相對(duì)時(shí)間或絕對(duì)日期,定義定制報(bào)頭,創(chuàng)建PICS內(nèi)容等級(jí),也可以通過MIME類型映射來定義內(nèi)容類型,如圖2-24示?!?,,在圖2-24中,可以看到已創(chuàng)建了自定義的REFRESHTT報(bào)頭,應(yīng)用于從此 載入所有網(wǎng)頁。即每一分鐘自動(dòng)地重載(刷新)(對(duì)于顯示棒球比賽的比分是非常理想的但對(duì)服務(wù)器而言負(fù)擔(dān)太了)。CustomHTTPHeaders欄的Edit框如圖2-25所。,,要在“MIMEMap”框中添加自定義的內(nèi)容類型映射,只需在“Properties”主框中單擊“FileTypes”按鈕把它們添加到中當(dāng)使用HTTP報(bào)頭開始試驗(yàn)時(shí),你很快會(huì)發(fā)現(xiàn)不是所有的瀏覽器表現(xiàn)都相同許多瀏覽器以不同的方式響應(yīng)不同的HTTP報(bào)頭,使得可靠地建立一個(gè)普遍適的時(shí)。使用客戶假如設(shè)立了一個(gè)安全的eb或部分內(nèi)
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 未來五年蜂王幼蟲企業(yè)縣域市場(chǎng)拓展與下沉戰(zhàn)略分析研究報(bào)告
- 公司轉(zhuǎn)崗培訓(xùn)
- 空氣凈化系統(tǒng)培訓(xùn)課件
- 空分知識(shí)培訓(xùn)課件
- 2025-2030物聯(lián)網(wǎng)芯片供應(yīng)行業(yè)產(chǎn)能擴(kuò)張技術(shù)突破投資機(jī)會(huì)評(píng)估發(fā)展計(jì)劃
- 2025-2030物理治療行業(yè)市場(chǎng)深度分析及未來趨勢(shì)與投資發(fā)展報(bào)告
- 2025-2030物流行業(yè)無人倉(cāng)庫(kù)技術(shù)市場(chǎng)整合物流行業(yè)投資分析競(jìng)爭(zhēng)指南
- 2025-2030物流倉(cāng)儲(chǔ)行業(yè)智能化應(yīng)用與效率提升報(bào)告
- 2025-2030物流倉(cāng)儲(chǔ)行業(yè)市場(chǎng)供需分析與發(fā)展投資評(píng)估規(guī)劃
- 2025-2030物業(yè)租賃行業(yè)市場(chǎng)競(jìng)爭(zhēng)現(xiàn)狀供需分析投資規(guī)劃評(píng)估評(píng)估研究報(bào)告
- 2026年1月福建廈門市集美區(qū)后溪鎮(zhèn)衛(wèi)生院補(bǔ)充編外人員招聘16人筆試備考試題及答案解析
- 2026年鄉(xiāng)村治理體系現(xiàn)代化試題含答案
- 2026元旦主題班會(huì):馬年猜猜樂新春祝福版 教學(xué)課件
- 王洪圖黃帝內(nèi)經(jīng)80課時(shí)講稿
- 個(gè)人借條電子版模板
- 新版FMEA(AIAG-VDA)完整版PPT可編輯FMEA課件
- YY/T 0833-2020肢體加壓理療設(shè)備通用技術(shù)要求
- GB/T 5023.7-2008額定電壓450/750 V及以下聚氯乙烯絕緣電纜第7部分:二芯或多芯屏蔽和非屏蔽軟電纜
- GB/T 17984-2000麻花鉆技術(shù)條件
- GB 15196-2015食品安全國(guó)家標(biāo)準(zhǔn)食用油脂制品
- 瑜伽師地論(完美排版全一百卷)
評(píng)論
0/150
提交評(píng)論