在ASP中包含6個(gè)無(wú)需創(chuàng)建即可直接調(diào)用和訪問的內(nèi)置對(duì)象,即Request,Response,Session,Application,Server和Cookie。當(dāng)web應(yīng)用程序運(yùn)行時(shí),這些對(duì)象可以用來維護(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ì)象是由封裝好的類來定義的,且已成為HttpContext類(封裝了特定http請(qǐng)求的所有信息)的屬性。由于ASP.NET在初始化頁(yè)面請(qǐng)求時(shí)已經(jīng)自動(dòng)創(chuàng)建了這些內(nèi)部對(duì)象,因此可以直接使用它們而無(wú)需再對(duì)類進(jìn)行實(shí)例化。
一、Request對(duì)象
Request對(duì)象對(duì)應(yīng)ASP.NET中的HttpRequest類,當(dāng)客戶端發(fā)出請(qǐng)求執(zhí)行ASP.NET程序時(shí),CLR會(huì)將客戶端的請(qǐng)求信息包含在Request對(duì)象中,其中包括報(bào)頭(Head)、客戶端瀏覽器的信息(包括瀏覽器類型及瀏覽器版本號(hào))、編碼方式、請(qǐng)求方法(包括POST及GET),幾所帶參數(shù)信息(包括參數(shù)名及參數(shù)值)等。通過使用Request對(duì)象,我們可以訪問HTML基于表單的數(shù)據(jù)和通過URL發(fā)送的參數(shù)列表信息,同時(shí)還可以接受來自客戶端的Cookie信息。
Request對(duì)象的調(diào)用方法如下:
Request.Collection("Variable")
Collection是一個(gè)屬性集合,包括QueySrting,F(xiàn)orm,cookies和ServerVariables,表示獲取數(shù)據(jù)的方法。其中,
當(dāng)Request對(duì)象使用Form屬性來獲取窗體表單的數(shù)據(jù)時(shí),一般是在窗體頁(yè)面提交完成之后。窗體頁(yè)面的提交方式有兩種,即POST和GET。當(dāng)使用POST提交方式時(shí),窗體中的數(shù)據(jù)會(huì)作為Form集合的元素被發(fā)送到服務(wù)器端;當(dāng)使用GET提交方式時(shí),窗體中的表單數(shù)據(jù)將作為查詢字符串的形式通過URL傳遞。此時(shí),要得到其值,可使用Request對(duì)象的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="請(qǐng)?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="請(qǐng)?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í)上,我們?cè)谑褂肣ueryString屬性時(shí),也可以通過在請(qǐng)求URL中添加附加信息來傳遞數(shù)據(jù),如:
/index.aspx?id=1234
"?"后面的數(shù)據(jù)便是附加信息。其中"id"表示變量名,"1234"表示該變量的值,獲取id變量值的語(yǔ)句是Request.QueryString("id")。如果需要傳遞多個(gè)變量,則可用"&"符號(hào)鏈接,如:
/index.aspx?id=1234&userid=5678
使用QueryString和Form屬性獲取數(shù)據(jù)的區(qū)別在于,前者是一種顯示傳遞,用戶可以在地址欄中看到傳遞的參數(shù)及參數(shù)值;而后者是一種隱式傳遞,在傳遞過程中,用戶是無(wú)法看到所傳遞的數(shù)據(jù)的。因此,使用Form屬性來獲取數(shù)據(jù)會(huì)更加安全。此外,由于URL得地址長(zhǎng)度是有限的,因此使用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 用于獲取用戶瀏覽器的類型和版本號(hào)
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í)行程序的絕對(duì)路徑
CONETNT_LENGTH 用于獲取請(qǐng)求程序所發(fā)送內(nèi)容的字符總數(shù)
CONTENT_TYPE 用于獲取請(qǐng)求的信息類型
GATEWAY_INTERFACE 用于獲取網(wǎng)管接口
QUERY_STRING 用于獲取URL的附加信息
SCRIPT_NAME 用于獲取當(dāng)前程序的文件名(包含虛擬路徑)
SERVER_PORT 用于獲取服務(wù)器接受請(qǐng)求的端口
SERVER_PROTOCOL 用于獲取服務(wù)器的協(xié)議和版本號(hào)
HTTP_ACCEPT_LANGUAGE
此外,Request還有一個(gè)cookie屬性,該屬性包含了Cookie對(duì)象。
二、Response對(duì)象
Response對(duì)象對(duì)應(yīng)于ASP.NET中的HttpResponse類。當(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屬性
Buffer屬性
BufferOutPut屬性 表示是否對(duì)頁(yè)面進(jìn)行緩沖輸出,僅適用于ASP.NET
Clear屬性
ClearContent屬性 用于清除緩沖區(qū)的Response顯示輸出信息
ClearHeaders屬性 用于清除緩沖區(qū)的頭信息
Expires屬性 用于設(shè)置頁(yè)面在瀏覽器Cache中失效的時(shí)間長(zhǎng)度,單位為分鐘
ExpiresAbsolute屬性 用于設(shè)置頁(yè)面在瀏覽器Cache中失效的具體時(shí)間
Flush方法
Write方法 用于為當(dāng)前頁(yè)面輸出指定文本
End方法 用于立即停止當(dāng)前程序的處理并返回結(jié)果
BinaryWrite方法 用于將當(dāng)前指定信息不進(jìn)行任何字符轉(zhuǎn)換直接寫到當(dāng)前的HTTP輸出,此方法主要用來輸出非字符的信息
WriteFile方法 用于將內(nèi)容寫到指定的文件中
Redirect 用于設(shè)置頁(yè)面重定向
Response對(duì)象的Write方法可以說是我們用的最多的語(yǔ)句,它主要用來在頁(yè)面上輸出文本,如:
Response.Write("Hello, World!")
需要注意的是,在ASP中,Response對(duì)象的write方法可以直接寫輸出文本,不需要些括號(hào),如:Response.Write"Hello,World!",而在ASP.NET中,括號(hào)是必須要的,這也是ASP開發(fā)人員在學(xué)習(xí)ASP.NET時(shí)最容易犯錯(cuò)誤的地方。
此外,我們還可以將Response.Write語(yǔ)句放在腳本內(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í),通常需要在不同的頁(yè)面之間跳轉(zhuǎn),從而滿足不同業(yè)務(wù)的流程需要,此時(shí),我們可以使用Response.Write方法來實(shí)現(xiàn)頁(yè)面的跳轉(zhuǎn)功能,如
Response.Redirect("Login.apsx")
值得注意的是,使用Redirect方法將會(huì)消耗大量的服務(wù)器CPU時(shí)間。因此,如果不是特別需要的話,最好不要不加限制的使用它。
ASP.NET提供了緩沖機(jī)制,允許將數(shù)據(jù)首先保存在服務(wù)器的緩沖區(qū)域。這樣就不用每次訪問時(shí)都重新執(zhí)行文件,而只從緩存中取出即可,從而加快頁(yè)面處理的速度和服務(wù)器的響應(yīng)時(shí)間。Response對(duì)象可以通過Buffer和BufferOutPut屬性來設(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來處理有關(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對(duì)象一樣,在Response對(duì)象中也包含了一個(gè)cookies集合,該集合包含一些cookie對(duì)象。該對(duì)象是在服務(wù)器上創(chuàng)建的,并以Set-Cookie表頭的形式傳送到客戶端。
三、Server對(duì)象
Server對(duì)象對(duì)應(yīng)于ASP.NET中的HttpServerUtility類,它允許方法服務(wù)器本身,獲取有關(guān)服務(wù)器的相關(guān)信息。
Server對(duì)象的常用屬性和方法如下:
MachineName屬性 用于獲取服務(wù)器的計(jì)算機(jī)名稱
ScriptTime屬性 用于設(shè)置或獲取請(qǐng)求服務(wù)器的超時(shí)時(shí)間,單位為秒
CreateObject方法 用于創(chuàng)建COM對(duì)象的一個(gè)服務(wù)器實(shí)例
Execute方法 用于使用另一頁(yè)面來執(zhí)行當(dāng)前請(qǐng)求
Transfer方法 用于終止當(dāng)前頁(yè)的執(zhí)行,并開始執(zhí)行當(dāng)前請(qǐng)求
HtmlDecode方法 用于對(duì)要顯示在瀏覽器中的字符進(jìn)行解碼
HtmlEncode方法 用于對(duì)要顯示在瀏覽器中的字符進(jìn)行編碼
UrlDecode方法 對(duì)字符串進(jìn)行解碼,該字符串為了HTTP傳輸而編碼并在URL中發(fā)送到服務(wù)器
UrlEncode方法 用于編碼字符串,以便通過URL從web服務(wù)器到客戶端執(zhí)行可靠的HTTP傳輸
UrlPathEncode方法 對(duì)URL字符串的路徑執(zhí)行URL編碼,返回該編碼字符串
MapPath方法 返回與web服務(wù)區(qū)上的虛擬目錄對(duì)應(yīng)的物理路徑
ToString方法 以字符串的形式返回對(duì)象的信息
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è)完整的字符串顯示在瀏覽器中,則通過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對(duì)象
Application對(duì)象對(duì)應(yīng)于ASP.NET中的HttpApplicationState類,它主要用來在整個(gè)應(yīng)用程序中共享信息。Application對(duì)象可以直接在應(yīng)用程序狀態(tài)中存儲(chǔ)變量和對(duì)象,這些變量和對(duì)象在整個(gè)應(yīng)用程序執(zhí)行的所有ASP.NET頁(yè)面中都是可用的,其值也相同。例如,我們用的最多的保存頁(yè)面的訪問計(jì)數(shù)即可通過Application對(duì)象實(shí)現(xiàn)。
Application對(duì)象的相關(guān)屬性和方法如下:
Allkeys屬性 獲取應(yīng)用程序狀態(tài)集合中的對(duì)象鍵
Contents屬性 獲取應(yīng)用程序狀態(tài)集合的對(duì)象引用
Count屬性 獲取所含對(duì)象的總數(shù)
StaticObjects屬性 獲取以<boject>標(biāo)記的且其范圍設(shè)置為Application的所有對(duì)象
Add方法 添加一個(gè)對(duì)象到應(yīng)用程序狀態(tài)集合中
Lock方法 鎖定應(yīng)用程序狀態(tài)對(duì)象以保證并發(fā)訪問
UnLock方法 取消鎖定
Clear方法 從應(yīng)用程序狀態(tài)集合中移除所有對(duì)象
Remove方法 從應(yīng)用程序狀態(tài)集合中移除指定對(duì)象
RemoveAll方法 從應(yīng)用程序狀態(tài)集合中移除所有對(duì)象
例如,下面的語(yǔ)句在應(yīng)用程序狀態(tài)內(nèi)創(chuàng)建一個(gè)新的變量,其名稱為“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)變量的值。
當(dāng)然,我們也可以將一個(gè)對(duì)象保存在應(yīng)用程序狀態(tài)變量中。例如,講一個(gè)DataTable對(duì)象添加到應(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ù)雜對(duì)象時(shí),要考慮到應(yīng)用程序的內(nèi)存開銷。
要從應(yīng)用程序狀態(tài)中移除特定的變量,可使用Remove方法。例如:
Application.Remove("AppVarName")
執(zhí)行此語(yǔ)句后,應(yīng)用程序狀態(tài)中將不再存在AppVarName變量。
若要移除應(yīng)用程序狀態(tài)中所有變量??墒褂肅lear或者RemoveAll方法。例如:
Application.Removeall()
或者
Application.Clear()
五、Session對(duì)象
Session對(duì)象對(duì)應(yīng)于HttpSessionState類,它主要用于保存與當(dāng)前用戶會(huì)話相關(guān)的信息。與Application對(duì)象不同的是,Session對(duì)象與用戶相關(guān)聯(lián)。對(duì)于同一個(gè)用戶,在應(yīng)用程序內(nèi)不同的頁(yè)面訪問同一個(gè)Session變量,其值相同;而不同的用戶擁有不同的Session變量,其內(nèi)容不同。對(duì)于每一個(gè)Session對(duì)象,都有一個(gè)SessionID來唯一標(biāo)識(shí)它。
Session對(duì)象的相關(guān)屬性和方法如下:
SessionID屬性 用于表示會(huì)話的標(biāo)識(shí)ID
Count屬性 當(dāng)前會(huì)話狀態(tài)包含的項(xiàng)數(shù)
Mode屬性 獲取當(dāng)前會(huì)話的模式
TimeOut屬性 會(huì)話狀態(tài)的過期時(shí)間,以分鐘為單位
Abandon屬性 取消當(dāng)前會(huì)話
Clear方法 清除當(dāng)前會(huì)話中的所有值
RemoveAll方法 清除當(dāng)前會(huì)話中的所有值
Remove方法 清除當(dāng)前會(huì)話中的指定值
六、Cookie對(duì)象
Cookie對(duì)象對(duì)應(yīng)于HttpCookie類,它主要用來在用戶的瀏覽器上存儲(chǔ)小塊兒的信息,同時(shí)也可用來處理與當(dāng)前用戶會(huì)話有關(guān)的信息。
Cookie對(duì)象的相關(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對(duì)象可以分為兩種類型,即會(huì)話Cookie(SessionCookie)和持久性Cookie,前者是臨時(shí)的Cookie,一旦會(huì)話狀態(tài)結(jié)束便會(huì)自動(dòng)的消失;后者則具有確定的過期時(shí)間。一般來說,持久性Cookie在用戶的計(jì)算機(jī)上都是以文本文件的形似存儲(chǔ)的。
為創(chuàng)建一個(gè)Cookie,首先要初始化一個(gè)HttpCookie對(duì)象實(shí)例,然后將其添加到Response的Cookie集合中,例如:
Dim objCookie As New HttpCookie("TestCookie","會(huì)話Cookie")
Response.Cookikes.Add(objCookie)
這里添加的是一個(gè)會(huì)話Cookie,它被添加到瀏覽器的會(huì)話內(nèi)存中,但不會(huì)被寫入到用戶的硬盤文件中。一旦用戶關(guān)閉瀏覽器,該Cookie對(duì)象便會(huì)消失。
如果要?jiǎng)?chuàng)建一個(gè)持久性Cookie,則只需在創(chuàng)建時(shí)為其指定一個(gè)過期時(shí)間即可。這樣它就會(huì)以文本文件的形式保存到用戶的計(jì)算機(jī)中,直到到達(dá)指定的時(shí)間。例如:
Dim objCookie As New HttpCookie("TestCookie","會(huì)話Cookie")
objCookie.Expires = "#10/1/2012#"
Response.Cookikes.Add(objCookie)
如果需要獲取一個(gè)Cookie值,則可訪問Request對(duì)象的Cookie集合,例如,以下將遍歷并顯示當(dāng)前Request對(duì)象中的所有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)換為字符串。
聯(lián)系客服