自拍偷在线精品自拍偷,亚洲欧美中文日韩v在线观看不卡

Asp.Net頁面生命周期

開發(fā) 后端
用戶的請(qǐng)求是通過觸發(fā)HttpApplication的19個(gè)事件23個(gè)步驟進(jìn)行處理的。如果是一般處理程序(.ashx),那么執(zhí)行完管道中的事件后按照原路進(jìn)行返回。如果是aspx頁面那么就開始走頁面的生命周期了。

我們都知道,瀏覽器的作用就是將用戶請(qǐng)求的內(nèi)容封裝成HTTP報(bào)文的形式,然后通過Socekt套接字和域名解析服務(wù)器(DNS)將域名轉(zhuǎn)成ip地址發(fā)送到服務(wù)器。

服務(wù)器端的Windows操作系統(tǒng)分為兩個(gè)部分,IIS運(yùn)行在用戶模式下,而監(jiān)聽80端口的那部分是運(yùn)行在內(nèi)核模式HTTP.SYS(內(nèi)核模塊也是一個(gè)插件機(jī)制。socket通信機(jī)制在內(nèi)核模塊中,內(nèi)核模塊也是一種通信機(jī)制)下的,屬于HTTP處理的內(nèi)核模塊,內(nèi)核模式可以監(jiān)聽當(dāng)前機(jī)器所有的Http請(qǐng)求,并將當(dāng)前請(qǐng)求進(jìn)行簡(jiǎn)單解析,確定協(xié)議的類型請(qǐng)求的端口,訪問注冊(cè)表,確定當(dāng)前的請(qǐng)求需要交給IIS進(jìn)行處理。

IIS接收到請(qǐng)求之后,訪問INetInfo.exe(IIS主進(jìn)程中的元數(shù)據(jù)信息),判斷文件的類型并查詢當(dāng)前的請(qǐng)求需要經(jīng)過那個(gè)擴(kuò)展程序處理。如果是靜態(tài)文件(html.,js,jpeg.git),直接將文件從服務(wù)器讀取出來按照原路返回,如果是動(dòng)態(tài)文件(ashx,aspx),則交給擴(kuò)展程序aspnet_isapi.dll文件執(zhí)行,aspnet_isapi.dll是一個(gè)擴(kuò)展程序,實(shí)現(xiàn)了IIS內(nèi)部的一些API,也是一種請(qǐng)求過濾的插件。它的作用是1.負(fù)責(zé)啟動(dòng)托管環(huán)境。2.初始化托管環(huán)境。3.將請(qǐng)求分發(fā)給托管環(huán)境。也就是說,它負(fù)責(zé)啟動(dòng)aspnet  Runtime創(chuàng)建aspnet運(yùn)行環(huán)境,將請(qǐng)求交給ISAPIRuntime的PR方法。

ISAPIRuntime是進(jìn)入NET托管環(huán)境的入口,它在方法中通過一個(gè)ecb句柄指向了當(dāng)前請(qǐng)求報(bào)文體的內(nèi)存地址,將HTTP請(qǐng)求報(bào)文簡(jiǎn)單封裝為一個(gè)HttpWorkRequest對(duì)象。

調(diào)用HttpRuntime.PR(wr:(HttpWorkRequest對(duì)象))根據(jù) HttpWorkRequest對(duì)象封裝成一個(gè)HttpContext上下文對(duì)象,它包含了所有的請(qǐng)求信息.然后交給HttpApplicationFactory進(jìn)行處理。

根據(jù)HttpApplication獲得一個(gè)HttpApplication對(duì)象的實(shí)例,獲取實(shí)例的時(shí)候,先去Application池中去找是否有空閑的HttpApplication對(duì)象,如果有則直接返回一個(gè)對(duì)象,不存在的話就就先編譯globle文件生成一個(gè)HttpApplication的派生類,通過反射創(chuàng)建一個(gè)HttpApplication實(shí)例并返回。并開始處理用戶的請(qǐng)求。

用戶的請(qǐng)求是通過觸發(fā)HttpApplication的19個(gè)事件23個(gè)步驟進(jìn)行處理的。如果是一般處理程序(.ashx),那么執(zhí)行完管道中的事件后按照原路進(jìn)行返回。如果是aspx頁面那么就開始走頁面的生命周期了。

頁面生命周期的主要步驟如下:

1.創(chuàng)建頁面控制樹,那么如何創(chuàng)建頁面樹的結(jié)構(gòu)呢?把它封裝成了一個(gè)方法,這個(gè)方法的名字就叫做FrameworkInitliaze() 在方法內(nèi)部給aspx上所有的控件都New一個(gè)實(shí)例,然后構(gòu)造一個(gè)樹的結(jié)構(gòu)即是有一個(gè)樹的結(jié)構(gòu)。只有執(zhí)行創(chuàng)建頁面之后,頁面上才會(huì)有控件。

2.判斷IspostBack,確定是否回發(fā)。

3.初始化

      初始化包括三個(gè)階段:

      1)PreInint()預(yù)初始化

         A.調(diào)用OnPreinit方法引發(fā)PreInit事件

         B.利用App_Themes目錄中的內(nèi)容進(jìn)行初始化主題。以動(dòng)態(tài)實(shí)現(xiàn)一個(gè)PageThem  

           屬性值,并創(chuàng)建一個(gè)編譯類的實(shí)例。

         C.應(yīng)用模板頁

      2)開始初始化,將所創(chuàng)建的控件樹上的控件都new一個(gè)實(shí)例并賦默認(rèn)值。

         A.遞歸初始化Controls集合中的控件,初始化包括設(shè)置這些控件的屬性。

         B.遞歸應(yīng)用控件皮膚。

         C.調(diào)用OnInit方法以引發(fā)自身的Init事件,接著遞歸調(diào)用子控件的OnInit方法來    

           引發(fā)他們的Init事件。

         D.調(diào)用自身的TrackViewState方法重啟自身的視圖狀態(tài)跟蹤,接著遞歸調(diào)用子控                 

            件的TrackViewState方法重啟自身的視圖狀態(tài)跟蹤。

        3)InitComplete()初始化完成

       4.加載ViewState處理回發(fā)數(shù)據(jù):

            加載頁面狀態(tài),解析隱藏域中的ViewState,ViewState保持的值賦值到對(duì)應(yīng) 

        控件中。把需要觸發(fā)事件的控件放到一個(gè)集合當(dāng)中去。 

       5.預(yù)加載(PreLoad)

             頁面調(diào)用OnPreLoad方法以引發(fā)PreLoad事件,該事件表示頁面生命周期進(jìn) 

         入加載階段。對(duì)應(yīng)sapx.cs中的Page_Load事件。

       6.加載(Load)

             頁面首先調(diào)用自身的OnLoad方法以引發(fā)自身的Load事件,接著遞歸調(diào)用 

         Contorls集合中控件的OnLoad方法以引發(fā)它們的Load事件。

       7.ProcessPostData第二次處理回發(fā)數(shù)據(jù)

       8.觸發(fā)改變的事件和點(diǎn)擊事件。

       9.頁面加載完成

       10.預(yù)渲染,對(duì)空間樹進(jìn)行最后一次處理

       11.保存當(dāng)前頁面的狀態(tài)。

       12.頁面渲染

       頁面生命周期結(jié)束后,形成了頁面,繼續(xù)執(zhí)行管道之后的事件,執(zhí)行完畢后按照原路返回到客戶端。

 

原文鏈接:http://www.cnblogs.com/hanwenhuazuibang/archive/2013/04/07/3003289.html

責(zé)任編輯:林師授 來源: 博客園
相關(guān)推薦

2009-08-04 16:05:15

ASP.NET頁面生命

2009-08-04 16:50:15

ASP.NET頁面生命

2009-07-31 10:47:18

ASP.NET頁面生命

2009-08-03 14:18:40

ASP.NET編程模型ASP.NET頁面生命

2012-08-16 09:38:38

ASP.NET

2009-08-03 14:37:38

ASP.NET編程模型頁面生命周期

2009-07-23 10:23:44

2009-07-20 10:33:02

ASP.NET MVC

2009-07-23 18:14:17

MVC生命周期

2009-08-10 14:31:46

ASP.NET組件設(shè)計(jì)ASP.NET控件生命

2009-08-04 17:49:31

Web Page生命周ASP.NET Pos

2009-02-12 13:16:55

請(qǐng)求生命周期MVCASP.NET

2009-08-07 16:57:17

ASP.NET頁面生存

2009-07-28 09:46:53

ASP.NET服務(wù)器控

2009-07-23 18:55:17

ASP.NET頁生命周

2011-06-21 10:26:37

2010-04-02 09:02:02

ASP.NET MVC

2009-08-04 15:58:06

ASP.NET動(dòng)態(tài)控件

2009-07-31 17:53:39

ASP.NET線程安全

2021-04-26 09:22:07

ASP.NET Cor服務(wù)周期
點(diǎn)贊
收藏

51CTO技術(shù)棧公眾號(hào)