以客戶端瀏覽器向 ASP.NET Web 應用程序頁面發送請求(Request)爲起點,以瀏覽器收到 Web 服務器的響應(Response)爲終點,這一完整的過程被稱爲「應用程序及頁面的生命週期」。html
ASP.NET Web 頁面生命週期開始以前發生了什麼?
- 用戶瀏覽器向 Web 服務器(IIS)發出資源的請求。
- Web 服務器收到請求,會根據請求文件的擴展名(如 .aspx、.ascx、.ashx、.asmx),指定 ISAPI 擴展來處理該請求,這裏提到的擴展名將會由 aspnet_isapi.dll 來處理。
- ASP.NET 接收到應用程序中任何資源的「第一個」請求時,ApplicationManager 類會建立一個應用程序域,應用程序域將爲全局變量提供隔離。
- 在應用程序域中,HostingEnvironment 類將建立一個實例,提供有關應用程序的信息(如該應用程序的文件夾所在、名稱等)的訪問。
- 在這以後,ASP.NET 將建立並初始化核心對象(HtppContext、HttpRequest、HttpResponse)。HttpContext 類包含當前請求的特定對象(HttpRequest 和 HttpResponse);HttpRequest 包含當前請求的信息(如 URL,Cookie,瀏覽器信息);HttpResponse 包含將要發送到客戶端的響應(html,Cookie)。
- 初始化核心對象以後,ASP.NET 建立 HttpApplication 的實例啓動應用程序,建立 Global.asax 類(若是應用程序有這個文件的話)。HttpApplication 實例在第一次請求時被建立,以後的多個請求將共用此實例(提升了應用程序的性能)
ASP.NET 管線處理請求流程(包含 aspx 頁面生命週期)
請注意,各類事件(Event)發生的順序和所處管道,牢記哪些是在 Modeule 中執行的,哪些又是在 Handler 中執行的。api
aspx 頁面的生命週期
明白了頁面生命週期,及其中事件發生的順序,以及事件發生時控件的狀態,就能找到合適的接入點來植入你的程序邏輯。換言之,把邏輯處理放在 PageLoad事件中執行並不必定是最優選擇。瀏覽器