ASP.NET的常用組件對(duì)象 在ASP中包含6個(gè)無(wú)需創(chuàng)建即可直接調(diào)用和訪問(wèn)的內(nèi)置對(duì)象,即Request,Response,Session,Application,Server和Cookie。當(dāng)web應(yīng)用程序運(yùn)行時(shí),這些對(duì)象可以用來(lái)維護(hù)有關(guān)當(dāng)前應(yīng)用程序、HTTP請(qǐng)求、web服務(wù)器的活動(dòng)狀態(tài)等基本信息,并為用戶的HTTP請(qǐng)求和web服務(wù)器的處理提供橋梁作用。而在ASP.NET對(duì)象中,這些對(duì)象仍然存在。不同的是,在.NET框架中,這些內(nèi)部對(duì)象是由封裝好的類(lèi)來(lái)定義的,且已成為HttpContext類(lèi)(封裝了特定http請(qǐng)求的所有信息)的屬性。由于ASP.NET在初始化頁(yè)面請(qǐng)求時(shí)已經(jīng)自動(dòng)創(chuàng)建了這些內(nèi)部對(duì)象,因此可以直接使用它們而無(wú)需再對(duì)類(lèi)進(jìn)行實(shí)例化。 一、Request對(duì)象
Request對(duì)象的調(diào)用方法如下: Request.Collection("Variable") Collection是一個(gè)屬性集合,包括QueySrting,F(xiàn)orm,cookies和ServerVariables,表示獲取數(shù)據(jù)的方法。其中, 當(dāng)Request對(duì)象使用Form屬性來(lái)獲取窗體表單的數(shù)據(jù)時(shí),一般是在窗體頁(yè)面提交完成之后。窗體頁(yè)面的提交方式有兩種,即POST和GET。當(dāng)使用POST提交方式時(shí),窗體中的數(shù)據(jù)會(huì)作為Form集合的元素被發(fā)送到服務(wù)器端;當(dāng)使用GET提交方式時(shí),窗體中的表單數(shù)據(jù)將作為查詢字符串的形式通過(guò)URL傳遞。此時(shí),要得到其值,可使用Request對(duì)象的QueryString屬性。 下面來(lái)看兩個(gè)分別使用POST和GET提交數(shù)據(jù)的范例: 例一:用Form的POST方式發(fā)送數(shù)據(jù) </head> <script runat = "server"> 例二:用Form的GET方式發(fā)送數(shù)據(jù) </head> <script runat = "server"> 事實(shí)上,我們?cè)谑褂肣ueryString屬性時(shí),也可以通過(guò)在請(qǐng)求URL中添加附加信息來(lái)傳遞數(shù)據(jù),如: /index.aspx?id=1234
Request的ServerVariables屬性包含了客戶機(jī)和服務(wù)器的相關(guān)環(huán)境變量。 ServerVariables屬性的常用環(huán)境變量 HTTP_USER_AGENT 用于獲取用戶瀏覽器的類(lèi)型和版本號(hào) 此外,Request還有一個(gè)cookie屬性,該屬性包含了Cookie對(duì)象。 二、Response對(duì)象 Response對(duì)象對(duì)應(yīng)于ASP.NET中的HttpResponse類(lèi)。當(dāng)客戶發(fā)出請(qǐng)求時(shí),CLR會(huì)根據(jù)用戶的請(qǐng)求建立一個(gè)Response對(duì)象。Response將用于回應(yīng)客戶瀏覽器。指示瀏覽器回應(yīng)內(nèi)容的包頭、服務(wù)器端的狀態(tài)信息,以及輸出指定的內(nèi)容等。 Response對(duì)象的相關(guān)屬性和方法如下: ContentType屬性 Response對(duì)象的Write方法可以說(shuō)是我們用的最多的語(yǔ)句,它主要用來(lái)在頁(yè)面上輸出文本,如:
此外,我們還可以將Response.Write語(yǔ)句放在腳本內(nèi)的函數(shù)或方法中使用。例如,下面的范例在VB腳本中定義了一個(gè)方法,調(diào)用Response.Write方法來(lái)輸出字符串參數(shù)。 例: <%PrintText(Now.ToString)%> 在程序設(shè)計(jì)時(shí),通常需要在不同的頁(yè)面之間跳轉(zhuǎn),從而滿足不同業(yè)務(wù)的流程需要,此時(shí),我們可以使用Response.Write方法來(lái)實(shí)現(xiàn)頁(yè)面的跳轉(zhuǎn)功能,如 Response.Redirect("Login.apsx") 值得注意的是,使用Redirect方法將會(huì)消耗大量的服務(wù)器CPU時(shí)間。因此,如果不是特別需要的話,最好不要不加限制的使用它。 ASP.NET提供了緩沖機(jī)制,允許將數(shù)據(jù)首先保存在服務(wù)器的緩沖區(qū)域。這樣就不用每次訪問(wèn)時(shí)都重新執(zhí)行文件,而只從緩存中取出即可,從而加快頁(yè)面處理的速度和服務(wù)器的響應(yīng)時(shí)間。Response對(duì)象可以通過(guò)Buffer和BufferOutPut屬性來(lái)設(shè)置是否緩沖要輸出到客戶端的數(shù)據(jù),如: Response.BufferOutPut = "true" 上面的數(shù)據(jù)設(shè)置了緩沖數(shù)據(jù)為真,這意味著完成對(duì)整個(gè)頁(yè)面的處理之后才向客戶端輸出。Buffer和BufferOutPut實(shí)現(xiàn)的功能是一樣的,提供Buffer屬性僅僅是為了與ASP兼容,而通常在ASP.NET中使用的是BufferOutPut屬性。 此外,ASP.NET還提供了兩個(gè)方法,即Clear和Flush來(lái)處理有關(guān)緩沖的內(nèi)容,使用這兩個(gè)方法的前提條件是BufferOutPut屬性或Buffer屬性已經(jīng)被設(shè)置為T(mén)rue。其中Clear方法用于清除緩沖區(qū)中的所有HTML輸出,F(xiàn)lush方法用于將當(dāng)前緩沖區(qū)的內(nèi)容強(qiáng)制輸出到客戶端。 與Request對(duì)象一樣,在Response對(duì)象中也包含了一個(gè)cookies集合,該集合包含一些cookie對(duì)象。該對(duì)象是在服務(wù)器上創(chuàng)建的,并以Set-Cookie表頭的形式傳送到客戶端。 三、Server對(duì)象 Server對(duì)象對(duì)應(yīng)于ASP.NET中的HttpServerUtility類(lèi),它允許方法服務(wù)器本身,獲取有關(guān)服務(wù)器的相關(guān)信息。 Server對(duì)象的常用屬性和方法如下: MachineName屬性 用于獲取服務(wù)器的計(jì)算機(jī)名稱(chēng) HtmlEncode是Server對(duì)象中用得較多的一個(gè)方法,它用于對(duì)顯示在瀏覽器中的字符串進(jìn)行編碼。首先看下面這條語(yǔ)句: Response.Write("<center><b>ASP.NET</b></center>") 其作用是在瀏覽器中局中并加粗顯示“ASP.NET”。但是如果我們需要將“<center><b>ASP.NET</b></center>”作為一個(gè)完整的字符串顯示在瀏覽器中,則通過(guò)HtmlEncode方法可以輕松的實(shí)現(xiàn),如: Response.Write("Server.HtmlEncode(<center><b>ASP.NET</b></center>)") 事實(shí)上,經(jīng)過(guò)HtmlEncode編碼后,字符串已經(jīng)轉(zhuǎn)換為: <center&rt;<b&rt;ASP.NET</b&rt;</center&rt; HtmlDecode方法的作用與HtmlEncode方法的作用相反,它將HTML編碼的代碼進(jìn)行解碼,恢復(fù)代碼的本來(lái)面目。
Application對(duì)象的相關(guān)屬性和方法如下: Allkeys屬性 獲取應(yīng)用程序狀態(tài)集合中的對(duì)象鍵 例如,下面的語(yǔ)句在應(yīng)用程序狀態(tài)內(nèi)創(chuàng)建一個(gè)新的變量,其名稱(chēng)為“AppVarName”,值為“VarValue”: Application("AppvarNAame") = "VarValue" 在一個(gè)ASP.NET頁(yè)面執(zhí)行這個(gè)語(yǔ)句后,在同一個(gè)應(yīng)用程序的其他頁(yè)面都可以直接獲取AppVarName的值。要讀取應(yīng)用程序狀態(tài)變量的值,可以使用如下語(yǔ)句: Response.Write(Application("AppVarName")) 它在頁(yè)面上顯示應(yīng)用程序狀態(tài)變量的值。 Application("DataTable") = dtbDataTable 實(shí)際上,應(yīng)用程序狀態(tài)變量可以說(shuō)是ASP.NET應(yīng)用程序的全局變量,它一直保存到應(yīng)用程序被關(guān)閉或者現(xiàn)實(shí)的刪除此變量時(shí)。因此,在應(yīng)用程序狀態(tài)中添加復(fù)雜對(duì)象時(shí),要考慮到應(yīng)用程序的內(nèi)存開(kāi)銷(xiāo)。 要從應(yīng)用程序狀態(tài)中移除特定的變量,可使用Remove方法。例如: Application.Remove("AppVarName") 執(zhí)行此語(yǔ)句后,應(yīng)用程序狀態(tài)中將不再存在AppVarName變量。 Application.Removeall() 或者 Application.Clear() 五、Session對(duì)象 Session對(duì)象對(duì)應(yīng)于HttpSessionState類(lèi),它主要用于保存與當(dāng)前用戶會(huì)話相關(guān)的信息。與Application對(duì)象不同的是,Session對(duì)象與用戶相關(guān)聯(lián)。對(duì)于同一個(gè)用戶,在應(yīng)用程序內(nèi)不同的頁(yè)面訪問(wèn)同一個(gè)Session變量,其值相同;而不同的用戶擁有不同的Session變量,其內(nèi)容不同。對(duì)于每一個(gè)Session對(duì)象,都有一個(gè)SessionID來(lái)唯一標(biāo)識(shí)它。 Session對(duì)象的相關(guān)屬性和方法如下: SessionID屬性 用于表示會(huì)話的標(biāo)識(shí)ID 六、Cookie對(duì)象 Cookie對(duì)象對(duì)應(yīng)于HttpCookie類(lèi),它主要用來(lái)在用戶的瀏覽器上存儲(chǔ)小塊兒的信息,同時(shí)也可用來(lái)處理與當(dāng)前用戶會(huì)話有關(guān)的信息。 Cookie對(duì)象的相關(guān)屬性和方法如下: Name屬性 用于獲取Cookie的名字 Cookie對(duì)象可以分為兩種類(lèi)型,即會(huì)話Cookie(SessionCookie)和持久性Cookie,前者是臨時(shí)的Cookie,一旦會(huì)話狀態(tài)結(jié)束便會(huì)自動(dòng)的消失;后者則具有確定的過(guò)期時(shí)間。一般來(lái)說(shuō),持久性Cookie在用戶的計(jì)算機(jī)上都是以文本文件的形似存儲(chǔ)的。 為創(chuàng)建一個(gè)Cookie,首先要初始化一個(gè)HttpCookie對(duì)象實(shí)例,然后將其添加到Response的Cookie集合中,例如: Dim objCookie As New HttpCookie("TestCookie","會(huì)話Cookie") 這里添加的是一個(gè)會(huì)話Cookie,它被添加到瀏覽器的會(huì)話內(nèi)存中,但不會(huì)被寫(xiě)入到用戶的硬盤(pán)文件中。一旦用戶關(guān)閉瀏覽器,該Cookie對(duì)象便會(huì)消失。 如果要?jiǎng)?chuàng)建一個(gè)持久性Cookie,則只需在創(chuàng)建時(shí)為其指定一個(gè)過(guò)期時(shí)間即可。這樣它就會(huì)以文本文件的形式保存到用戶的計(jì)算機(jī)中,直到到達(dá)指定的時(shí)間。例如:
如果需要獲取一個(gè)Cookie值,則可訪問(wèn)Request對(duì)象的Cookie集合,例如,以下將遍歷并顯示當(dāng)前Request對(duì)象中的所有Cookie: Dim CookieName As String 值得注意的是,Cookie只能保存字符串信息,當(dāng)保存的是整數(shù)值時(shí),應(yīng)先將其轉(zhuǎn)換為字符串。 |
|
來(lái)自: orion360doc > 《ASP.NET》