zoukankan      html  css  js  c++  java
  • 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相当于一小截,需要过滤的长水管里面都可以装上。

  • 相关阅读:
    poj 2411 Mondriaan's Dream 骨牌铺放 状压dp
    zoj 3471 Most Powerful (有向图)最大生成树 状压dp
    poj 2280 Islands and Bridges 哈密尔顿路 状压dp
    hdu 3001 Travelling 经过所有点(最多两次)的最短路径 三进制状压dp
    poj 3311 Hie with the Pie 经过所有点(可重)的最短路径 floyd + 状压dp
    poj 1185 炮兵阵地 状压dp
    poj 3254 Corn Fields 状压dp入门
    loj 6278 6279 数列分块入门 2 3
    VIM记事——大小写转换
    DKIM支持样本上传做检测的网站
  • 原文地址:https://www.cnblogs.com/kissdodog/p/3567448.html
Copyright © 2011-2022 走看看