zoukankan      html  css  js  c++  java
  • Ajax改良形式——XMLHTTP + HttpHandler

      该模式改善XMLHTTP + WebForm存在的问题,其使用HttpHandler处理请求(Request)的消息和发送响应(Response)。

      HttpHandler是Http的处理核心之一,它实现了ISAPI Extention的功能。HttpHandler的功能是通过实现IHttpHandler接口来实现的。一个简单的Http请求处理过程如下图:

      

      Web请求首先到达IIS,通过aspnet_isapi.dll把请求传递给ASP.NET引擎;在ASP.NET引擎中对Web请求经过多个HTTP Module的处理,最后到达HTTP Handler;HTTP Handler再把处理后的结果返回给IIS,IIS负责进一步把这个结果返回给发出请求的客户端。

      由上面处理过程可以看出,在ASP.NET管理处理的末端是HTTP Handler。其实每个ASP.NET的Page都实现了IHttpHandler,在Visual Studio.net中的page类对象查看器中可以证实这一点,具体的Page类代码如下:

      

       
      接口IHttpHandler包括一个方法和一个属性。ProcessRequest方法是添加自己的代码进行相应处理的地方;IsReuseable属性指明该HttpHandler的实现类是否需要缓存。具体定义代码如下所示:
      //IHttpHandler接口
      interface IHttpHandler
      {
        void ProcessRequest(HttpContext ctx);
        bool IsReuseable{get;}
      }
      Handler的实现
      新建一个类库工程,命名HelloAjax,然后添加一个实现IHttpHandler接口类HttpHandler:
    using System;
    using System.Web;
    using System.Text;
    namespace HelloAjax
    {
      public class HttpHandler:IHttpHandler
        {
            #region IHttpHandler 成员
            public bool IsReusable
            {
                get
                {
                    return true;
                }
            }
            public void ProcessRequest(HttpContext context)
            {
                string str = "服务器Hander得到了您输入的信息:" + context.Request["msg"] + "<br/>您的IP地址是:";
                str += context.Request.UserHostAddress;
                str += "<br/>当前服务器的时间:";
                str += DateTime.Now.ToLocalTime();
                context.Response.Write(str);
            }
            #endregion
        }
    }
    编译后得到的HelloAjax.dll就是要用到的Handler。
    改良工作
    首先,项目中添加对Handler的引用
    然后,Web.config的system.HttpHandler中配置如下节
        <httpHandlers>
             <add verb="GET,POST"
                  path="*.ashx"
                  type="HelloAjax.HttpHandler,HelloAjax"/>
             </httpHandlers>
    最后,客户端请求的URL需改为以.ashx为扩展名
  • 相关阅读:
    ImportError: FloatProgress not found. Please update jupyter and ipywidgets.问题
    运行jupyter notebook显示ImportError: cannot import name 'secure_write',导致始终显示In[*]问题,服务器挂掉
    anaconda中jupyter notebook安装代码自动补全插件,报错“Exception: Jupyter command `jupyter-contrib` not found.”
    Hadoop集群(第7期)_Eclipse开发环境设置
    Hadoop集群(第6期)_WordCount运行详解
    Hadoop集群(第5期)_Hadoop安装配置
    Hadoop集群(第4期)_SecureCRT使用
    Hadoop集群(第3期)_VSFTP安装配置
    Hadoop(2)_机器信息分布表
    Hadoop(1)
  • 原文地址:https://www.cnblogs.com/SFAN/p/2101367.html
Copyright © 2011-2022 走看看