ASP.NET頁面請(qǐng)求處理介紹
HttpRuntime類
頁面請(qǐng)求先給可以處理原始HTTP請(qǐng)求的對(duì)象處理,最后在管線的終端生成要發(fā)給瀏覽器的標(biāo)記。HttpRuntime類是改管道的入口點(diǎn)。
對(duì)每一個(gè)請(qǐng)求,ASP.NET會(huì)創(chuàng)建HttpRuntime對(duì)象,并調(diào)用ProcessRequest來激活該HTTP管道。HttpRuntime對(duì)象會(huì)在創(chuàng)建時(shí)對(duì)許多輔助處理頁面請(qǐng)求的內(nèi)部對(duì)象進(jìn)行初始化。ProcessRequest方法被調(diào)用后,會(huì)創(chuàng)建HttpContext類實(shí)例,他封裝了所有的HTTP提有的信息,我們一般在代碼中使用就是這個(gè)HttpContext對(duì)象,他就是由HttpRuntime對(duì)象創(chuàng)建的。HttpRuntime對(duì)象使用請(qǐng)求信息鎖定能夠處理請(qǐng)求的Web應(yīng)用程序?qū)ο?。通過URL中的虛擬路徑,便可以定位Web應(yīng)用程序,但是真正鎖定能處理請(qǐng)求的Web應(yīng)用程序的對(duì)象是HttpApplicationFactory。會(huì)返回能處理請(qǐng)求的有效對(duì)象。HttpRuntime對(duì)象會(huì)先生成HttpContext對(duì)象,然后把HttpContext對(duì)象傳給HttpApplicationFactory對(duì)象,委托她確定能處理請(qǐng)求的應(yīng)用程序。在應(yīng)用程序的生命周期中,HttpApplicationFactory對(duì)象維護(hù)著很多HttpApplication對(duì)象,該對(duì)象用于處理請(qǐng)求。當(dāng)程序工廠對(duì)象被調(diào)用后,它會(huì)驗(yàn)證請(qǐng)求的目標(biāo)虛擬文件夾是否存在,如果應(yīng)用程序已運(yùn)行,改工廠則從可用的對(duì)象池中取一個(gè)HttpApplication對(duì)象,然后把請(qǐng)求對(duì)象委托給它,如果沒有就創(chuàng)建它。如果虛擬目錄不曾被調(diào)用,則在新的AppDomain中創(chuàng)建一個(gè)HttpApplication對(duì)象,這樣,如果應(yīng)用程序文件global.asax存在,HttpApplication對(duì)象就需要對(duì)它進(jìn)行編譯,該過程相當(dāng)于啟動(dòng)應(yīng)用程序。HttpApplication對(duì)象用于處理頁面請(qǐng)求,每一次處理一個(gè)(多個(gè)對(duì)象用于處理并發(fā)請(qǐng)求)。
HttpApplication類
HttpApplication是一個(gè)基類,代表著運(yùn)行中的ASP.NET應(yīng)用程序。
也可以是HttpApplication的派生類代表著運(yùn)行中ASP.NET應(yīng)用程序。
如果global.asax存在,會(huì)創(chuàng)建動(dòng)態(tài)生成的應(yīng)用程序類的源代碼,
如果global.asax可用,應(yīng)用程序類會(huì)創(chuàng)建,否則會(huì)使用基類HttpApplication。
HttpApplication類或派生類的實(shí)例管理請(qǐng)求的整個(gè)生命周期,是有請(qǐng)求處理完畢后,該實(shí)例會(huì)被釋放,才會(huì)可能處理其他的請(qǐng)求。
HttpApplication維護(hù)著一系列Http模塊對(duì)象,這些對(duì)象可以請(qǐng)求的內(nèi)容進(jìn)行篩選,修改。在請(qǐng)求過程中,可能隨時(shí)會(huì)調(diào)用已注冊(cè)的模塊。HttpApplication對(duì)象能判斷請(qǐng)求資源是什么類型(頁面、控件等),然后使用通過處理程序工廠鎖定可以處理請(qǐng)求的處理程序?qū)ο?。處理程序工廠對(duì)象是實(shí)現(xiàn)IHttpHandlerFactory接口的類實(shí)例,負(fù)責(zé)鎖定可以處理請(qǐng)求的對(duì)象——HTTP處理程序。一個(gè)ASP.NET頁面是一個(gè)處理程序?qū)ο螅▽?shí)現(xiàn)了IHttpHandler接口的類實(shí)例)。
頁面工廠
HttpApplication類會(huì)確定要處理的請(qǐng)求的對(duì)象模型,并委托該類型相關(guān)的處理程序工廠創(chuàng)建其新的實(shí)例。如果請(qǐng)求是一個(gè)頁面請(qǐng)求,那會(huì)怎樣?
一旦HttpApplication對(duì)象掌管了請(qǐng)求,就必須選擇一個(gè)合適的處理程序,對(duì)于面向頁面的請(qǐng)求,對(duì)用的工廠名為:PageHandlerFactory。為找到合適的處理程序,HttpApplication會(huì)讀取配置文件<HttpHandlers>區(qū)段的信息,是包含一個(gè)主要的已注冊(cè)處理程序。請(qǐng)求過來之后,頁面處理工廠會(huì)創(chuàng)建請(qǐng)求頁面的對(duì)象實(shí)例。頁面對(duì)象繼承于Page類,該類實(shí)現(xiàn)了IHttpHandler接口,頁面對(duì)象會(huì)被返回應(yīng)用程序工廠,隨后會(huì)被回傳給HttpRuntime對(duì)象,最后的步驟由ASP.NET運(yùn)行庫完成。ASP.NET運(yùn)行庫會(huì)調(diào)用IHttpHandler的頁面對(duì)象的ProcessRequest方法,這會(huì)使頁面執(zhí)行用戶定義的代碼,并為瀏覽器返回HTML標(biāo)記。
我在網(wǎng)站找了一張整個(gè)管道的流程圖,比較貼近:
相關(guān)文章
淺談ASP.NET MVC 防止跨站請(qǐng)求偽造(CSRF)攻擊的實(shí)現(xiàn)方法
下面小編就為大家分享一篇淺談ASP.NET MVC 防止跨站請(qǐng)求偽造(CSRF)攻擊的實(shí)現(xiàn)方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過來看看吧2018-01-01asp.net下UTF-7轉(zhuǎn)GB2312編碼的代碼(中文)
UTF-7轉(zhuǎn)換GB2312編碼的方法2010-07-07.NET實(shí)現(xiàn)Repeater控件+AspNetPager控件分頁
本文給大家分享的2個(gè)示例,演示AspNetPager最基本的功能,幫助您認(rèn)識(shí)AspNetPager分頁控件及了解它的工作原理。有需要的小伙伴可以參考下2015-11-11asp.net實(shí)現(xiàn)生成靜態(tài)頁并添加鏈接的方法
這篇文章主要介紹了asp.net實(shí)現(xiàn)生成靜態(tài)頁并添加鏈接的方法,非常實(shí)用的功能,需要的朋友可以參考下2014-07-07vb.net借助剪貼板將圖片導(dǎo)入excel內(nèi)
這篇文章主要介紹了vb.net將圖片導(dǎo)入到excel的方法,只要借助剪貼板將圖片粘貼到excel中就可以完成了,大家參考使用吧2014-01-01asp.net gridview中用checkbox全選的幾種實(shí)現(xiàn)的區(qū)別
這幾天為了改變客戶端grid的全選效率問題,詳細(xì)研究了ext中g(shù)rid的全選和gridview中通過腳本實(shí)現(xiàn)的全選效率,總結(jié)一下,供大家參考,有錯(cuò)誤的地方,希望大俠指正,小弟獻(xiàn)丑了。2009-06-06