HttpHandler與HttpModule的用處與區別


  問題1:什么是HttpHandler?

  問題2:什么是HttpModule?

  問題3:什么時候應該使用HttpHandler什么時候使用HttpModule?

  答案1:HttpHandler,Http請求的處理者,例如ScriptHandler、WebServiceHandler,IHttpHandler的實現都是為了處理某一類的請求。如ScriptHandler負責處理對腳本的請求。

  答案2:HttpModule,Http模塊。實際上就是那19個標准事件的處理者,或者說19個標准事件的訂閱者,比如OutputCacheModule,SessionStateModule。詳細可以到在這篇文章里面看到http://www.cnblogs.com/kissdodog/p/3527922.html。

一、HttpHandler的職責

  1、由於HTTP請求有很多種請求類型,比如請求aspx、html、jpg等等。因此,僅僅由HttpApplication直接處理請求時很臃腫的,而且不利於擴展。因此Asp.net采用了抽象工廠模式來處理這些請求。Asp.net在web.config的架構中,允許我們制定某些請求映射到一個HttpHandlerFactory。

<!--適用於IIS6的配置-->
<system.web>
  <httpHandlers>
    <add path="*.aspx" verb="*" type="MyMVC.MvcPageHandlerFactory, MyMVC" validate="true" />
  </httpHandlers>
</system.web>

<!--適用於IIS7的配置(集成模式)-->
<system.webServer>
  <handlers>
    <add name="MvcPageHandlerFactory" verb="*" path="*.aspx" type="MyMVC.MvcPageHandlerFactory, MyMVC" preCondition="integratedMode" />
  </handlers>
</system.webServer>

  所以,我們應該這樣理解HttpHanlder:一個HttpHanlder用於響應一類的請求,為一類的請求生成響應結果。

  我們經常用到的HttpHanlder有哪些? 

  1. aspx頁面。
  2. asmx服務文件。
  3. ashx文件(一般處理程序)。
  4. 實現IHttpHandler接口的自定義類型。

  我們通常使用HttpHanlder做什么? 

HttpHanlder類型 實現目標
aspx頁面 響應aspx的請求,輸出HTML結果
asmx服務文件 響應服務調用
ashx文件(一般處理程序) 實現簡單的AJAX響應
實現IHttpHandler接口的自定義類 響應什么擴展名的請求?

二、HttpModule的職責

  有時候有些頁面需要一些相同的檢查功能,比如身份驗證。明顯使用HttpHandler是不方便的,因為不是所有的頁面都需要去調用那些相同的功能。
HttpModule的設計正是提供了一個靈活的方法解決這種功能重用的問題,它采用事件(觀察者)的設計模式,將某些HttpHandler都需要的功能抽取出來,形成不同的觀察者類型,這些觀察者類型可以編譯成類庫形式,供多個網站共用。為了讓ASP.NET管線更靈活,ASP.NET允許我們再web.config中自由配置需要的HttpModule。

<!--適用於IIS6的配置-->
<system.web>
    <httpModules>
        <add name="SetOutputCacheModule" type="MyMVC.SetOutputCacheModule, MyMVC"/>
    </httpModules>
</system.web>

<!--適用於IIS7的配置(集成模式)-->
<system.webServer>
    <modules>
        <add name="SetOutputCacheModule" type="MyMVC.SetOutputCacheModule, MyMVC" preCondition="integratedMode" />
    </modules>
</system.webServer>

  配置只是告訴ASP.NET,這些HttpModule需要運行起來,可能會用得着。

  我們用HttpModule做什么事情? 

  1. 修改某些請求(例如前面的示例修改了響應頭)。
  2. 檢查檢查請求(例如身份認證檢查)。

  HttpModule能處理哪些請求呢? 

  1. 默認是全部進入ASP.NET的請求。
  2. 如果只需要處理部分請求,那么請自行判斷。

三、總結

  HttpHandler相當於一條水管,HttpModule相當於一小節水管。HttpHandler有很多條,一條流油,一條流水等等。HttpModule相當於一小截,需要過濾的長水管里面都可以裝上。


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM