关闭

ASP.NET | WebForm 处理机

544人阅读 评论(0) 收藏 举报
分类:

------------------------------------------------------------------------------------------------------------------------

当浏览器向服务器发送一个请求报文,请求报文里肯定包含了url地址的。当服务器软件IIS接收到浏览器发送过来的请求后,IIS会判你请求的是否是html静态页面还是aspx(aphx)动态页面
如果是html的静态页面的话,IIS就会直接去我们的服务器所在的硬盘中读取这个静态页面的代码,然后返回给浏览器
如果是aspx(ashx)的话 IIS发现自己处理不了.aspx(ashx)文件,就会去根据后缀名去映射表(这个映射表可以去,控制面板->管理工具->INTERNET信息服务IIS管理器->处理程序映射 中找)中找对应的后缀,如果能找到的话,就会,它就会把这条请求通过我们一个中间处理程序aspnet_isapi.dll ,讲我们的处理请求转交给我们的asp.net处理框架(而这个asp.net框架就是今后我们要学习的重点部分)在这个asp.net框架里面,它就会通过我们的.net Framework一系列的组件然后去处理我们这一条请求。首先它会找到我们这条请求的页面(我们这条请求有具体的页面,比如localhost:5650/Handler1.ashx这条请求的具体页面就是Handler1.ashx)
但是这个时候拿到的仅仅请求的url这个字符串,拿到这个字符串后,就会通过我们的反射创建这个Handler1.ashx文件的后台类Handler1.ashx.cs的对象(我们这里要创建对象呢?因为Handler1.ashx.cs这个页面后台类本身是一个类,那要使用这里类中的方法,就需要创建对象),创建完对象后,紧接着就调用public void ProcessRequest(HttpContext context)这个方法(这个方法简称PR方法),执行我们程序员自己写的代码,执行完毕后,将产生的代码交给Framework 然后Framework转交给中间处理程序aspnet_isapi.dll,由中aspnet_isapi.dll交给IIS,然后IIS返回给浏览器 (这就是一般处理程序的过程)


注意:一般处理程序 Handler1.aspx,我们展开这个Handler1.ashx后发现下面还有一个Handler1.ashx.cs的文件
其实这个Handler1.ashx其实是一个前台文件,Handler1.ashx.cs是后台类。我们在这个Handler1.ashx前台文件上右键,查看标记,就会发现其实这个前台文件里面的内容仅仅是<%@ WebHandler Language="C#" CodeBehind="Handler1.ashx.cs" Class="WebApp.Handler1" %>这么一段指令集,这段指令集指向它后台页面中具体的一个类,这个类就是Handler1.ashx.cs
,所以一般处理程序的Handler1.ashx前台文件的作用就是指定它后台的类是哪一个


当用户在浏览器端输入请求URL地址的时候,一敲回车,这个时候浏览器做的第一件事情就是根据用户输入的这个URL地址,把它封装成一个HTTP请求报文(如果是Get请求,没有任何表单提交的话,请求报文的最下方是没有任何数据的)浏览器把这个数据,更加DNS解析,找到对应的域名所对应的IP地址。然后把这个请求报文数据发送给对应的IP地址下对应的端口号,然后服务器端接收到这个请求报文以后根据你的端口号转到对应的网站进程,在网站进程里面接到你这个请求报文体,根据拟这个请求报文体进行解析,解析完毕以后找到你要请求对应的资源,如果是静态资源则直接由服务器读取磁盘上的静态文件把它当做bety[]数组,以二进制的方式直接发送给浏览器,这样浏览器就会将这个二进制流转换成HTML代码,然后用户就可以看到当前请求返回的结果,注意:服务器将响应数据返回给浏览器之前要先拼接一个响应报文头,然后中间空一行,后面就是响应报文体


如果用户请求的是一个动态资源(aspx,ashx文件),服务器还是首先解析我们这个请求报文,解析的时候会把我们这个请求报文解析到HttpContext这个上下文类里面,这个HttpContextL类中又包含了HttpRequest,和Response,HttpResponse两个对象(这两个对象其实也是一个类)当把请求报文解析到HttpRequest中以后,接下来要处理请求的这个动态网页,处理动态网页的时候,首先服务器会动态创建一个HttpApplication这个对象,在这个对象里面对请求资源进行处理,处理完毕以后把响应的内容返回给浏览器,接下来浏览器解析这段响应报文请求



一般处理程序

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;

namespace WebApplication1
{
    /// <summary>
    /// Handler1 的摘要说明
    /// </summary>
    public class Handler1 : IHttpHandler
    {

        //这个ProcessRequest方法我们简称PR方法,它是IHttpHandler接口中的方法,因为Handler1这个类继承了IHttpHandler接口,所以在这里实现了这个PR方法
        public void ProcessRequest(HttpContext context)
        {

            //在这里面就是我们程序员自己写的代码
            context.Response.ContentType = "text/plain";
            context.Response.Write("Hello World");
        }

        //这个IsReusable属性也是IHttpHandler接口中的一个属性,因为Handler1这个类继承了IHttpHandler接口,所以在这里实现了这个IsReusable属性
        public bool IsReusable
        {
            get
            {
                return false;
            }
        }
    }
}


0
0

查看评论
* 以上用户言论只代表其个人观点,不代表CSDN网站的观点或立场
    个人资料
    • 访问:805187次
    • 积分:12590
    • 等级:
    • 排名:第1264名
    • 原创:469篇
    • 转载:26篇
    • 译文:2篇
    • 评论:74条
    最新评论