ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象_第1頁(yè)
ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象_第2頁(yè)
ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象_第3頁(yè)
ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象_第4頁(yè)
ASPnet開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象_第5頁(yè)
已閱讀5頁(yè),還剩67頁(yè)未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡(jiǎn)介

3.1一個(gè)簡(jiǎn)單的ASP.NET應(yīng)用程序3.2關(guān)于ASP.NET3.3ASP.NET控件和內(nèi)置對(duì)象

Response Request Session Application Cookie第3

-1章開(kāi)發(fā)環(huán)境和內(nèi)置對(duì)象3.1一個(gè)簡(jiǎn)單的ASP.NET應(yīng)用程序3.1.1創(chuàng)建ASP.NET應(yīng)用程序【例11.1】基于C#的簡(jiǎn)單ASP.NET應(yīng)用程序。這是一個(gè)簡(jiǎn)單的ASP.NET應(yīng)用程序,其作用是將文本框中輸入的字符串顯示在網(wǎng)頁(yè)上。創(chuàng)建步驟如下:(1)啟動(dòng)VS2008,選擇“文件”|“新建”|“項(xiàng)目”,打開(kāi)“新建項(xiàng)目”對(duì)話框。在此對(duì)話框的“項(xiàng)目類(lèi)型”框中選擇“VisualC#”項(xiàng),在“模板”框中選擇“ASP.NETWeb應(yīng)用程序”,表示要?jiǎng)?chuàng)建基于C#的ASP.NET應(yīng)用程序,將程序名設(shè)置為MyFirstWebApp:(2)單擊【確定】按鈕,然后在生成界面的“解決方案資源管理器”中右擊“Default.aspx”節(jié)點(diǎn),在彈出的菜單中選擇“視圖設(shè)計(jì)器”,以可打開(kāi)頁(yè)面的視圖設(shè)計(jì)器。(3)將工具箱中的三個(gè)控件拖到設(shè)計(jì)界面中,這三個(gè)控件分別是Label、TextBox和Button控件,并適當(dāng)設(shè)置它們的屬性和位置:3.1一個(gè)簡(jiǎn)單的ASP.NET應(yīng)用程序3.1.1創(chuàng)建ASP.NET應(yīng)用程序(4)在設(shè)計(jì)界面中,雙擊【訪問(wèn)控件】按鈕,即可進(jìn)入到該按鈕的事件處理函數(shù)中,實(shí)際上是在Default.aspx.cs文件中生成了Button1_Click函數(shù)。在該函數(shù)中,添加下列代碼:

Label1.Text=TextBox1.Text;Label1.Font.Size=20;(5)運(yùn)行程序MyFirstWebApp。方法是:按【Ctrl】+【F5】按鈕直接運(yùn)行,也可以單擊快捷菜單欄上的“啟動(dòng)調(diào)試”按鈕(相當(dāng)于按【F5】)。在打開(kāi)的IE瀏覽器界面的文本框中輸入一些字符串,然后單擊【訪問(wèn)控件】按鈕:——至此,一個(gè)簡(jiǎn)單的ASP.NET應(yīng)用程序開(kāi)發(fā)完畢。3.1一個(gè)簡(jiǎn)單的ASP.NET應(yīng)用程序3.1.1創(chuàng)建ASP.NET應(yīng)用程序讀者可能注意到,雖然做的是網(wǎng)頁(yè)程序,但沒(méi)有感覺(jué)到要編寫(xiě)任何的網(wǎng)頁(yè)代碼(編寫(xiě)HTML代碼是一件煩雜的事情),而只是進(jìn)行控件的拖放、控件屬性的設(shè)置以及C#代碼的編寫(xiě),這與開(kāi)發(fā)C#窗體應(yīng)用程序幾乎沒(méi)有什么區(qū)別。這是ASP.NET對(duì)Web應(yīng)用程序設(shè)計(jì)的極大改進(jìn)。造成這種改進(jìn)主要是由于.NET平臺(tái)采用了界面和代碼分開(kāi)的策略,即網(wǎng)頁(yè)文件放在Default.aspx文件中,而C#代碼則放在Default.aspx.cs文件中。3.1一個(gè)簡(jiǎn)單的ASP.NET應(yīng)用程序3.1.1創(chuàng)建ASP.NET應(yīng)用程序Default.aspx.cs文件是與頁(yè)面元素相關(guān)聯(lián)的C#文件,它就是ASP.NET代碼隱藏的地方。對(duì)ASP.NET應(yīng)用程序來(lái)說(shuō),這里就是程序員的“用武之地”。前面指出的“界面元素和代碼分開(kāi)”,指的就是將程序文件分為ASP.NET應(yīng)用中的.aspx文件和.aspx.cs文件。ASP(ActiveServerPages)是Microsfot公司于1996年11月推出的面向WEB應(yīng)用程序開(kāi)發(fā)的技術(shù)框架,但它不是程序設(shè)計(jì)語(yǔ)言,也不是開(kāi)發(fā)工具。簡(jiǎn)單地,ASP主要是由“<%”和“%>”掛起來(lái)的代碼嵌入到HTML中的一種技術(shù)。這些代碼是在服務(wù)器端執(zhí)行,執(zhí)行時(shí)無(wú)需編譯,可以用任何的文本編輯器編寫(xiě)(如記事本等)。此外,ASP可以通過(guò)內(nèi)置的組件實(shí)現(xiàn)更強(qiáng)大的功能,如使用ADO可以輕松地訪問(wèn)數(shù)據(jù)庫(kù)。ASP.NET則是從HTML發(fā)展到ASP,然后伴隨著微軟的.NET技術(shù)的推出而出現(xiàn)的。ASP.NET不是ASP的簡(jiǎn)單升級(jí),而是全新一代的動(dòng)態(tài)網(wǎng)頁(yè)開(kāi)發(fā)系統(tǒng),用于在一臺(tái)Web服務(wù)器上建立強(qiáng)大的應(yīng)用程序。它是Microsoft.NET技術(shù)的一個(gè)組成部分,是ASP和.NET技術(shù)結(jié)合的產(chǎn)物。在MicrosoftVisualStudio2005/2008中,利用.NET提供的控件,可快速開(kāi)發(fā)ASP.NET應(yīng)用程序,大大簡(jiǎn)化了編碼的過(guò)程。3.2關(guān)于ASP.NET3.1.1創(chuàng)建ASP.NET應(yīng)用程序相對(duì)ASP而言,ASP.NET具有的主要優(yōu)勢(shì)包括:實(shí)現(xiàn)界面和代碼的分開(kāi)編譯執(zhí)行使用強(qiáng)類(lèi)型(strongly-type)編程語(yǔ)言3.2關(guān)于ASP.NET3.1.1創(chuàng)建ASP.NET應(yīng)用程序ASP.NET主要包括兩種編程模型:WebForm:提供了建立功能強(qiáng)大、外觀豐富的基于表單(Form)的可編程Web頁(yè)面,這幾乎與VB.NET、C#.NET的窗體開(kāi)發(fā)界面是一樣的WebService

:通過(guò)對(duì)HTTP、XML、SOAP、WSDL等Internet標(biāo)準(zhǔn)的支持提供在異構(gòu)網(wǎng)絡(luò)環(huán)境下獲取遠(yuǎn)程服務(wù)、連接遠(yuǎn)程設(shè)備、交互遠(yuǎn)程應(yīng)用的編程界面ASP.NET提供了大量的控件,當(dāng)用戶(hù)將控件拖到Web窗體設(shè)計(jì)界面時(shí),會(huì)自動(dòng)生成相應(yīng)的HTML代碼和C#代碼。這為Web應(yīng)用程序的可視化界面設(shè)計(jì)提供極大的便利,避免了使用HTML標(biāo)記語(yǔ)言編寫(xiě)大量代碼的麻煩。ASP.NET控件主要分為兩大類(lèi):Web窗體控件和HTML控件:3.3ASP.NET控件和對(duì)象3.3.1ASP.NET控件對(duì)于Web窗體控件和HTML控件,需要注意以下幾點(diǎn):

(1)Web窗體控件是服務(wù)器端控件,即它們?cè)诜?wù)器端運(yùn)行,因此不要求客戶(hù)端瀏覽器支持Web窗體控件(如不要求安裝.NETFramework等),我們?cè)跒g覽器看到的只是這些控件運(yùn)行后輸出的結(jié)果;HTML控件是客戶(hù)端控件,只有瀏覽器支持這些控件,它們才能運(yùn)行。(2)Web窗體控件是以C#

為腳本語(yǔ)言,其功能十分強(qiáng)大。HTML控件則以javascript等為腳本語(yǔ)言,其功能較前者弱得多。(3)在設(shè)計(jì)界面上,當(dāng)雙擊Web窗體控件時(shí),會(huì)自動(dòng)在.cs文件中形成并打開(kāi)控件的Click事件處理函數(shù)(C#語(yǔ)言),以供用戶(hù)編寫(xiě)代碼;當(dāng)雙擊HTML控件時(shí),則會(huì)自動(dòng)在.aspx文件中形成并打開(kāi)控件的onclick事件處理函數(shù)(javascript語(yǔ)言)。3.3ASP.NET控件和對(duì)象3.3.1ASP.NET控件【例11.2】使用ASP.NET控件實(shí)現(xiàn)頁(yè)面之間傳遞數(shù)據(jù)的ASP.NET應(yīng)用程序。本例介紹如何使用QueryString來(lái)解決這個(gè)問(wèn)題。3.3ASP.NET控件和對(duì)象3.3.1ASP.NET控件(1)在VS2008中創(chuàng)建一個(gè)ASP.NET應(yīng)用程序testWebControlApp。(2)添加一個(gè)Web頁(yè),方法是:選擇“項(xiàng)目”|“添加新項(xiàng)”,在打開(kāi)的“添加新項(xiàng)”對(duì)話框中選擇“Web窗體”。(3)在視圖設(shè)計(jì)器中打開(kāi)文件Default.aspx的設(shè)計(jì)界面,然后在其設(shè)計(jì)界面中分別添加2個(gè)Label控件、2個(gè)TextBox控件和1個(gè)Button控件,并在屬性編輯器中修改Label和Button控件的Text屬性、將TextBox控件的ID分別改為username和password,還將后一個(gè)TextBox控件的TextModel屬性值設(shè)置為password,以將框作為密碼輸入框。設(shè)計(jì)界面如下:(4)在視圖設(shè)計(jì)器中打開(kāi)文件WebForm1.aspx的設(shè)計(jì)界面,在設(shè)計(jì)界面中直接添加2個(gè)Label控件即可,它們的ID自動(dòng)被設(shè)置為L(zhǎng)abel1和Label2。(5)在文件Default.aspx的設(shè)計(jì)界面中,雙擊【登錄】按鈕,在產(chǎn)生的Click事件處理函數(shù)中添加如下代碼:

stringdataStr;dataStr="WebForm1.aspx?username="+username.Text+"&password="+password.Text;Response.Redirect(dataStr);(6)在文件WebForm1.aspx的設(shè)計(jì)界面中,雙擊任意一個(gè)空白處,將自動(dòng)產(chǎn)生Page_Load函數(shù),在該函數(shù)中添加下列代碼:Label1.Text=Request.QueryString["username"];Label2.Text=Request.QueryString["password"];3.3ASP.NET控件和對(duì)象3.3.1ASP.NET控件(7)運(yùn)行文件Default.aspx,在文本框中輸入用戶(hù)名和密碼。然后單擊【登錄】按鈕,結(jié)果輸入的用戶(hù)名和密碼被傳送到文件WebForm1.aspx對(duì)應(yīng)的頁(yè)面中。3.3ASP.NET控件和對(duì)象3.3.1ASP.NET控件——從運(yùn)行結(jié)果可以看到,Default.aspx頁(yè)面中的數(shù)據(jù)已經(jīng)成功傳送到WebForm1.aspx頁(yè)面中。1.Response對(duì)象系統(tǒng)根據(jù)用戶(hù)的請(qǐng)求(打開(kāi)一個(gè)頁(yè)面)自動(dòng)創(chuàng)建一個(gè)Response對(duì)象。該對(duì)象用于向客戶(hù)端傳遞或輸出相關(guān)的信息,這些信息包括用戶(hù)定義的內(nèi)容、內(nèi)容的報(bào)頭、服務(wù)器的狀態(tài)等。其常用的屬性和方法包括:Buffer屬性該屬性用于設(shè)置服務(wù)器端是否開(kāi)啟緩存功能。如果其值為true,表示開(kāi)啟IIS緩存功能,這時(shí)服務(wù)器會(huì)處理整個(gè)頁(yè)面后再發(fā)給客戶(hù)端,這樣用戶(hù)就可以看到連續(xù)的界面,當(dāng)然這是以犧牲服務(wù)器的內(nèi)存資源為代價(jià);如果其值為false,表示不開(kāi)啟IIS緩存功能,這時(shí)服務(wù)器會(huì)一邊處理一邊發(fā)送,這時(shí)用戶(hù)看到的界面可能是間斷的。Expires屬性該屬性的值表示頁(yè)面的有效期,單位為分鐘。如果用戶(hù)請(qǐng)求其有效期滿(mǎn)之前的相同頁(yè)面,將直接讀取顯示緩沖區(qū)中的內(nèi)容,這個(gè)有效期間過(guò)后,頁(yè)面將不再保留緩沖區(qū)中的內(nèi)容。3.3ASP.NET控件和對(duì)象3.3.2ASP.NE常用對(duì)象Write()方法該方法用于向客戶(hù)端輸出指定的內(nèi)容,由客戶(hù)端解釋執(zhí)行。例如:Response.Write("今天的日期時(shí)間:");Response.Write(DateTime.Now.ToString());Redirect()方法該方法用于重定向到指定的URL。例如:Response.Redirect("/");//重定向到“搜狐”主頁(yè)Response.Redirect("WebForm1.aspx");//重定向到WebForm1.aspx頁(yè)面也可以在重定向的同時(shí)傳遞一些數(shù)據(jù),例如,下列語(yǔ)句在重定向到WebForm1.aspx頁(yè)面的同時(shí)傳遞字符串“abc”:Response.Redirect("WebForm1.aspx?strname="+"abc");3.3ASP.NET控件和對(duì)象3.3.2ASP.NE常用對(duì)象AddHeade()方法增加HTTP頭的集合中的元素。如:Response.AddHeader("headname","headvalue");Clear()方法該方法用于清空IIS緩沖區(qū)中的內(nèi)容(Response.Buffer為T(mén)rue時(shí))。Flush()方法執(zhí)行該方法時(shí),將IIS緩沖區(qū)中的內(nèi)容發(fā)給客戶(hù)端(Response.Buffer為T(mén)rue時(shí)),對(duì)客戶(hù)端來(lái)說(shuō),其作用就是刷新網(wǎng)頁(yè)。End()方法當(dāng)程序執(zhí)行到該方法時(shí),將終止腳本的處理,起到終止程序繼續(xù)運(yùn)行的作用。3.3ASP.NET控件和對(duì)象3.3.2ASP.NE常用對(duì)象2.Request對(duì)象當(dāng)客戶(hù)端瀏覽器向ASP.NET服務(wù)器端程序發(fā)出請(qǐng)求時(shí),服務(wù)器端程序?qū)⑨槍?duì)請(qǐng)求的答應(yīng)信息封裝在Request對(duì)象中,客戶(hù)端通過(guò)調(diào)用Request對(duì)象的屬性和方法可以獲取想要的信息。Request對(duì)象的常用屬性和方法包括:ApplicationPath屬性返回服務(wù)器上ASP.NET應(yīng)用程序的虛擬根路徑(string類(lèi)型)。Path屬性返回當(dāng)前請(qǐng)求頁(yè)的虛擬路徑(包含請(qǐng)求頁(yè)對(duì)應(yīng)的

.aspx文件名)。PhysicalPath屬性返回與請(qǐng)求的URL相對(duì)應(yīng)的物理文件系統(tǒng)的絕對(duì)路徑(包含請(qǐng)求頁(yè)對(duì)應(yīng)的

.aspx文件名)。3.3ASP.NET控件和對(duì)象3.3.2ASP.NE常用對(duì)象PhysicalApplicationPath屬性返回當(dāng)前正在執(zhí)行的服務(wù)器應(yīng)用程序的根目錄在物理文件系統(tǒng)中的絕對(duì)路徑。ContentLength屬性返回所獲得內(nèi)容的長(zhǎng)度。ContentEncoding屬性返回所獲得內(nèi)容的編碼方式。ContentType屬性返回所獲得內(nèi)容的類(lèi)型。Headers屬性返回HTTP頭的集合。3.3ASP.NET控件和對(duì)象3.3.2ASP.NE常用對(duì)象HttpMethod屬性返回客戶(hù)端使用的HTTP數(shù)據(jù)傳輸?shù)姆椒?,如GET、POST或HEAD。Url屬性返回當(dāng)前請(qǐng)求的URL。Browser屬性這個(gè)屬性返回瀏覽器的有關(guān)信息,這些信息十分豐富,包括瀏覽器是否支持ActiveX控件、是否為測(cè)試版、瀏覽器的名稱(chēng)和版本號(hào)等信息。UserHostAddress屬性返回客戶(hù)機(jī)的IP地址(string類(lèi)型)。利用這個(gè)屬性可以拒絕惡意用戶(hù)的訪問(wèn)。UserHostName屬性返回客戶(hù)機(jī)的DNS名稱(chēng)。3.3ASP.NET控件和對(duì)象3.3.2ASP.NE常用對(duì)象QueryString屬性該屬性返回URL所帶的附加信息項(xiàng)的集合,集合的類(lèi)型為System.Collections.Specialized.NameValueCollection,通常用于實(shí)現(xiàn)頁(yè)面之間的數(shù)據(jù)傳遞。3.3ASP.NET控件和對(duì)象3.3.2ASP.NE常用對(duì)象例如,下面語(yǔ)句重定向到WebForm1.aspx頁(yè)面,同時(shí)傳遞三個(gè)信息項(xiàng):Response.Redirect("WebForm1.aspx?s1=str1&s2=str2&s3=str3");在WebForm1.aspx頁(yè)面中可以用下面三條語(yǔ)句分別獲取這三項(xiàng)信息:strings;s=Request.QueryString["s1"];//結(jié)果s="str1"s=Request.QueryString["s2"];//結(jié)果s="str2"s=Request.QueryString["s3"];//結(jié)果s="str3"當(dāng)然,也可以通過(guò)下標(biāo)訪問(wèn)集合中的元素來(lái)獲取信息項(xiàng):strings;System.Collections.Specialized.NameValueCollectionstrs=Request.QueryString;for(inti=0;i<strs.Count;i++){s=strs[i];}顯然,QueryString屬性通常與Response對(duì)象的Redirect屬性搭配使用。實(shí)際上,例11.2中的程序testWebControlApp已經(jīng)使用過(guò)這兩個(gè)屬性來(lái)實(shí)現(xiàn)頁(yè)面之間的數(shù)據(jù)傳遞。用Request對(duì)象獲取表單傳遞值使用Request對(duì)象的Form屬性獲取表單傳遞的信息,一般格式為:

Request.Form("表單元素名")

通過(guò)POST方式發(fā)送的數(shù)據(jù)不會(huì)顯示在URL中,因此POST發(fā)送數(shù)據(jù)會(huì)比GET發(fā)送安全。用Request對(duì)象獲取服務(wù)器變量值當(dāng)用戶(hù)向服務(wù)器請(qǐng)求信息或者服務(wù)器對(duì)用戶(hù)的請(qǐng)求做出應(yīng)答時(shí),他們的信息都包含在HTTPHeader(HTTP頭)中。HTTP頭提供了有關(guān)請(qǐng)求和響應(yīng)的附加信息,同時(shí)還包括瀏覽器生成請(qǐng)求和服務(wù)器做出響應(yīng)的過(guò)程信息。通過(guò)Request對(duì)象的ServerVariables屬性,可以獲得當(dāng)前環(huán)境的這些信息。ServerVariables屬性該屬性是一個(gè)string類(lèi)型對(duì)象的集合,它保存了服務(wù)器的有關(guān)信息。3.3ASP.NET控件和對(duì)象3.3.2ASP.NE常用對(duì)象例如,我們可以用下列語(yǔ)句輸出該屬性包含的所有有關(guān)服務(wù)器的信息:for(inti=0;i<Request.ServerVariables.Count;i++){Response.Write((i+1).ToString()+":"+Request.ServerVariables[i].ToString()+"<br>");}一般情況下是通過(guò)對(duì)象的名稱(chēng)來(lái)訪問(wèn)ServerVariables屬性中有關(guān)服務(wù)器的信息。常用的包括:Request.ServerVariables["Local_Addr"] //返回服務(wù)器的IPRequest.ServerVariables["Path_Info"]//返回被請(qǐng)求頁(yè)的虛擬路徑Request.ServerVariables["Path_Translated"]//返回被請(qǐng)求頁(yè)的絕對(duì)路徑Request.ServerVariables["Server_Name"]//返回服務(wù)器的名稱(chēng)Request.ServerVariables["Server_Port"] //返回服務(wù)器所使用的端口Request.ServerVariables["Url"]//返回請(qǐng)求頁(yè)的URL地址Request.ServerVariables[“REMOTE_ADDR”]//返回請(qǐng)求者的IP地址3.Server對(duì)象Server對(duì)象封裝了服務(wù)器的相關(guān)信息,利用該對(duì)象提供的方法可以獲取這些信息。MapPath()方法返回與Web服務(wù)器上的指定虛擬路徑相對(duì)應(yīng)的物理文件路徑,如Server.MapPath(“\\WebForm1.aspx”)返回“D:\VS2008\第11章\test1\test1\WebForm1.aspx”。Transfer()方法該方法與Response對(duì)象的Redirect()方法具有相同調(diào)用方法。例如,下面兩個(gè)語(yǔ)句的作用是一樣的:Response.Redirect("WebForm1.aspx?s1=str1&s2=str2");Server.Transfer("WebForm1.aspx?s1=str1&s2=str2");3.3ASP.NET控件和對(duì)象3.3.2ASP.NE常用對(duì)象Transfer與Redirect的區(qū)別:

Server.Transfer方法把執(zhí)行流程從當(dāng)前的ASPX文件轉(zhuǎn)到同一服務(wù)器上的另一個(gè)ASPX頁(yè)面。調(diào)用Server.Transfer時(shí),當(dāng)前的ASPX頁(yè)面終止執(zhí)行,執(zhí)行流程轉(zhuǎn)入另一個(gè)ASPX頁(yè)面,但新的ASPX頁(yè)面仍使用前一ASPX頁(yè)面創(chuàng)建的應(yīng)答流。用Server.Transfer方法實(shí)現(xiàn)頁(yè)面之間的導(dǎo)航,瀏覽器中的URL不會(huì)改變,因?yàn)橹囟ㄏ蛲耆诜?wù)器端進(jìn)行,瀏覽器根本不知道服務(wù)器已經(jīng)執(zhí)行了一次頁(yè)面變換。Response.Redirect則是客戶(hù)端第一次請(qǐng)求服務(wù)器返回狀態(tài)代碼302及新URL,客戶(hù)端再次請(qǐng)求新URL,服務(wù)器再返回新頁(yè)面,比Server.Transfer多一次應(yīng)答。注意使用方式Post表單請(qǐng)求表單不runat=“server”通過(guò)提交按鈕自動(dòng)切換到Action對(duì)應(yīng)的目標(biāo)頁(yè)面目標(biāo)頁(yè)可以用Request.Form的形式訪問(wèn)請(qǐng)求信息例(classexamples\1-1)非Post表單-Web窗體表單Runat=“server”,無(wú)提交按鈕Request.QueryStringServer.TransferWeb窗體表單傳遞數(shù)據(jù)Request.QueryString形式

把表單各個(gè)元素的名字和值形成QueryString里的參數(shù)例(classexamples\1-2)Server.Transfer例(classexamples\1-3)HtmlEncode()方法對(duì)給定的字符串進(jìn)行HTML編碼,使得瀏覽器不再按照HTML語(yǔ)法對(duì)其進(jìn)行解釋?zhuān)窃瓨虞敵?。例如,?duì)于下面的兩條語(yǔ)句:

Response.Write("<h1>中國(guó)人</h1>"+"<br>");Response.Write(Server.HtmlEncode("<h1>中國(guó)人</h1>")+"<br>");3.3ASP.NET控件和對(duì)象3.3.2ASP.NE常用對(duì)象——因此,如果想將HTML語(yǔ)法中的代碼在瀏覽器輸出,就需要使用HtmlEncode()方法。Global.asaxGlobal.asax文件(也稱(chēng)為ASP.NET應(yīng)用程序文件)是一個(gè)可選的文件,該文件包含響應(yīng)ASP.NET或HTTP模塊所引發(fā)的應(yīng)用程序級(jí)別和會(huì)話級(jí)別事件的代碼。Global.asax文件駐留在ASP.NET應(yīng)用程序的根目錄中。運(yùn)行時(shí),分析Global.asax并將其編譯到一個(gè)動(dòng)態(tài)生成的.NETFramework類(lèi),該類(lèi)是從HttpApplication基類(lèi)派生的。配置ASP.NET,以便自動(dòng)拒絕對(duì)Global.asax文件的任何直接的URL請(qǐng)求;外部用戶(hù)不能下載或查看其中的代碼。Global.asax文件是可選的。只在希望處理應(yīng)用程序事件或會(huì)話事件時(shí),才應(yīng)創(chuàng)建它。3.3.2Application對(duì)象利用Application對(duì)象存取變量創(chuàng)建Application對(duì)象同步和互斥Application的事件和Global.asax2022年10月18日第37頁(yè)利用Application對(duì)象存取變量Application對(duì)象可以存取變量,并且這些變量可以被多個(gè)用戶(hù)共享。對(duì)Application對(duì)象的變量賦值的格式為:

Application[變量名]=值引用變量的值用Application(變量名)就可以了。2022年10月18日第38頁(yè)同步和互斥在頁(yè)面共享變量時(shí)也引發(fā)一個(gè)問(wèn)題,那就是各個(gè)頁(yè)面都可以修改共享變量的值。為了避免這種沖突出現(xiàn),Application對(duì)象提供了Lock方法解決這樣的問(wèn)題。其語(yǔ)句如下:

Application.Lock

在這個(gè)語(yǔ)句之后,Application對(duì)象變量的值只能由一個(gè)用戶(hù)改動(dòng),這樣就避免了多個(gè)用戶(hù)同時(shí)改變一個(gè)變量值的情況。當(dāng)用戶(hù)改動(dòng)結(jié)束后,應(yīng)該允許其他用戶(hù)改動(dòng)該變量,這就要求解除對(duì)變量值的鎖定。語(yǔ)句如下:

Application.UnLock2022年10月18日第39頁(yè)Application的事件和Global.asaxApplication擁有自己的事件和生命周期,當(dāng)Application開(kāi)始啟動(dòng)時(shí),會(huì)觸發(fā)Application_Start事件;當(dāng)Application終止時(shí)或者webconfig被修改保存時(shí),會(huì)觸發(fā)Application_End事件。這兩個(gè)事件代碼都存放在Global.asax文件中。Global.asax文件中主要定義了8個(gè)主要事件:Application_Start、Session_Start、Application_BeginRequest、Application_EndRequest、Application_AuthenticateRequest、Application_Error、Session_End和Application_End。2022年10月18日第40頁(yè)Session對(duì)象利用Session對(duì)象存取變量Session的唯一性和Session的終止Session事件2022年10月18日第41頁(yè)利用Session對(duì)象存取變量與Application對(duì)象一樣,Session對(duì)象也可以存取變量,但它和Application對(duì)象在存儲(chǔ)信息所使用的對(duì)象是完全不同的。Application對(duì)象存儲(chǔ)的是共享信息,而Session對(duì)象存儲(chǔ)的信息是局部的,它只是針對(duì)某個(gè)特定的用戶(hù)。2022年10月18日第42頁(yè)Session對(duì)象3.3ASP.NET控件和對(duì)象3.3.2ASP.NE常用對(duì)象例如,下面兩條語(yǔ)句的作用是將字符串“Petter”和“C_sharp”依次添加到Session對(duì)象中:

Session[“username”]=“Petter”;

//Session.Add(“username”,”peter”);Session["userpass"]="C_sharp";這兩個(gè)字符串在Session中的“名稱(chēng)”分別為username和userpass,通過(guò)它們的名稱(chēng)即可訪問(wèn)相應(yīng)的數(shù)據(jù)和對(duì)象。例如,對(duì)于下列語(yǔ)句:

Response.Write(Session["username"]+"<br>");Response.Write(Session["userpass"]+"<br>");執(zhí)行后將輸出:PetterC_sharp當(dāng)然,也可以通過(guò)下標(biāo)來(lái)訪問(wèn)Session對(duì)象中的數(shù)據(jù):Response.Write(Session[0]+"<br>");Response.Write(Session[1]+"<br>");語(yǔ)句輸出Session對(duì)象中的所有數(shù)據(jù):

for(inti=0;i<Session.Count;i++){Response.Write(Session[i]+"<br>");}Session事件與Application對(duì)象相同,Session對(duì)象也擁有自己的事件。正如在介紹關(guān)于Global.asax文件內(nèi)容時(shí)所見(jiàn)到的,Session對(duì)象擁有Start和End事件,他們都存在于文件Global.asax中。當(dāng)一個(gè)Session對(duì)象被創(chuàng)建時(shí),觸發(fā)Session_Start事件;當(dāng)一個(gè)Session對(duì)象被終止時(shí),觸發(fā)Session_End事件。利用這兩個(gè)事件可以處理一些有用的事情,如用戶(hù)信息初始化等等。2022年10月18日第44頁(yè)Session的方法Abandon()方法刪除存儲(chǔ)在session對(duì)象中的所有會(huì)話變量并釋放它們占用的服務(wù)器資源,所以要慎重使用不過(guò)在當(dāng)前頁(yè)中所有腳本命令都處理完后,對(duì)象才會(huì)被真正刪除。在SessionState=“proc”的設(shè)置下,會(huì)觸發(fā)Session_End事件Clear()或Remove()方法Session.Clear只是清除Session中的所有數(shù)據(jù)并不會(huì)中止該Session,因此也不會(huì)觸發(fā)Session_EndSessionWeb.config<sessionState>節(jié)的定義TimeoutCookieless4.Session對(duì)象和Application對(duì)象3.3ASP.NET控件和對(duì)象3.3.2ASP.NE常用對(duì)象共同點(diǎn):都是用于在服務(wù)器端保存數(shù)據(jù)和對(duì)象,它們都是object類(lèi)型的數(shù)組,使用方法相同,可以通過(guò)對(duì)象名或下標(biāo)引用其中的對(duì)象。通常用于保存用戶(hù)信息、實(shí)現(xiàn)網(wǎng)站訪問(wèn)計(jì)數(shù)等功能。不同點(diǎn):它們的作用范圍不同,Session對(duì)象的作用范圍是一次會(huì)話期內(nèi)),只為一個(gè)用戶(hù)所擁有;Application對(duì)象的作用范圍則是Web服務(wù)器的一次生存期(從啟動(dòng)服務(wù)器到關(guān)閉服務(wù)器這個(gè)時(shí)間段),可為所有用戶(hù)共享。Application和Session的聯(lián)合使用網(wǎng)站訪問(wèn)計(jì)數(shù)器網(wǎng)站在線人數(shù)(例子aspnet1-4)Global.asaxWebconfig的修改<sessionStatemode="InProc"timeout="1"></sessionState>Application和Session的聯(lián)合使用2提高:加入文件的處理stringcountfile=Server.MapPath("count.txt");StreamReadersrd;srd=File.OpenText(countfile);intcount=0;while(srd.Peek()!=-1){stringstr=srd.ReadLine();count=int.Parse(str);

}srd.Close();Application["count"]=count;提高:加入文件的處理intcount=0;count=(int)Application["count"];stringfile_path=Server.MapPath("count.txt");StreamWritersrw=newStreamWriter(file_path,false);srw.WriteLine(count);srw.Close();Session的特殊應(yīng)用場(chǎng)合用戶(hù)登錄界面,每個(gè)頁(yè)面都要判斷用戶(hù)名是否為空演示無(wú)判斷的狀況增加一個(gè)公共判斷類(lèi)publicclassvalidatePage:System.Web.UI.Page

{protectedoverridevoidOnInit(EventArgse)

{if(Session["valid"]==null||Session["valid"].ToString().CompareTo(Session.SessionID)!=0)

{Response.Write("error");Response.End();

}

}//protectedoverridevoidOnLoad(EventArgse)

//{//if(Session["valid"]==null||Session["valid"].ToString().CompareTo(Session.SessionID)!=0)

//{//Response.Write("error");//Response.End();

//}

//}

}publicpartialclassrequestform:validatePage

{注意不要重載OnLoad方法,會(huì)讓子類(lèi)的Page_Load事件失效重載OnInit方法CookieCookie是一種能夠讓網(wǎng)站服務(wù)器把少量數(shù)據(jù)存儲(chǔ)到客戶(hù)端的硬盤(pán)或內(nèi)存。并且讀可以取出來(lái)的一種技術(shù)。Cookie是一段文本信息,在客戶(hù)端存儲(chǔ)Cookie是ASP.NET的會(huì)話狀態(tài)將請(qǐng)求與會(huì)話關(guān)聯(lián)的方法之一。Cookie也可以直接用于在請(qǐng)求之間保持?jǐn)?shù)據(jù),但數(shù)據(jù)隨后將存儲(chǔ)在客戶(hù)端并隨每個(gè)請(qǐng)求一起發(fā)送到服務(wù)器。瀏覽器對(duì)Cookie的大小有限制,因此,只有不超過(guò)4096字節(jié)才能保證被接受。

Cookie查看CookieSessionID默認(rèn)是用Cookie來(lái)存儲(chǔ)的,試一試修改webconfig如下所示:

<sessionStatemode="InProc"timeout="1"cookieless="true"></sessionState>創(chuàng)建cookie//方式1:

Response.Cookies["username"].value="mike";

Response.Cookies["username"].Expires=DateTime.MaxValue;

//方式2:

HttpCookieacookie=newHttpCookie(“username");

acookie.Value=“mike";

acookie.Expires=DateTime.MaxValue;//cookie.Expires=System.DateTime.Now.AddDays(1);//設(shè)置過(guò)期時(shí)間1天

Response.Cookies.Add(acookie);

創(chuàng)建cookie-子鍵(多值)//方式1:

Response.Cookies["userinfo1"]["name"].value="mike";

Response.Cookies["userinfo1"][“gender"].value=“m";

Response.Cookies["userinfo1"].Expires=DateTime.MaxValue;

//方式2:

HttpCookiecookie=newHttpCookie("userinfo1");

cookie.Values["name"]="mike";

cookie.Values[“gender"]=“m“;

cookie.Expires=DateTime.Now.AddDays(1);

//設(shè)置過(guò)期時(shí)間1天

Response.Cookies.Add(cookie);

CookieC:\Users\Administrator\AppData\Roaming\Microsoft\Windows\Cookies上面是2個(gè)單值Cookie下面是1個(gè)多值Cookie讀取CookieInternetExplorer將站點(diǎn)的Cookie保存在文件名格式為<user>@<domain>.txt的文件中,其中<user>是您的帳戶(hù)名。注意:在獲取Cookie的值之前,應(yīng)該確保該Cookie確實(shí)存在。否則,您將得到一個(gè)異常

If(Request.Cookies["userName"]!=null)

{

stringstr=Request.Cookies("userName").Value;

}

讀取Cookie-子鍵(多值)//多值Cookie的讀取

If(Request.Cookies["userInfo1"]!=null)

{

stringname=Request.Cookies["userInfo1"]["name"];

stringlast=Request.Cookies["userInfo1"][“gender"];

}

注意創(chuàng)建依賴(lài)于Reponse對(duì)象讀取依賴(lài)于Request對(duì)象讀取Cookie集合for(inti=0;i<Request.Cookies.Count;i++){HttpCookiecookie=Request.Cookies[i];Response.Write("name="+cookie.Name+"<br/>");if(cookie.HasKeys)//是否有子鍵

{System.Collections.Specialized.NameValueCollectionNameColl=cookie.Values;for(intj=0;j<NameColl.Count;j++){Response.Write("子鍵名="+NameColl.AllKeys[j]+"<br/>");Response.Write("子鍵值="+NameColl[j]+"<br/>");

}

}else

{Response.Write("value="+cookie.Value+"<br/>");

}}Aspnet1-6/webformreadcookies銷(xiāo)毀Cookie沒(méi)有權(quán)限刪除客戶(hù)端文件設(shè)置過(guò)期日期

正確的寫(xiě)法

ArrayListcookiesnames=newArrayList();for(inti=0;

溫馨提示

  • 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。

最新文檔

評(píng)論

0/150

提交評(píng)論