11 if (!HttpApplicationFactory._theApplicationFactory._inited)
12 {
13 lock (HttpApplicationFactory._theApplicationFactory)
14 {
15 if (!HttpApplicationFactory._theApplicationFactory._inited)
16 {
17 HttpApplicationFactory._theApplicationFactory.Init(context);
18 HttpApplicationFactory._theApplicationFactory._inited = true;
19 }
20 }
21 }
22 return HttpApplicationFactory._theApplicationFactory.GetNormalApplicationInstance(context);
23}
24
System.Web.IHttpHandlerFactory
我們來做進一步的探索,HttpApplication實例需要一個Handler對象來處理資源請求, HttpApplication的主要任務就是找到真正處理請求的類。HttpApplication首先確定了一個創建Handler對象的工廠,來看一下在Machine.config文件中的配置區<httphandlers>,在配置文件注冊了應用程序的具體處理類。例如在Machine.config中對*.aspx的處理將映射到System.Web.UI.PageHandlerFactory 類,而對*.ashx的處理將映射到System.Web.UI.SimpleHandlerFactory 類,這兩個類都是繼承于IhttpHandlerFactory接口的具體類:
<httpHandlers>
<add verb="*" path="*.aspx" type="System.Web.UI.PageHandlerFactory" />
<add verb="*" path="*.ashx" type="System.Web.UI.SimpleHandlerFactory" />
</httpHandlers>
這個配置區建立了資源請求的類型和處理請求的類之間的一個映射集。如果一個.aspx頁面發出了請求,將會調用System.Web.UI.PageHandlerFactory類,HttpApplication調用接口IHttpHandlerFactory中的工廠方法GetHandler來創建一個Handler對象。當一個名為sample.aspx的頁面發出請求時,通過PageHandlerFactory將返回一個ASP.SamplePage_aspx對象(具體產品),如下圖:
文章來源于領測軟件測試網 http://www.kjueaiud.com/