ASP.NET 1.1 & 2.0 頁面物件模型

來源:互聯網
上載者:User

對來自瀏覽器的 ASP.NET 請求而提供服務僅是 Web 服務器架構的一小部分。

 

應用程式生命週期的一般情況

下表說明了 ASP.NET 應用程式生命週期中的各種情景。

使用者使用 網頁瀏覽器發送對應用資源的請求。

情景 描述

ASP.NET 應用程式的生命週期始於發送到 Web 服務器(ASP.NET 通常使用 IIS 做為伺服器)的請求。ASP.NET 是 Web 服務器的一個 ISAPI 擴充。當 Web 服務器接收請求後會分析被請求副檔名,檢測該使用哪種 ISAPI 擴充來處理,然後將請求傳遞給相應的 ISAPI 擴充。由 ASP.NET 處理的副檔名包括有 .aspx,.ascx,.ashx,和 .asmx。

注意:如果上述副檔名未被映射到 ASP.NET,那麼 ASP.NET 就無法接收請求。瞭解使用 ASP.NET 授權的應用程式是重要的。比如,.htm 檔案通常不會映射到 ASP.NET,ASP.NET 也不對 .html 檔案的請求進行驗證或處理。因此,即使對於只包含靜態內容的檔案,允許將副檔名改成映射成 ASP.NET 處理類型的 .aspx 來要求 ASP.NET 進行處理。

注意:如果為擁有特殊副檔名的檔案建立了自訂處理器,則需要將該副檔名映射到 IIS 中的 ASP.NET 擴充並在應用程式 Web.config 檔案中註冊自訂處理器。

ASP.NET 接收應用程式的第一個請求。

當 ASP.NET 接收到應用程式的第一個資源請求時,名為 ApplicationManager 的類對象會建立應用程式定義域空間(1)。應用程式定義域空間為應用程式提供獨立的全域變數,允許任何一個應用程式自由銷毀。應用程式定義域空間會建立 HostingEnvironment 執行個體,提供應用程式相關資訊(如儲存應用程式的目錄名)的訪問。

相關內容:

ASP.NET 會編譯應用程式中被請求的最頂層項目,包括 App_Code 目錄中的應用程式代碼。

ASP.NET 為每個請求都建立核心處理對象。

在建立應用程式定義域空間並執行個體化 HostingEnvironment 對象之後,ASP.NET 會建立並初始化核心處理對象(如 HttpContextHttpRequest,以及 HttpResponse)。HttpContext 類包含指派給當前應用請求的相關對象,如 HttpRequestHttpResponseHttpRequest 對象包含當前請求的相關資訊,包括 Cookies 和瀏覽器資訊。HttpResponse 對象包含發送到用戶端的回應內容,包括所有被轉譯輸出內容和 Cookies。

為請求指派 HttpApplication 對象。

應用程式所有核心對象都初始化完成之後,應用程式就開始建立 HttpApplication 執行個體(2)。如果應用程式使用了 Global.asax 檔案,ASP.NET 還會為 Global.asax 建立 HttpApplication 的派生執行個體,並替代預設執行個體來重載應用程式。

注意:第一次請求或處理頁面時,會建立新的 HttpApplication 執行個體。但在需要效能最大化的時候,HttpApplication 執行個體可以在多個請求中重複使用。

在建立 HttpApplication 執行個體時會建立所有已配置模組。應用程式配置為執行個體後,ASP.NET 會建立 SessionStateModule 模型。在所有已配置模組建立完畢後會調用 HttpApplicationInit 方法。

相關內容:

請求 HttpApplication 的管道處理。

下列事件在處理請求時由 HttpApplication 執行。開發人員在擴充 HttpApplication 時應該注意對這些事件的處理。

  1. 對請求的內容進行驗證,分析由瀏覽器發送的資訊並檢測是否含有潛在的不安全標記。
  2. 完成 URL 對應,映射 Web.config 檔案 UrlMappingsSection 元素中所有已配置 URL 對應。
  3. 引發 BeginRequest 事件。
  4. 引發 AuthenticateRequest 事件。
  5. 引發 PostAuthenticateRequest 事件。
  6. 引發 AuthorizeRequest 事件。
  7. 引發 PostAuthorizeRequest 事件。
  8. 引發 ResolveRequestCache 事件。
  9. 引發 PostResolveRequestCache 事件。
  10. 實現了 IHttpHandler 介面的自訂類處理具有特定副檔名的資源(必須經過應用程式的設定檔進行映射),ASP.NET 會在建立 Page 派生執行個體之前對其進行編譯。
  11. 引發 PostMapRequestHandler 事件。

    處理特別情況,(設定檔中進行定義的具有特定副檔名的資源),我們使用實現了IHttpHandler介面的類;而對於普遍情況,我們使用實現了IHttpModule的類來處理(3)。

  12. 引發 AcquireRequestState 事件。
  13. 引發 PostAcquireRequestState 事件。
  14. 引發 PreRequestHandlerExecute 事件。
  15. 使用合適的 IHttpHandler 對象為請求調用 ProcessRequest 方法(或非同步版本的 BeginProcessRequest 方法)。比如,頁面請求則由當前頁面的執行個體進行處理。
  16. 引發 PostRequestHandlerExecute 事件。
  17. 引發 ReleaseRequestState 事件。
  18. 引發 PostReleaseRequestState 事件。
  19. 如果定義了 Filter 屬性則對回應內容進行過濾。
  20. 引發 UpdateRequestCache 事件。
  21. 引發 PostUpdateRequestCache 事件。
  22. 引發 EndRequest 事件。

 

 

 

 接著,對於實現了IHttpHandler介面的類,比如預設的System.Web.UI.Page,就是我們的頁面了,其間的細節又會有一些關鍵事件。

 

 

表格 1. ASP.NET 1.1 頁面生存周期中的關鍵事件

階段

頁面事件

可重寫方法

頁面初始化

Init

 

載入檢視狀態

 

LoadViewState

處理回傳資料

 

實現 IPostBackDataHandler 介面的任何控制項中的 LoadPostData 方法

載入頁面

Load

 

回傳更改通知

 

實現 IPostBackDataHandler 介面的任何控制項中的 RaisePostDataChangedEvent 方法

處理回傳事件

控制項所定義的任何回傳事件

實現了 IPostBackEventHandler 介面的任何控制項的 RaisePostBackEvent 方法

頁面呈現前階段

PreRender

 

儲存檢視狀態

 

SaveViewState

呈現頁面

 

Render

卸載頁面

Unload

 

 這一階段的標誌就是 Init 事件,在成功建立頁面的控制項樹後,對應用程式激發這個事件。換而言之,當 Init 事件發生時,在 .aspx 源檔案中靜態聲明的所有控制項都已執行個體化並取其預設值。 

 

 

 

ASP.NET 2.0 在 ASP.NET 頁面的生命週期方面有兩個主要的變化。首先,ASP.NET 2.0 提供了新的事件以支援新功能,這些功能包括主版頁面、個人化和整合的行動裝置支援。其次,ASP.NET 2.0 引入了跨頁發送 Web Form的技術。

新事件

與 ASP.NET 1.x 相比,ASP.NET 2.0 提供了更精確的頁面生命週期方法堆棧。這些新增的方法為 Web 開發人員提供了更進階別的控制。可以通過任何 ASP.NET 頁面上的“Page”對象訪問這些事件。

表 1 顯示了全面的方法列表。“方法”列顯示了實際的事件方法名稱,“活動”列指示事件是始終處於活動狀態還是僅在 PostBack 操作期間處於活動狀態。例如,可以使用新方法 TestDeviceFilter 來確定哪個裝置篩選條件可用,並使用此資訊決定如何顯示頁面。換句話說,新方法 LoadControlState 僅在回傳期間調用。可以替代此方法(與 SaveControlState 結合使用),以建立用於在回傳期間儲存和恢複控制項狀態的替換序列化方案。

表 2:ASP.NET 2.0 頁面生命週期方法

方法

活動

Constructor

始終

Construct

始終

TestDeviceFilter

始終

AddParsedSubObject

始終

DeterminePostBackMode

始終

OnPreInit

始終

LoadPersonalizationData

始終

InitializeThemes

始終

OnInit

始終

ApplyControlSkin

始終

ApplyPersonalization

始終

OnInitComplete

始終

LoadPageStateFromPersistenceMedium

PostBack

LoadControlState

PostBack

LoadViewState

PostBack

ProcessPostData1

PostBack

OnPreLoad

始終

OnLoad

始終

ProcessPostData2

PostBack

RaiseChangedEvents

PostBack

RaisePostBackEvent

PostBack

OnLoadComplete

始終

OnPreRender

始終

OnPreRenderComplete

始終

SavePersonalizationData

始終

SaveControlState

始終

SaveViewState

始終

SavePageStateToPersistenceMedium

始終

Render

始終

OnUnload

始終

 

通過查看頁面生命週期的低層級詳細資料,我們可以發現在何處能夠自然地實現 ASP.NET 2.0 中的許多功能,例如主題和個人化。例如,可以在 IntializeThemes 事件中處理一個主題,在 LoadPersonalizationData 中載入個人化資料,並在以後應用於 ApplyPersonalization 方法。請注意,對於決定 Web 應用程式的最終外觀的 UI 元素而言,方法的順序極其重要。

 

 

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.