一点一点学ASP.NET之基础概念——HTTP运行期与页面执行模型
?
轉(zhuǎn)自:http://www.cnblogs.com/stwyhm/archive/2006/08/08/470972.aspx
HTTP運行期
HTTP運行期處理客戶端應(yīng)用程序(例如Web瀏覽器)進入的一個Web請求,通過處理它的應(yīng)用程序的適當組件路由請求,然后產(chǎn)生響應(yīng)并發(fā)回提出請求的客戶端應(yīng)用程序。
進入的HTTP Web請求最先由IIS Web服務(wù)器接收到,它在此請求基于ASP.NET已注冊處理的擴展名傳送到ASP.NET ISAPI上。
HTTP運行期首先創(chuàng)建一個HttpContext對象的實例,它包含了當前正在處理的請求信息,接著創(chuàng)建在處理邏輯中涉及到的所有其他組件都可以使用的上下文對象。HttpContext實例提供了對請求對象(HttpRequest類的實例)和響應(yīng)對象(HttpResponse類的實例)的訪問。
HTTP運行期集成由稱為HTTP模塊(HTTP Module)的組件構(gòu)成的處理管線,用于執(zhí)行請求預(yù)處理動作(如:高速緩存的查詢和授權(quán))和后處理動作(如:更新調(diào)整緩存)。這些組件實現(xiàn)IHttpModule接口。在管線中,每個模塊處理不同的全局應(yīng)用層次和特定請求事件來執(zhí)行其邏輯。
HTTP運行期基于請求的URL還選擇一個HTTP處理程序(實現(xiàn)IHttpHandler接口的組件)或HTTP處理程序工廠(實現(xiàn)IHttpHandlerFactory接口的組件)來完成引入請求的實際處理過程。處理程序用HttpContext對象來收集請求信息、并寫出響應(yīng)的結(jié)果。
圖1:ASP.NET Web 應(yīng)用程序中的請求處理過程
?
一個HTTP請求的處理過程
當一個HTTP請求被送入HttpRuntime之后,這個HTTP請求會繼續(xù)被送入到一個被稱為HttpApplicationFactory的容器中。而這個窗口會給出一個HttpApplication實例來處理傳遞進來的HTTP請求,而后這個HTTP請求會依次進入如下幾個容器中:
HttpModule ——> HttpHandler Factory ——> HttpHandler
當系統(tǒng)內(nèi)部的HttpHandler的ProcessResquest的方法處理完畢之后,整個Http Request就被處理完成了,客戶端也就得到相應(yīng)的結(jié)果了。
?
一個完整的HTTP請求在ASP.NET Framework的處理過程如下:
HttpRequest ——> inetinfo.exe ——> ASPNET_ISAPI.dll ——> Http Pipeline ——> ASPNET_WP.exe ——> HttpRuntime ——> HttpApplication Factory? ——> HttpApplication? ——> HttpModule ——> HttpHandler Factory? ——> HttpHandler? ——> HttpHandler.ProcessRequest()
?
頁面執(zhí)行模型
頁面執(zhí)行模型由頁面HTTP處理程序工廠開始,它注冊HTTP運行期以為所有.aspx文件處理請求。頁面處理程序工廠負責創(chuàng)建一個Page對象的實例,這是將最終處理請求所生成響應(yīng)結(jié)果的HTTP處理程序。
首先頁面處理程序工廠嘗試在與請求的.aspx文件相關(guān)的.NET高速緩存內(nèi)查找以前編譯過的頁面類。當查找失敗時,就像第一次請求一樣,處理程序工廠將讀取和解析文件,并創(chuàng)建一棵解析樹(parse tree)。解析樹類似于控件樹,但是并不包含控件,解析樹包含稱為控件生成器(control builder)的對象實例。控件生成器包含了在解析過程期間收集的相關(guān)控件信息。然后通過Page指令中的Language attribute,用與頁面相關(guān)的語言把解析樹轉(zhuǎn)變?yōu)榇a。然后,頁面處理程序工廠調(diào)用適當?shù)木幾g程序,動態(tài)地編譯從Page中得到的類,頁面處理程序工廠還將新建的類放置到ASP.NET調(diào)整緩存中,并且把高速緩存記錄和文件相關(guān)性關(guān)聯(lián)起來。文件相關(guān)性監(jiān)視.aspx文件做出的變化,并保證任何變化都自動地使高速緩存記錄無效,在下次請求時這些記錄將再次解析修改過的文件。
圖2:頁面如何處理請求
轉(zhuǎn)載于:https://www.cnblogs.com/JustDI/archive/2007/07/02/802562.html
總結(jié)
以上是生活随笔為你收集整理的一点一点学ASP.NET之基础概念——HTTP运行期与页面执行模型的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 网络工程师交换试验手册之十八:SWITC
- 下一篇: .NET正则表达式使用高级技巧之替换类