ASP.NET的工作原理以及生命週期?

 

要詳細瞭解ASP.NET的工作原理,首先要了解什麼是.NET,什麼是.NET Framework,什麼是公共中間語言。

1 .NET

對於.NET,微軟自己也沒有一個詳細確切的定義。但是我們可以這樣認爲:.NET是微軟公司要提供的一系列產品的總稱。具體說來,.NET由下面的幾個部分組成:.NET戰略、.NET Framework、.NET企業服務器和.NET開發工具。

.NET戰略是指把所有的設備通過Internet連接在一起並把所有的軟件作爲這個網絡所提供的服務的想法。

.NET Framework是一個程序設計環境,它提供了具體的服務和技術,方便開發人員建立相應的應用程序。

.NET企業服務器是指SQL Server 2000之類由.NET Framework應用程序使用的服務器端產品。它們雖然不是由.NET Framework編寫成的,但是它們都支持.NET。

爲了能夠在.NET Framework上進行程序開發,微軟把Visual Studio進行升級,並把升級後的產品命名爲Visual Studio.NET。這就是.NET開發工具。

2 .NET Framework

.NET Framework是.NET戰略的核心。.NET Framework分爲以下幾個部分:MS中間語言、CLR、.NET Framework類庫、.NET語言、ASP.NET和Web服務。

MS中間語言是.NET的通用語言。無論使用哪一種.NET語言編寫的程序代碼,在執行之前,都會把它編譯成爲MS中間語言。

CLR(Common Language Runtime,公共語言運行時刻庫)用於執行MS中間語言。

.NET Framework類庫中包含了大量可以實現重要功能的代碼庫。用戶在編寫程序的時候可以很方便地把這些庫調用到應用程序中,實現更加複雜的功能。由於這些類庫的存在,使得編寫功能強大的程序更加容易。

.NET語言是指可以將使用其編寫的代碼編譯成爲MS中間語言的的編程語言。常見的語言有VB.NET和C#等。

Web服務是指可以通過Web訪問的組件。

3. 公共中間語言

在.NET Framework中使用高級語言(例如VB.NET、C#)編寫的程序,需要在運行前將其編譯成爲中間語言(例如MS中間語言)。需要注意的是,中間語言並不是一種可以直接執行的機器代碼。與高級語言編寫的代碼相比,它的可讀性很差,但是進行了一系列的優化。

爲了執行中間語言,需要一個執行環境CLR。CLR在.NET Framework中的位置十分重要,可以說是.NET Framework的基礎。CLR用JIT(Just-In-Time)編譯器把中間語言代碼編譯成可以執行的代碼,並對程序進行最後的、與機器相匹配的優化,使得程序可以在所在計算機上儘可能高效地運行。

採用這種方式的原因是,早期的編譯方式是把程序源代碼直接編譯成機器代碼。這時編譯好的程序雖然也進行了與機器相匹配的優化,但是這些優化都是針對編譯源代碼的機器進行的。如果把編譯好的程序放到其他類型的機器上,那麼所進行的優化就有可能沒有任何意義,並且如果機器的硬件發生變化,那麼還有編譯後的程序無法執行的可能,因爲新的機器可能沒有原來機器所擁有的某種資源。而如果採用了公共中間語言的方式,就可以很好地解決這個問題。由於中間語言與機器無關,所以它可以在任何一個可以運行CLR的機器上運行。並且由於所有的關於機器的優化都是由CLR進行的,所以不存在早期編譯所產生的由於機器不同而產生的不兼容的問題。

ASP.NET的工作原理是:首先,有一個HTTP請求發送到Web服務器要求訪問一個Web網頁。Web服務器通過分析客戶的HTTP請求來定位所請求網頁的位置。如果所請求的網頁的文件名的後綴是aspx,那麼就把這個文件傳送到aspnet_isapi.dll進行處理,由aspnet_isapi.dll把ASP.NET代碼提交給CLR。如果以前沒有執行過這個程序,那麼就由CLR編譯並執行,得到純HTML結果;如果已經執行過這個程序,那麼就直接執行編譯好的程序並得到純HTML結果。最後把這些純HTML結果傳回瀏覽器作爲HTTP響應。瀏覽器收到這個響應之後,就可以顯示Web網頁。

ASP.NET編程模型中ASP.NET頁面生命週期是指什麼呢?它包括什麼呢?ASP.NET編程模型之ASP.NET頁面生命週期具體的過程有哪些呢?下面就開始我們的講解吧:

ASP.NET 頁運行時,此頁將經歷一個生命週期,在生命週期中將執行一系列處理步驟。這些步驟包括初始化、實例化控件、還原和維護狀態、運行事件處理程序代碼以及進行呈現。瞭解頁的生命週期非常重要,這樣就能在合適的生命週期階段編寫代碼,以達到預期效果。此外,如果開發自定義控件,則必須熟悉頁生命週期,從而正確地初始化控件,使用視圖狀態數據填充控件屬性以及運行所有控件行爲邏輯。

ASP.NET編程模型之頁面生命週期執行一系列步驟:頁面的初始化、實例化控件、還原和維護狀態、運行事件處理程序代碼、呈現。爲了在合適的階段執行所需的代碼,所以要對頁面生命週期非常熟悉。在頁生命週期的各個階段,頁面會逐個引發定義的事件,通過對代碼開發,在頁面的生命事件中執行我們所需要的程序
頁生命週期階段

1、ASP.NET頁面生命週期之頁請求:發生在頁面生命週期之前,用戶請求頁時,ASP.NET將確定是否需要分析和編譯頁,從而確定是否開始頁面的生命週期,或者是否可以在不運行頁的情況下發送頁面緩存以進行響應。

2、ASP.NET頁面生命週期之開始:設置頁屬性,如:HttpContext以及其他屬性;在此階段,頁面需要確定是回發請求還是新請求,並設置IsPostBack屬性;設置頁面的UICulture屬性。

3、 ASP.NET頁面生命週期之頁面初始化:加載所有主題;控件生成,並設置UniqueID;

注:ViewState、ControlState中的值還未加載至控件;如果頁面是回發,則回發數據也還未加載;故此時控件可以訪問,但值可能出錯。

4、ASP.NET頁面生命週期之加載:如果當前請求是回發請求,則爲控件加載ViewState和ControlState中的值。

5、ASP.NET頁面生命週期之驗證:調用所有驗證程序控件的Validate方法,此方法將設置驗證程序控件和頁的IsValid屬性。

6、ASP.NET頁面生命週期之回發事件處理:如果請求是回發請求,則調用所有事件處理程序。

7、ASP.NET頁面生命週期之呈現:首先對該頁和所有控件進行保存視圖狀態,然後對每個控件調用Render方法,它會提供一個文本編寫器,用於將控件的輸入寫入頁的Response屬性的OutputStream中。

8、ASP.NET頁面生命週期之卸載:完成呈現,並已將頁發送至客戶端、準備丟棄該頁後,調用卸載。將卸載屬性如:Response和Request等等。

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章