湯小波
(重慶三峽職業(yè)學(xué)院)
【摘要】ASP.NET的生命周期在程序執(zhí)行過程中具有重要意義,本文就應(yīng)用程序的生命周期和web頁面的生命周期進(jìn)行了深入的分析和探索。
【關(guān)鍵字】生命周期 ASP.NET
ASP.NET的生命周期是一個(gè)比較復(fù)雜的問題,也是一個(gè)比較有深度的問題,它在ASP.NET開發(fā)中有著重要的作用,對于一個(gè)合格的ASP.NET程序員,它是必須要了解和掌握的,它包括ASP.NET應(yīng)用程序的生命周期和ASP.NET頁面生命周期,我們將從上述兩個(gè)方面來進(jìn)行深入探討。
1.ASP.NET應(yīng)用程序生命周期
在ASP.NET中,若要對ASP.NET應(yīng)用程序進(jìn)行初始化并使它處理請求,必須執(zhí)行一些處理步驟,可以把ASP.NET應(yīng)用程序生命周期分為5個(gè)階段:
第一階段:用戶從WEB服務(wù)器請求應(yīng)用程序資源。
應(yīng)用程序的生命周期以瀏覽器向Web服務(wù)器發(fā)送請求為起點(diǎn),當(dāng)web服務(wù)器接收到請求時(shí),會(huì)對所請求文件的擴(kuò)展名時(shí)行檢查,確定應(yīng)由哪個(gè)ISAPI擴(kuò)展處理該請求,然后將該請求傳遞給合適的ISAPI擴(kuò)展。ASP.NET處理已映射到其上的文件擴(kuò)展名。
第二階段:ASP.NET接收對應(yīng)用程序的第一個(gè)請求。
當(dāng)ASP.NET接收到對應(yīng)用程序中任何資源和第一個(gè)請求時(shí),名為Application Manager的類會(huì)創(chuàng)建一個(gè)應(yīng)用程序域,它為全局變量提供應(yīng)用程序隔離,并允許單獨(dú)卸載每個(gè)應(yīng)用程序。
第三階段:為每個(gè)請求創(chuàng)建ASP.NET核心對象。
創(chuàng)建了應(yīng)用程序域并對Hosting Environment對象進(jìn)行實(shí)例化之后,ASP.NET將創(chuàng)建并初始化核心對象,如HttpContext、HttpRequest和HttpResponse。HttpRequest對象包含有關(guān)當(dāng)前請求的信息,包括Cookie和瀏覽器信息,HttpResponse對象包含發(fā)送到客戶端的響應(yīng)。
第四階段:將HttpApplication對象分配給請求。
初始化所有核心應(yīng)用程序?qū)ο笾螅瑢⑼ㄟ^創(chuàng)建HttpApplication類的實(shí)例啟動(dòng)應(yīng)用程序。如果應(yīng)用程序具有Global.asax文件,則ASP.NET會(huì)創(chuàng)建Global.asax類的一個(gè)實(shí)例,并使用該派生類表示應(yīng)用程序。
第五階段:由HttpApplication管線處理請求。
在處理該請求進(jìn)將由HttpApplication類執(zhí)行相應(yīng)事件。
2、ASP.NET頁面生命周期
ASP.NET頁面運(yùn)行時(shí),此頁也將經(jīng)歷一個(gè)生命周期,在生命周期中將執(zhí)行一系列處理步驟,這些步驟包括初始化、實(shí)例化控件、還原和維護(hù)狀態(tài)、運(yùn)行事件處理程序代碼以及進(jìn)行呈現(xiàn)等。
一般說來,一個(gè)ASP.NET頁面要經(jīng)歷如下各個(gè)階段。
其一、瀏覽器發(fā)出請求
瀏覽器提出請求發(fā)生在頁面生命周期之前。瀏覽器請求頁面時(shí),ASP.NET將確定是否需要分析和編譯頁,從而開始ASP.NET的生命周期。
其二、頁面框架初始化
ASP.NET在這個(gè)階段開始創(chuàng)建頁面,它產(chǎn)生在頁面中用標(biāo)簽定義的所有控件。Page.Init事件在這個(gè)階段將被觸發(fā)。
其三、用戶代碼初始化
Page.Load事件在這個(gè)處理階段被觸發(fā),不管是第一次請求還是作為回發(fā)的一部分被請求,Page.Load事件總會(huì)觸發(fā)。通過屬性IsPostBack來決定是否是第一次加載。
其四、驗(yàn)證階段
在驗(yàn)證期間,將調(diào)用所有驗(yàn)證程序控件的Validate方法,從而進(jìn)行數(shù)據(jù)驗(yàn)證。
其五、事件處理階段
在這階段,頁面被完全裝載且通過驗(yàn)證。ASP.NET將觸發(fā)在上次回發(fā)后發(fā)生的所有事件,包括立即反映事件和變化事件。
其六、清除階段
在頁面生命周期的最后階段,頁面呈現(xiàn)為HTML。頁面呈現(xiàn)后,真正的清除開始并觸發(fā)Page.UnLoad事件。
通過如下所示圖例可以有效的理解頁面生命周期。
3、演示ASP.NET頁面生命周期
為了能加深對頁面生命周期的理解,下面通過一個(gè)模擬示例來演示ASP.NET頁面生命周期。
在項(xiàng)目中新建一頁面PageLoad.aspx,其代碼如下:
<%@ Page Language="C#" %>
(上接131頁)
當(dāng)頁面第一次加載時(shí),結(jié)果如圖2所示,當(dāng)點(diǎn)擊確定按鈕時(shí),結(jié)果如圖3所示。
正確理解ASP.NET生命周期和頁面生命周期對于理解ASP.NET程序和執(zhí)行具有很重要的意義,它能解釋很多讓人無法解釋的問題:
其一、內(nèi)置對象如Respons、Request等對象在什么時(shí)候創(chuàng)建,怎樣創(chuàng)建,怎樣應(yīng)用就有很好的指導(dǎo)意義;
其二、能正確理解Global.asax文件的類的對象創(chuàng)建和事件的執(zhí)行過程;
其三、ASP.NET頁面從頁面對象生成到消亡的過程;
其四、能更好地理解頁面的環(huán)回機(jī)制,頁面的多次回發(fā)的執(zhí)行過程;
其五、能深入理解Page對象的IsPostBack屬性在頁面加載過程中的重要作用;
其六、能解釋W(xué)eb頁面為什么是無狀態(tài)的,頁面信息為什么在多次回發(fā)過程中信息無法保留。
總之,ASP.NET應(yīng)用程序及頁面的生命周期它是web應(yīng)用程序運(yùn)行過程中的基石,理解它的產(chǎn)生過程就是理解了web程序的執(zhí)行過程,對于分析和調(diào)試程序具有現(xiàn)實(shí)意義。