小男孩‘自慰网亚洲一区二区,亚洲一级在线播放毛片,亚洲中文字幕av每天更新,黄aⅴ永久免费无码,91成人午夜在线精品,色网站免费在线观看,亚洲欧洲wwwww在线观看

分享

ASP.NET的常用組件對象 - 博客文庫 - 博客園

 orion360doc 2011-03-22

ASP.NET的常用組件對象

作者:web程序人生  來源:博客園  發(fā)布時(shí)間:2011-01-29 23:25  閱讀:8 次  原文鏈接   [收藏]  

  在ASP中包含6個(gè)無需創(chuàng)建即可直接調(diào)用和訪問的內(nèi)置對象,即Request,Response,Session,Application,Server和Cookie。當(dāng)web應(yīng)用程序運(yùn)行時(shí),這些對象可以用來維護(hù)有關(guān)當(dāng)前應(yīng)用程序、HTTP請求、web服務(wù)器的活動(dòng)狀態(tài)等基本信息,并為用戶的HTTP請求和web服務(wù)器的處理提供橋梁作用。而在ASP.NET對象中,這些對象仍然存在。不同的是,在.NET框架中,這些內(nèi)部對象是由封裝好的類來定義的,且已成為HttpContext類(封裝了特定http請求的所有信息)的屬性。由于ASP.NET在初始化頁面請求時(shí)已經(jīng)自動(dòng)創(chuàng)建了這些內(nèi)部對象,因此可以直接使用它們而無需再對類進(jìn)行實(shí)例化。

一、Request對象


  Request對象對應(yīng)ASP.NET中的HttpRequest類,當(dāng)客戶端發(fā)出請求執(zhí)行ASP.NET程序時(shí),CLR會將客戶端的請求信息包含在Request對象中,其中包括報(bào)頭(Head)、客戶端瀏覽器的信息(包括瀏覽器類型及瀏覽器版本號)、編碼方式、請求方法(包括POST及GET),幾所帶參數(shù)信息(包括參數(shù)名及參數(shù)值)等。通過使用Request對象,我們可以訪問HTML基于表單的數(shù)據(jù)和通過URL發(fā)送的參數(shù)列表信息,同時(shí)還可以接受來自客戶端的Cookie信息。

Request對象的調(diào)用方法如下:

Request.Collection("Variable")

  Collection是一個(gè)屬性集合,包括QueySrting,F(xiàn)orm,cookies和ServerVariables,表示獲取數(shù)據(jù)的方法。其中,QueryString用于獲取HTTP查詢字符串集合,F(xiàn)orm用于獲取窗體的變量集合,Cookies用于獲取客戶端發(fā)送的Cookie集合ServerVariable用于獲取web服務(wù)器的變量集合。Collection是可以省略的,如果省略,那么Request對象會依照QueryString、Form、Cookies及ServerVariable的順序查找,直至發(fā)現(xiàn)Variable所對應(yīng)的關(guān)鍵字為止,并返回其值;如果沒有發(fā)現(xiàn)Variable對應(yīng)的關(guān)鍵字,則返回空值。

  當(dāng)Request對象使用Form屬性來獲取窗體表單的數(shù)據(jù)時(shí),一般是在窗體頁面提交完成之后。窗體頁面的提交方式有兩種,即POST和GET。當(dāng)使用POST提交方式時(shí),窗體中的數(shù)據(jù)會作為Form集合的元素被發(fā)送到服務(wù)器端;當(dāng)使用GET提交方式時(shí),窗體中的表單數(shù)據(jù)將作為查詢字符串的形式通過URL傳遞。此時(shí),要得到其值,可使用Request對象的QueryString屬性。

下面來看兩個(gè)分別使用POST和GET提交數(shù)據(jù)的范例:

例一:用Form的POST方式發(fā)送數(shù)據(jù)
<html>
  <head>
  <title>使用POST方式發(fā)送數(shù)據(jù)</title>

  </head>
  <body>
   <form id = "form1" method = "post" runat ="server">
     <asp:label id = "label1" runat = "server" text="請?zhí)峤粩?shù)據(jù)"></asp:label>
     <br />
     <br />
     您的姓名:
     <asp:TextBox runat = "server" id = "name" text=""></asp:TextBox>
         
     您的年齡:
     <asp:TextBox runat = "server" id = "age" text =""></asp:TextBox>
         
     <asp:button runat = "server" id = "button1"OnClick = "Button_Click" text ="提交"></asp:button>
   </form>
  </body>
</html>

<script runat = "server">
  Sub Button_Click(s as object, e as eventargs)
    Dim Str1 as String
    Str1 = "您的姓名是:" & Request.Form("name")& "您的年齡是:" &Request.Form("age")
    label1.text = Str1
  End Sub
</script>

例二:用Form的GET方式發(fā)送數(shù)據(jù)
<html>
  <head>
  <title>使用GET方式發(fā)送數(shù)據(jù)</title>

  </head>
  <body>
    <form id = "form1" method = "post" runat ="server">
      <asp:label id = "label1" runat = "server" text="請?zhí)峤粩?shù)據(jù)"></asp:label>
      <br />
      <br />
      您的姓名:
      <asp:TextBox runat = "server" id = "name" text=""></asp:TextBox>
          
      您的年齡:
      <asp:TextBox runat = "server" id = "age" text=""></asp:TextBox>
          
      <asp:button runat = "server" id = "button1"OnClick = "Button_Click" text ="提交"></asp:button>
    </form>
  </body>
</html>

<script runat = "server">
  Sub Button_Click(s as object, e as eventargs)
    Dim Str1 as String
    Str1 = "您的姓名是:" & Request.QueryString("name")& "您的年齡是:" &Request.QueryString("age")
    label1.text = Str1
  End Sub
</script>

  事實(shí)上,我們在使用QueryString屬性時(shí),也可以通過在請求URL中添加附加信息來傳遞數(shù)據(jù),如:

/index.aspx?id=1234


  "?"后面的數(shù)據(jù)便是附加信息。其中"id"表示變量名,"1234"表示該變量的值,獲取id變量值的語句是Request.QueryString("id")。如果需要傳遞多個(gè)變量,則可用"&"符號鏈接,如:


/index.aspx?id=1234&userid=5678


  使用QueryString和Form屬性獲取數(shù)據(jù)的區(qū)別在于,前者是一種顯示傳遞,用戶可以在地址欄中看到傳遞的參數(shù)及參數(shù)值;而后者是一種隱式傳遞,在傳遞過程中,用戶是無法看到所傳遞的數(shù)據(jù)的。因此,使用Form屬性來獲取數(shù)據(jù)會更加安全。此外,由于URL得地址長度是有限的,因此使用QueryString屬性來接受的數(shù)據(jù)也是有限的。一般來說,該方式僅能傳遞256個(gè)字節(jié)的數(shù)據(jù),而通過Form屬性來接收的數(shù)據(jù)最大值可達(dá)到2MB。

Request的ServerVariables屬性包含了客戶機(jī)和服務(wù)器的相關(guān)環(huán)境變量。

ServerVariables屬性的常用環(huán)境變量

HTTP_USER_AGENT    用于獲取用戶瀏覽器的類型和版本號
REMOTE_ADDR      用于獲取用戶的IP地址
REQUEST_METHOD    用于獲取用戶提交數(shù)據(jù)的方法,如GET和POST
LOCAL_ADDR      用于獲取服務(wù)器地址的IP地址
SERVER_NAME      用于獲取服務(wù)器的主機(jī)名
PATH_INFO       用于獲取但前執(zhí)行程序的虛擬路徑
PATH_TRANSLATED    用于獲取當(dāng)前執(zhí)行程序的絕對路徑
CONETNT_LENGTH    用于獲取請求程序所發(fā)送內(nèi)容的字符總數(shù)
CONTENT_TYPE     用于獲取請求的信息類型
GATEWAY_INTERFACE   用于獲取網(wǎng)管接口
QUERY_STRING     用于獲取URL的附加信息
SCRIPT_NAME     用于獲取當(dāng)前程序的文件名(包含虛擬路徑)
SERVER_PORT     用于獲取服務(wù)器接受請求的端口
SERVER_PROTOCOL   用于獲取服務(wù)器的協(xié)議和版本號
HTTP_ACCEPT_LANGUAGE用于獲取用戶所使用的語言

  此外,Request還有一個(gè)cookie屬性,該屬性包含了Cookie對象。

二、Response對象

  Response對象對應(yīng)于ASP.NET中的HttpResponse類。當(dāng)客戶發(fā)出請求時(shí),CLR會根據(jù)用戶的請求建立一個(gè)Response對象。Response將用于回應(yīng)客戶瀏覽器。指示瀏覽器回應(yīng)內(nèi)容的包頭、服務(wù)器端的狀態(tài)信息,以及輸出指定的內(nèi)容等。

Response對象的相關(guān)屬性和方法如下:

ContentType屬性      用于指示Response對象的輸出內(nèi)容類型,默認(rèn)為text/html
Buffer屬性        表示是否對頁面進(jìn)行緩沖輸出,True表示是,F(xiàn)alse表是否,默認(rèn)為True,此方法與ASP兼容。
BufferOutPut屬性      表示是否對頁面進(jìn)行緩沖輸出,僅適用于ASP.NET
Clear屬性         用于清除緩沖區(qū)的所有內(nèi)容,包括Response顯示輸出信息及其頭信息
ClearContent屬性      用于清除緩沖區(qū)的Response顯示輸出信息
ClearHeaders屬性      用于清除緩沖區(qū)的頭信息
Expires屬性        用于設(shè)置頁面在瀏覽器Cache中失效的時(shí)間長度,單位為分鐘
ExpiresAbsolute屬性    用于設(shè)置頁面在瀏覽器Cache中失效的具體時(shí)間
Flush方法         表示立即將緩沖區(qū)的內(nèi)容向頁面輸出
Write方法         用于為當(dāng)前頁面輸出指定文本
End方法          用于立即停止當(dāng)前程序的處理并返回結(jié)果
BinaryWrite方法      用于將當(dāng)前指定信息不進(jìn)行任何字符轉(zhuǎn)換直接寫到當(dāng)前的HTTP輸出,此方法主要用來輸出非字符的信息
WriteFile方法       用于將內(nèi)容寫到指定的文件中
Redirect          用于設(shè)置頁面重定向

  Response對象的Write方法可以說是我們用的最多的語句,它主要用來在頁面上輸出文本,如:


Response.Write("Hello, World!")


  需要注意的是,在ASP中,Response對象的write方法可以直接寫輸出文本,不需要些括號,如:Response.Write"Hello,World!",而在ASP.NET中,括號是必須要的,這也是ASP開發(fā)人員在學(xué)習(xí)ASP.NET時(shí)最容易犯錯(cuò)誤的地方。

  此外,我們還可以將Response.Write語句放在腳本內(nèi)的函數(shù)或方法中使用。例如,下面的范例在VB腳本中定義了一個(gè)方法,調(diào)用Response.Write方法來輸出字符串參數(shù)。

例:
<script language = "vb" runat ="server">
  Sub PrintText(ByVal Str As String)
    response.write("下面是輸出的文本:")
    response.write(Str)
  End Sub
</script>

<%PrintText(Now.ToString)%>

  在程序設(shè)計(jì)時(shí),通常需要在不同的頁面之間跳轉(zhuǎn),從而滿足不同業(yè)務(wù)的流程需要,此時(shí),我們可以使用Response.Write方法來實(shí)現(xiàn)頁面的跳轉(zhuǎn)功能,如

Response.Redirect("Login.apsx")

  值得注意的是,使用Redirect方法將會消耗大量的服務(wù)器CPU時(shí)間。因此,如果不是特別需要的話,最好不要不加限制的使用它。

  ASP.NET提供了緩沖機(jī)制,允許將數(shù)據(jù)首先保存在服務(wù)器的緩沖區(qū)域。這樣就不用每次訪問時(shí)都重新執(zhí)行文件,而只從緩存中取出即可,從而加快頁面處理的速度和服務(wù)器的響應(yīng)時(shí)間。Response對象可以通過Buffer和BufferOutPut屬性來設(shè)置是否緩沖要輸出到客戶端的數(shù)據(jù),如:

Response.BufferOutPut = "true"

  上面的數(shù)據(jù)設(shè)置了緩沖數(shù)據(jù)為真,這意味著完成對整個(gè)頁面的處理之后才向客戶端輸出。Buffer和BufferOutPut實(shí)現(xiàn)的功能是一樣的,提供Buffer屬性僅僅是為了與ASP兼容,而通常在ASP.NET中使用的是BufferOutPut屬性。

  此外,ASP.NET還提供了兩個(gè)方法,即Clear和Flush來處理有關(guān)緩沖的內(nèi)容,使用這兩個(gè)方法的前提條件是BufferOutPut屬性或Buffer屬性已經(jīng)被設(shè)置為True。其中Clear方法用于清除緩沖區(qū)中的所有HTML輸出,F(xiàn)lush方法用于將當(dāng)前緩沖區(qū)的內(nèi)容強(qiáng)制輸出到客戶端。

  與Request對象一樣,在Response對象中也包含了一個(gè)cookies集合,該集合包含一些cookie對象。該對象是在服務(wù)器上創(chuàng)建的,并以Set-Cookie表頭的形式傳送到客戶端。

三、Server對象

  Server對象對應(yīng)于ASP.NET中的HttpServerUtility類,它允許方法服務(wù)器本身,獲取有關(guān)服務(wù)器的相關(guān)信息。

Server對象的常用屬性和方法如下:

MachineName屬性         用于獲取服務(wù)器的計(jì)算機(jī)名稱
ScriptTime屬性         用于設(shè)置或獲取請求服務(wù)器的超時(shí)時(shí)間,單位為秒
CreateObject方法        用于創(chuàng)建COM對象的一個(gè)服務(wù)器實(shí)例
Execute方法           用于使用另一頁面來執(zhí)行當(dāng)前請求
Transfer方法          用于終止當(dāng)前頁的執(zhí)行,并開始執(zhí)行當(dāng)前請求
HtmlDecode方法         用于對要顯示在瀏覽器中的字符進(jìn)行解碼
HtmlEncode方法         用于對要顯示在瀏覽器中的字符進(jìn)行編碼
UrlDecode方法         對字符串進(jìn)行解碼,該字符串為了HTTP傳輸而編碼并在URL中發(fā)送到服務(wù)器
UrlEncode方法         用于編碼字符串,以便通過URL從web服務(wù)器到客戶端執(zhí)行可靠的HTTP傳輸
UrlPathEncode方法       對URL字符串的路徑執(zhí)行URL編碼,返回該編碼字符串
MapPath方法          返回與web服務(wù)區(qū)上的虛擬目錄對應(yīng)的物理路徑
ToString方法          以字符串的形式返回對象的信息

  HtmlEncode是Server對象中用得較多的一個(gè)方法,它用于對顯示在瀏覽器中的字符串進(jìn)行編碼。首先看下面這條語句:

Response.Write("<center><b>ASP.NET</b></center>")

  其作用是在瀏覽器中局中并加粗顯示“ASP.NET”。但是如果我們需要將“<center><b>ASP.NET</b></center>”作為一個(gè)完整的字符串顯示在瀏覽器中,則通過HtmlEncode方法可以輕松的實(shí)現(xiàn),如:

Response.Write("Server.HtmlEncode(<center><b>ASP.NET</b></center>)")

  事實(shí)上,經(jīng)過HtmlEncode編碼后,字符串已經(jīng)轉(zhuǎn)換為:

<center&rt;<b&rt;ASP.NET</b&rt;</center&rt;

HtmlDecode方法的作用與HtmlEncode方法的作用相反,它將HTML編碼的代碼進(jìn)行解碼,恢復(fù)代碼的本來面目。


四、Application對象


  Application對象對應(yīng)于ASP.NET中的HttpApplicationState類,它主要用來在整個(gè)應(yīng)用程序中共享信息。Application對象可以直接在應(yīng)用程序狀態(tài)中存儲變量和對象,這些變量和對象在整個(gè)應(yīng)用程序執(zhí)行的所有ASP.NET頁面中都是可用的,其值也相同。例如,我們用的最多的保存頁面的訪問計(jì)數(shù)即可通過Application對象實(shí)現(xiàn)。

Application對象的相關(guān)屬性和方法如下:

Allkeys屬性         獲取應(yīng)用程序狀態(tài)集合中的對象鍵
Contents屬性        獲取應(yīng)用程序狀態(tài)集合的對象引用
Count屬性          獲取所含對象的總數(shù)
StaticObjects屬性      獲取以<boject>標(biāo)記的且其范圍設(shè)置為Application的所有對象
Add方法           添加一個(gè)對象到應(yīng)用程序狀態(tài)集合中
Lock方法           鎖定應(yīng)用程序狀態(tài)對象以保證并發(fā)訪問
UnLock方法          取消鎖定
Clear方法          從應(yīng)用程序狀態(tài)集合中移除所有對象
Remove方法         從應(yīng)用程序狀態(tài)集合中移除指定對象
RemoveAll方法        從應(yīng)用程序狀態(tài)集合中移除所有對象

例如,下面的語句在應(yīng)用程序狀態(tài)內(nèi)創(chuàng)建一個(gè)新的變量,其名稱為“AppVarName”,值為“VarValue”:

Application("AppvarNAame") = "VarValue"

  在一個(gè)ASP.NET頁面執(zhí)行這個(gè)語句后,在同一個(gè)應(yīng)用程序的其他頁面都可以直接獲取AppVarName的值。要讀取應(yīng)用程序狀態(tài)變量的值,可以使用如下語句:

Response.Write(Application("AppVarName"))

  它在頁面上顯示應(yīng)用程序狀態(tài)變量的值。
  當(dāng)然,我們也可以將一個(gè)對象保存在應(yīng)用程序狀態(tài)變量中。例如,講一個(gè)DataTable對象添加到應(yīng)用程序狀態(tài)中,如下所示:

Application("DataTable") = dtbDataTable

  實(shí)際上,應(yīng)用程序狀態(tài)變量可以說是ASP.NET應(yīng)用程序的全局變量,它一直保存到應(yīng)用程序被關(guān)閉或者現(xiàn)實(shí)的刪除此變量時(shí)。因此,在應(yīng)用程序狀態(tài)中添加復(fù)雜對象時(shí),要考慮到應(yīng)用程序的內(nèi)存開銷。

要從應(yīng)用程序狀態(tài)中移除特定的變量,可使用Remove方法。例如:

Application.Remove("AppVarName")

  執(zhí)行此語句后,應(yīng)用程序狀態(tài)中將不再存在AppVarName變量。
  若要移除應(yīng)用程序狀態(tài)中所有變量??墒褂肅lear或者RemoveAll方法。例如:

Application.Removeall()

或者

Application.Clear()

五、Session對象

  Session對象對應(yīng)于HttpSessionState類,它主要用于保存與當(dāng)前用戶會話相關(guān)的信息。與Application對象不同的是,Session對象與用戶相關(guān)聯(lián)。對于同一個(gè)用戶,在應(yīng)用程序內(nèi)不同的頁面訪問同一個(gè)Session變量,其值相同;而不同的用戶擁有不同的Session變量,其內(nèi)容不同。對于每一個(gè)Session對象,都有一個(gè)SessionID來唯一標(biāo)識它。

Session對象的相關(guān)屬性和方法如下:

SessionID屬性        用于表示會話的標(biāo)識ID
Count屬性          當(dāng)前會話狀態(tài)包含的項(xiàng)數(shù)
Mode屬性          獲取當(dāng)前會話的模式
TimeOut屬性         會話狀態(tài)的過期時(shí)間,以分鐘為單位
Abandon屬性         取消當(dāng)前會話
Clear方法          清除當(dāng)前會話中的所有值
RemoveAll方法        清除當(dāng)前會話中的所有值
Remove方法         清除當(dāng)前會話中的指定值

六、Cookie對象

  Cookie對象對應(yīng)于HttpCookie類,它主要用來在用戶的瀏覽器上存儲小塊兒的信息,同時(shí)也可用來處理與當(dāng)前用戶會話有關(guān)的信息。

Cookie對象的相關(guān)屬性和方法如下:

Name屬性              用于獲取Cookie的名字
Value屬性              用于設(shè)置或獲取Cookie的值
Domain屬性             用于設(shè)置或獲取與Cookie相關(guān)的域,默認(rèn)為接收到該Cookie的主機(jī)
Expires屬性             用于設(shè)置或獲取Cookie的過期時(shí)間
Values屬性             用于獲取字典Cookie的鍵值
HasKeys屬性             用于判斷是否包含鍵,即是否為字典Cookie
Path屬性              用于獲取或設(shè)置與當(dāng)前Cookie一起傳輸?shù)奶摂M路徑,通常保留其默認(rèn)值
Secure屬性             表示Cookie是否通過保密傳輸,默認(rèn)為False

  Cookie對象可以分為兩種類型,即會話Cookie(SessionCookie)和持久性Cookie,前者是臨時(shí)的Cookie,一旦會話狀態(tài)結(jié)束便會自動(dòng)的消失;后者則具有確定的過期時(shí)間。一般來說,持久性Cookie在用戶的計(jì)算機(jī)上都是以文本文件的形似存儲的。

  為創(chuàng)建一個(gè)Cookie,首先要初始化一個(gè)HttpCookie對象實(shí)例,然后將其添加到Response的Cookie集合中,例如:

Dim objCookie As New HttpCookie("TestCookie","會話Cookie")
Response.Cookikes.Add(objCookie)

  這里添加的是一個(gè)會話Cookie,它被添加到瀏覽器的會話內(nèi)存中,但不會被寫入到用戶的硬盤文件中。一旦用戶關(guān)閉瀏覽器,該Cookie對象便會消失。

  如果要?jiǎng)?chuàng)建一個(gè)持久性Cookie,則只需在創(chuàng)建時(shí)為其指定一個(gè)過期時(shí)間即可。這樣它就會以文本文件的形式保存到用戶的計(jì)算機(jī)中,直到到達(dá)指定的時(shí)間。例如:


Dim objCookie As New HttpCookie("TestCookie","會話Cookie")
objCookie.Expires = "#10/1/2012#"
Response.Cookikes.Add(objCookie)

  如果需要獲取一個(gè)Cookie值,則可訪問Request對象的Cookie集合,例如,以下將遍歷并顯示當(dāng)前Request對象中的所有Cookie:

Dim CookieName As String
For Each CookieName In Request.Cookies
Response.Write("Cookie名稱:" & CookieName& ",Cookie內(nèi)容:" &Request.Cookies(CookieName).Value) &"<br />"

  值得注意的是,Cookie只能保存字符串信息,當(dāng)保存的是整數(shù)值時(shí),應(yīng)先將其轉(zhuǎn)換為字符串。


    本站是提供個(gè)人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點(diǎn)。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點(diǎn)擊一鍵舉報(bào)。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多