web頁面的生命周期


1.先上幾張原理圖着重理解:

 

 

 

 

 現在針對第四副圖原理進行解析:

流程:

1.瀏覽器發送請求

2.服務器軟件(IIS)接收,它最終的目的就是為了向客戶輸出它請求的動態頁面生成的html代碼。

3.服務器不會處理類和動態頁面,所以找擴展程序 

4.交給FrameWork,它其中有個類HttpRuntime,其中有個ProcessRequest()方法

5.ProcessRequest()創建了HttpWorkerRequest對象,把請求報文都封裝在其中(HttpWorkerRequest中有個指針,它指向了擴展程序,待把后續返回的響應報文返回給IIS)

6.創建HttpContext對象(HttpRequestHttpResponse)請求的報文被拆分成了不同屬性而保存在HttpRequest中,方便程序員使用;HttpResponse准備了很多屬性,用來保存要生成的響應報文的各個部分。

7.framework要運行頁面對象,首先要創建HttpApplication對象,負責處理整個請求,頁面中執行需要環境、安全驗證等都封裝在其中。

8.它要調用ProcessRequest (HttpContext context) 執行19個(事件)委托對象,也被叫做請求軌道。

9.其中在執行到第8個事件中創建請求的頁面類對象,並轉成HttpHandler接口對象

10.在11和12事件之間調用了ProcessRequest方法,最后有個finshRequest方法,結束了請求,生成響應報文,再通過HttpWorkerRequest的指針調用擴展程序再調用IIS,IIS最后將響應報文發回給瀏覽器

此時一般處理程序流程已經結束。

 

asp.net頁面運行的整體流程和一般處理程序一樣,不同之處在於它調用了Page類的ProcessRequest方法,創建了頁面控件樹,執行了頁面聲明周期。

流程:

1.調用了Page類的ProcessRequest方法

2.打造頁面控件樹(_buildControTree()方法)

3.執行頁面生命周期(也就是200多行代碼),里面有預定義好的很多種方法,方便程序員在事件中注冊方法,實現自己的功能

    3.1 LoadState加載狀態

    3.2 PageLoad 頁面加載

    3.3 SaveState

4.調用Render方法,生成html代碼

 

注意:頁面自動事件注冊機制-----在頁面的開頭部分,有AutoEventWireup = "true" ,即開啟自動事件注冊機制

開啟自動事件注冊機制后,只要遵循對應約定的格式,如Page_Load,

當頁面聲明周期調用PageLoad事件的時候,也就調用了我們的Page_Load方法

 

 

asp.net運行機制

1.當第一次訪問頁面時,頁面請求首先依次經過HttpModuls和HttpHandler的處理,服務器接收到HttpHandler的請求后 將跳轉到需要訪問的頁面,然后Asp.net Engine 負責找到這個頁面后台的類,並實例化為一個臨時對象。在此過程中會觸發一系列的事件,一部分事件需要經過對象中的方法進行處理,之后服務器會將這個處理后 頁面交給Response對象,然后再由Response對象將這個頁面發送到客戶端

 

2.因為服務器之間的會話已經建立,所以在這個頁面上重新提交一些信息並再次向服務器發送請求時,是不用再經過初始化頁面這一部分的工作的。故第二條線路是依次提交HttpModuls和HttpHandler請求,然后與臨時對象交互並返回。

 

3.第三條路線與第二條的不同之處在於,在處理請求時,如果涉及到需要調用asp.net Cache時,臨時對象直接從asp.net緩存中提取信息並返回。

 

4.第四條線路是在刷新頁面的時候,服務器接收到並發現這個請求曾經處理過,並將處理結果存儲到由一個由默認的HttpModule管理的輸出緩存中。此時可以直接從緩存中提取信息並返回,無須重新處理一遍。



人都知道是有生命周期的,一個人從呱呱落地到慢慢老去經歷了一個生命輪回,這是生命的一個周期。
同樣ASP.NET開發的WEB頁面也有它自己的生命周期,從生成到銷毀,也經歷了不同的階段和過程。對於ASP.NET頁面生命周期中將執行一些列處理步驟。
這些步驟包括初始化、實例化控件、還原和維護狀態、運行時間處理程序代碼及呈現。
一般來說,也要經歷如下各個階段
1.頁請求:頁請求發生在頁面生命周期開始之前,用戶請求頁時,ASP.NET將確定是否需要分析和編譯頁
2.開始:在開始階段,將設置頁屬性,如Request和Response。在此階段,頁還將確定請求是回發請求還是新請求,並設置IsPostBack屬性
3.頁初始化:在頁初始化期間,可以使用頁中的控件,並設置每個控件的UniqueID屬性。
4.加載:在加載期間,如果當前請求是回發請求,則將使用從視圖狀態和控件狀態恢復的信息加載控件屬性。
5.驗證:在驗證期間,將調用所有驗證程序控件的Validate方法,此方法將設置各個驗證程序控件和頁的IsValidate屬性。
6.回發事件處理:如果請求是回發請求,則將調用所有事件處理程序
7.呈現:在呈現之前,會針對該頁和所有控件保存視圖狀態。在呈現階段中,頁會針對每個控件調用Render方法,它會提供一個文本編寫器,用於將控件的輸出寫入頁的Response屬性和OutputStream中
8.卸載:完全呈現頁並將頁發送至客戶端、准備丟棄該頁后,將調用卸載。此時,將卸載頁屬性並執行清理。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM