第5章 內(nèi)置對(duì)象OK_第1頁
第5章 內(nèi)置對(duì)象OK_第2頁
第5章 內(nèi)置對(duì)象OK_第3頁
第5章 內(nèi)置對(duì)象OK_第4頁
第5章 內(nèi)置對(duì)象OK_第5頁
已閱讀5頁,還剩6頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

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

文檔簡介

1、網(wǎng)站中的數(shù)據(jù)源數(shù)據(jù)庫與SQL基礎(chǔ) 第 4 章第 5 章使用已有資源ASP.NET的內(nèi)置對(duì)象本章視頻教學(xué)錄像:1小時(shí)19分鐘ASP.NET內(nèi)置了幾個(gè)常用對(duì)象,這些對(duì)象使用戶更容易收集通過瀏覽器發(fā)送的請(qǐng)求信息、響應(yīng)瀏覽器信息以及用戶儲(chǔ)存的信息。以實(shí)現(xiàn)特定的狀態(tài)管理和信息傳遞。本章要點(diǎn)(已掌握的在方框中打勾) Response對(duì)象 Request對(duì)象 Server對(duì)象 Application對(duì)象 Session對(duì)象 Cookie對(duì)象5.1 使用已有資源ASP.NET的內(nèi)置對(duì)象 本節(jié)視頻教學(xué)錄像:31分鐘ASP.NET已經(jīng)為我們提供了很多的內(nèi)置資源,合理地使用這些資源可以提高開發(fā)的效率。ASP.NET

2、的基本對(duì)象主要包括Application、Session、Cookie等,它們都能存儲(chǔ)應(yīng)用程序的數(shù)據(jù)。Request和Response這兩個(gè)對(duì)象是ASP所提供的內(nèi)置對(duì)象中最常用的兩個(gè)。在瀏覽器和Web服務(wù)器之間,請(qǐng)求與響應(yīng)中發(fā)生的信息交流可以通過ASP中的這兩個(gè)內(nèi)置對(duì)象進(jìn)行訪問和管理。5.1.1 Response對(duì)象ASP.NET的早期版本ASP中就包含有Page、Response、Request等對(duì)象。而在ASP.NET中,這些對(duì)象仍然存在,使用的方法也大致相同,不同的是這些對(duì)象改由.NET Framework中封裝好的類來實(shí)現(xiàn)。并且由于這些對(duì)象是在ASP.NET頁面初始化請(qǐng)求時(shí)自動(dòng)創(chuàng)建的,

3、所以能在程序中的任何地方直接調(diào)用,而無需對(duì)類進(jìn)行實(shí)例化操作。Response對(duì)象常用的屬性如表所示。屬性功能Cookies響應(yīng)Cookies集合IsClientConnected一個(gè)布爾類型的變量,作用是指出客戶是否仍然與服務(wù)器連接Output能夠把文本輸出給客戶OutputStream能夠把二進(jìn)制數(shù)據(jù)輸出給客戶Flush這個(gè)方法把當(dāng)前高速緩存的所有數(shù)據(jù)輸出給客戶Redirect這個(gè)方法把客戶導(dǎo)向新的URLWrite把文本寫到響應(yīng)輸出中WriteFile把文件直接寫到響應(yīng)輸出流中Buffer緩沖區(qū)【范例5-1】 使用Response對(duì)象的相關(guān)屬性和方法。 在Visual Studio 2010

4、中,新建名為“Response”的ASP.NET網(wǎng)站。添加一個(gè)名為ResponseTest.aspx的頁面并設(shè)置為起始頁。切換到ResponseTest.aspx頁面的設(shè)計(jì)視圖,添加一個(gè)按鈕Button1,修改按鈕的Text屬性為“新浪”。雙擊ResponseTest.aspx頁面或者按F7鍵,打開ResponseTest.aspx.cs頁面,在Page_Load()事件中輸入以下代碼。Response.Write("現(xiàn)在時(shí)間是:" + DateTime.Now);添加Button1_Click()事件,輸入以下代碼。Response.Redirect("&quo

5、t;);【運(yùn)行結(jié)果】按【Ctrl+F5】組合鍵或是單擊工具欄中的按鈕,在瀏覽器中會(huì)輸出如圖所示的結(jié)果。點(diǎn)擊“新浪”按鈕,即可導(dǎo)向新浪的網(wǎng)站?!痉独治觥縍esponse對(duì)象實(shí)際是在執(zhí)行System.Web命名空間中的HttpResponse類。CLR會(huì)根據(jù)用戶的請(qǐng)求信息建立一個(gè)Response對(duì)象。Response.Write()實(shí)現(xiàn)向客戶端輸出信息;Response.Redirect()實(shí)現(xiàn)定向到其它URL;Response.BinaryWrite()方法實(shí)現(xiàn)以二進(jìn)制的方式輸入。5.1.2 Request對(duì)象Request對(duì)象的功能是從客戶端得到數(shù)據(jù)。Request對(duì)象常用的屬性及方法如表所

6、示。屬性和方法功能Browser屬性獲取有關(guān)正在請(qǐng)求的客戶端的瀏覽器功能的信息Cookies屬性獲取客戶端發(fā)送的Cookies的集合Files屬性獲取客戶端上傳的文件的集合Form屬性獲取表單變量的集合QueryString屬性獲取HTTP查詢字符串變量集合ServerVariables屬性獲取Web服務(wù)器變量的集合UserHostAddress屬性獲取遠(yuǎn)程客戶端的主機(jī)IP地址SaveAs方法將HTTP請(qǐng)求保存到磁盤【范例5-2】 使用Request對(duì)象的Browser屬性獲取客戶端信息。 在Visual Studio 2010中,新建名為“RequestBrowser”的ASP.NET網(wǎng)站,

7、添加一個(gè)名為getBrowser.aspx的頁面。 雙擊getBrowser.aspx頁面,打開getBrowser.aspx.cs頁面,在Page_Load()事件中輸入以下代碼(代碼2-4.txt)。01 protected void Page_Load(object sender, EventArgs e)02 03 Response.Write("你使用的操作系統(tǒng)是:" + Request.Browser.Platform+"<br>");04 Response.Write("是否支持HTML框架:" + Requ

8、est.Browser.Frames + "<br>");05 Response.Write("瀏覽器的版本是:" + Request.Browser.Version + "<br>");06 【運(yùn)行結(jié)果】按【Ctrl+F5】組合鍵或是單擊工具欄中的按鈕,在瀏覽器中會(huì)輸出如圖所示的結(jié)果。5.1.3 Server對(duì)象Server對(duì)象提供對(duì)服務(wù)器上訪問的方法和屬性,大多數(shù)方法和屬性是作為實(shí)用程序的功能提供的。Server對(duì)象常用的屬性及方法如表所示。屬性和方法功能MachineName屬性獲取服務(wù)器的計(jì)算機(jī)名稱Sc

9、riptTimeout屬性獲取和設(shè)置文件最長執(zhí)行時(shí)間(以秒計(jì))CreatObject方法創(chuàng)建COM對(duì)象的一個(gè)服務(wù)器實(shí)例Execute方法使用另一頁執(zhí)行當(dāng)前請(qǐng)求HtmlEncode方法對(duì)要在瀏覽器中顯示的字符串進(jìn)行編碼HemlDecode方法對(duì)已被編碼已清除無效HTML字符的字符串進(jìn)行解碼UrlEncode方法對(duì)指定字符串以URL格式進(jìn)行編碼UrlDecode方法對(duì)URL格式字符串進(jìn)行解碼MapPath方法將虛擬路徑轉(zhuǎn)換為物理路徑Transfer方法終止當(dāng)前頁面的執(zhí)行,并開始執(zhí)行新的請(qǐng)求頁其中的ScriptTimeout屬性用來設(shè)置腳本最長執(zhí)行時(shí)間,默認(rèn)時(shí)間為90秒。用戶可以自己設(shè)置腳本最長執(zhí)行

10、時(shí)間:Server.ScriptTimeout=150;【范例5-3】 使用Server對(duì)象的MapPath方法獲取當(dāng)前文件路徑。 在Visual Studio 2010中,新建名為“ServerMapPath”的ASP.NET網(wǎng)站,添加名為ServerTest.aspx的頁面。 在ServerTest.aspx.cs頁面的Page_Load()事件輸入以下代碼: Response.Write("當(dāng)前文件所在的物理路徑為:" + Server.MapPath(".");【運(yùn)行結(jié)果】按【Ctrl+F5】組合鍵或是單擊工具欄中的按鈕,在瀏覽器中會(huì)輸出如圖所示

11、的結(jié)果?!痉独治觥勘痉独褂昧薙erver對(duì)象的MapPath方法在頁面加載時(shí)讀取當(dāng)前文件的位置,即Page_Load()事件中的Server.MapPath(".")。5.1.4 Application對(duì)象Application對(duì)象提供對(duì)所有會(huì)話的應(yīng)用程序范圍的方法和事件的訪問,還提供對(duì)可用于存儲(chǔ)信息的應(yīng)用程序范圍的緩存的訪問。應(yīng)用程序狀態(tài)是可供 ASP.NET 應(yīng)用程序中的所有類使用的數(shù)據(jù)儲(chǔ)存庫。它存儲(chǔ)在服務(wù)器的內(nèi)存中,因此與在數(shù)據(jù)庫中存儲(chǔ)和檢索信息相比,它的執(zhí)行速度更快。與特定于單個(gè)用戶會(huì)話的會(huì)話狀態(tài)不同,應(yīng)用程序狀態(tài)應(yīng)用于所有的用戶和會(huì)話。因此,應(yīng)用程序狀態(tài)非常適

12、合存儲(chǔ)那些數(shù)量少、不隨用戶的變化而變化的常用數(shù)據(jù)。Application的關(guān)鍵特性有:存儲(chǔ)于服務(wù)器內(nèi)存中,與用戶無關(guān)即多用戶共享,在應(yīng)用程序的整個(gè)生存期中存在即不會(huì)被主動(dòng)丟棄,不被序列化,不發(fā)生服務(wù)器客戶端的數(shù)據(jù)傳輸。Application對(duì)象的使用格式如下。Application“變量” = “變量內(nèi)容”;Application對(duì)象的屬性如表所示。屬性功能AllKeys獲取HttpApplicationState集合中的訪問鍵Count獲取HttpApplicationState集合中的對(duì)象數(shù)Item獲取HttpApplicationState集合中的對(duì)象的訪問StaticObject獲取由

13、<object>標(biāo)記聲明的所有對(duì)象,其中范圍設(shè)置為ASP.NET應(yīng)用程序中的Application續(xù)表屬性功能Content獲取對(duì)HttpApplicationState對(duì)象的引用Add將新的對(duì)象添加到HttpApplication集合中Clear從HttpApplicationState集合中移除所有對(duì)象Get通過名稱或索引獲取HttpApplicationState對(duì)象GetKey通過索引獲取HttpApplicationState對(duì)象名Lock鎖定對(duì)HttpApplicationState變量的訪問以促進(jìn)訪問同步Remove從HttpApplicationState集合中移除

14、命名對(duì)象Set更新HttpApplicationState集合中的對(duì)象值UnLock取消鎖定對(duì)HttpApplicationState變量的訪問以促進(jìn)訪問同步Application對(duì)象的事件如表所示。事件功能說明OnStart在整個(gè)ASP.NET應(yīng)用首先被觸發(fā)的事件,也就是在一個(gè)虛擬目錄中第1個(gè)ASP.NET程序執(zhí)行時(shí)觸發(fā)OnEnd在整個(gè)應(yīng)用停止時(shí)被觸發(fā)(通常發(fā)生在服務(wù)器被重啟/關(guān)機(jī)時(shí))OnBeginRequest在每一個(gè)ASP.NET程序被請(qǐng)求時(shí)就發(fā)生,即客戶每訪問一個(gè)ASP.NET程序時(shí)就觸發(fā)一次該事件OnEndRequestASP.NET程序結(jié)束時(shí)觸發(fā)該事件【范例5-4】 使用Appli

15、cation對(duì)象存取變量內(nèi)容。 在Visual Studio 2010中,新建名為“Application”的ASP.NET網(wǎng)站,添加名為AppTest.aspx的頁面并設(shè)置為起始頁。 在AppTest.aspx頁面上添加一個(gè)標(biāo)簽控件Label1。在AppTest.aspx.cs頁面的代碼窗口的Page_Load事件中輸入以下代碼(代碼2-5.txt)。1 protected void Page_Load(object sender, EventArgs e)2 3 Application.Lock();4 Application"usercount" = (Convert

16、.ToInt32(Application"usercount") + 1).ToString();5 Application.UnLock();6 Label1.Text = "您是第 " + Application"usercount".ToString() + " 位訪客"7 【運(yùn)行結(jié)果】單擊工具欄中的按鈕,運(yùn)行結(jié)果如圖所示,該列可以實(shí)現(xiàn)對(duì)在線人數(shù)的訪問?!痉独治觥看朔独校?行代碼實(shí)現(xiàn)將Application變量usercount的自增1的操作,并保存到usercount中,然后在第6行代碼中,通過標(biāo)簽控

17、件將Application對(duì)象中變量內(nèi)容輸出。第3行,5行代碼是為了實(shí)現(xiàn)對(duì)Application對(duì)象usercount的鎖定和解鎖,以防止多線程同時(shí)對(duì)該對(duì)象訪問。提 示:Application對(duì)象是多用戶共享的,它并不會(huì)因?yàn)橐粋€(gè)用戶離開而消失,一旦創(chuàng)建了Application對(duì)象,那么它就會(huì)一直存在,直到網(wǎng)站關(guān)閉或該對(duì)象被卸載。因?yàn)锳pplication是多用戶共享的,為了防止在使用的時(shí)候被其他用戶改變其值,需要用到Application對(duì)象變量的Lock方法,其語法如下。Application.LockApplication“變量” = 表達(dá)式Application.UnLockApplic

18、ation.Lock是對(duì)Application值的鎖定,這個(gè)時(shí)候其他用戶是不能使用的,當(dāng)使用完之后才能通過Application.UnLock來解鎖,只有解鎖之后其他用戶才能夠使用。5.1.5 Session對(duì)象Session對(duì)象為當(dāng)前用戶會(huì)話提供信息,還提供對(duì)可用于存儲(chǔ)信息的會(huì)話范圍的緩存的訪問,以及控制如何管理會(huì)話的方法。應(yīng)用程序狀態(tài)是可供 ASP.NET 應(yīng)用程序中的所有類使用的數(shù)據(jù)儲(chǔ)存庫。它存儲(chǔ)在服務(wù)器的內(nèi)存中,因此與在數(shù)據(jù)庫中存儲(chǔ)和檢索信息相比,它的執(zhí)行速度更快。與不特定于單個(gè)用戶會(huì)話的應(yīng)用程序狀態(tài)不同,會(huì)話狀態(tài)應(yīng)用于單個(gè)的用戶和會(huì)話。因此,應(yīng)用程序狀態(tài)非常適合存儲(chǔ)那些數(shù)量少、隨用戶

19、的變化而變化的常用數(shù)據(jù)。而且由于其不發(fā)生服務(wù)器客戶端數(shù)據(jù)傳輸,所以Session還適合存儲(chǔ)關(guān)于用戶的安全數(shù)據(jù),如購物車信息。Session是單用戶操作,當(dāng)用戶第一次登錄時(shí),系統(tǒng)會(huì)自動(dòng)為其分配一個(gè)SessionID,這個(gè)ID是隨機(jī)分配的,不會(huì)重復(fù),可用來標(biāo)志每一個(gè)不同的用戶。當(dāng)頁面刷新或者重新打開該頁面時(shí),該值都會(huì)變化?!痉独?-5】 使用Session對(duì)象記錄當(dāng)前用戶的登錄信息。 在Visual Studio 2010中,新建名為“Session”的ASP.NET網(wǎng)站,添加名為Login.aspx的頁面和一個(gè)名為Admin.aspx的頁面。 在Login.aspx頁面上添加2個(gè)Label控件,

20、2個(gè)TextBox控件和2個(gè)Button控件,屬性設(shè)置如表所示??丶愋涂丶蘒D主要屬性用途LabellabUserNameText屬性設(shè)置為“用戶名:”labPwdText屬性設(shè)置為“密碼:”TextBoxtxtUserName輸入用戶名txtPwdTextMode屬性設(shè)置為Password輸入密碼ButtonbtnLoginText屬性設(shè)置為“登錄”btnCancelText屬性設(shè)置為“取消” 雙擊“登錄”按鈕,在btnLogin_Click()事件中輸入以下代碼:01 protected void btnLogin_Click(object sender, EventArgs e)02

21、03 if (txtUserName.Text = "admin" && txtPwd.Text = "123456")04 05 Session"userName" = txtUserName.Text;/使用Session變量記錄用戶名06 Session"loginTime" = DateTime.Now.ToString();/使用Session變量記錄登錄時(shí)間07 Response.Redirect("Admin.aspx");/Redirect方法導(dǎo)向另外一個(gè)頁面08

22、 09 10 else11 12 Response.Write("<script>alert('用戶名或密碼錯(cuò)誤')</script>");13 14 在Admin.aspx的Page_Load()事件中輸入以下代碼:01 protected void Page_Load(object sender, EventArgs e)02 03 Response.Write("歡迎管理員:" + Session"userName".ToString()+"<br>");0

23、4 Response.Write("您登錄時(shí)間為:"+Session"loginTime".ToString();05 【運(yùn)行結(jié)果】將Login.aspx頁面設(shè)置為起始頁,單擊工具欄中的按鈕,運(yùn)行結(jié)果如圖所示。輸入用戶名和密碼并單擊【登錄】按鈕,如果輸入正確的用戶名和密碼,則會(huì)導(dǎo)向Admin.aspx頁面;如果錯(cuò)誤,則會(huì)提示用戶名或密碼出錯(cuò)。 【范例分析】步驟中的第5,6行代碼是將用戶輸入的信息保存到Session對(duì)象中,單擊【登錄】按鈕后,如果信息正確,將導(dǎo)向管理員頁面,讀取Session變量信息并顯示。提 示:在網(wǎng)站建設(shè)中一般用Session來判斷用

24、戶登錄權(quán)限操作。系統(tǒng)根據(jù)用戶登錄時(shí)獲得用戶信息,根據(jù)用戶信息判斷用戶操作權(quán)限。5.1.6 Cookie對(duì)象Cookie 提供了一種在Web應(yīng)用程序中存儲(chǔ)用戶特定信息的方法。例如,當(dāng)用戶訪問您的站點(diǎn)時(shí),您可以使用 Cookie 存儲(chǔ)用戶首選項(xiàng)或其他信息。當(dāng)該用戶再次訪問您的網(wǎng)站時(shí),應(yīng)用程序便可以檢索以前存儲(chǔ)的信息。在開發(fā)人員以編程方式設(shè)置Cookie時(shí),需要將自己希望保存的數(shù)據(jù)序列化為字符串(并且要注意,很多瀏覽器對(duì)Cookie有4096字節(jié)的限制),然后進(jìn)行設(shè)置。Cookie對(duì)象的屬性如表所示。屬性功能Name獲取或設(shè)置Cookie的名稱Expires獲取或設(shè)置Cookie的過期日期和時(shí)間Do

25、main獲取或設(shè)置Cookie關(guān)聯(lián)的域HakKeys獲取一個(gè)值,通過該值指示Cookie是否具有子鍵Path獲取或設(shè)置要與Cookie一起傳輸?shù)奶摂M路徑Secure獲取或設(shè)置一個(gè)值,通過該值指示是否安全傳輸CookieValue獲取或設(shè)置單個(gè)Cookie值Values獲取單個(gè)Cookie對(duì)象中包含的鍵值的集合【范例5-6】 使用COOKIE對(duì)象記錄用戶輸入的信息。 在范例5-5的Login.aspx的頁面的密碼框下方添加上一個(gè)復(fù)選框控件,界面如圖所示,屬性設(shè)置如表所示??丶愋涂丶蘒D主要屬性用途CheckBoxchkAutoText屬性設(shè)置為“下次自動(dòng)登錄”雙擊【登錄】按鈕,將其單擊事件中的

26、代碼修改為一下代碼(代碼2-7-2.txt)。01 protected void btnLogin_Click(object sender, EventArgs e)02 03 if (txtUserName.Text = "admin" && txtPwd.Text = "123456")04 05 if (chkAuto.Checked)/如果復(fù)選框選中06 07 HttpCookie mycookie = new HttpCookie("mycookie", txtUserName.Text);/創(chuàng)建一個(gè)cook

27、ie對(duì)象,并將用戶名存入cookie對(duì)象中08 mycookie.Expires = DateTime.Now.AddDays(14);/設(shè)置cookie過期時(shí)間09 Session"loginTime" = DateTime.Now.ToString();10 Response.Cookies.Set(mycookie);/將cookie寫入到客戶端11 12 else13 14 Session"userName" = txtUserName.Text;15 Session"loginTime" = DateTime.Now.ToS

28、tring();16 17 Response.Redirect("Admin.aspx"); 18 19 else20 21 Response.Write("<script>alert('用戶名或密碼錯(cuò)誤')</script>");22 23 相應(yīng)的也需要修改Admin.aspx的Page_Load()事件代碼:01 protected void Page_Load(object sender, EventArgs e)02 03 HttpCookie mycookie = null;04 mycookie = R

29、equest.Cookies"mycookie"05 if (mycookie != null)06 07 Response.Write("歡迎管理員:" + mycookie.Value+"<br>");08 Response.Write("您登錄時(shí)間為:" + DateTime.Now.ToString();09 10 else11 12 if (Session"userName" = null)13 14 Response.Redirect("Login.aspx");15 16 else17 18 Response.Write("歡迎管理員:&quo

溫馨提示

  • 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. 人人文庫網(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ì)自己和他人造成任何形式的傷害或損失。

評(píng)論

0/150

提交評(píng)論