zoukankan      html  css  js  c++  java
  • asp.net生命周期

    当用户起一个请求到服务器,服务器接收到请求并将该页面返回给浏览器。

    这一个看似简单的过程中间到底经历了什么?

    我们可以称这一过程为页面的生命周期,即,一个页面从开始被请求到请求结束销毁的过程

    而这其中aspx和ashx的生命周期又不一样,mvc的生命周期更是大不相同

    首先仅讨论aspx和ashx

    因为这两者的生命周期非常相似

    不同点仅仅在于aspx多干了几件事情

    这从ashx页面的ProcessRequest方法中可以看出一二(以下称ProcessRequest方法是pr方法)

    首先

    用户起一个请求到服务器

    iis服务器接收到用户的请求,并判所请求的文件类型

    如果是html,css,js,jpg等静态的文件

    iis将会在本地磁盘上找到相关的文件直接发送回浏览器

    这就是为什么静态页的相应速度比较快,要使用页面静态化技术的原因

    如果是aspx,ashx甚至可能是php,jsp这种动态页面又该怎么处理呢?

    在iis中保存着一张映射表

    该表中记录着各个动态文件所对应的后缀名

    以及对应的可以处理该动态文件的程序集

    比如:aspx和ashx对应的为aspnet_isapi.dll

    iis通过这个起着桥梁作用的程序集与.net framework相连

    将iis不能处理的动态文件交给framework处理

    在framework中经过一系列的处理装载生成了对应的页面

    在通过桥梁返回给iis,之后再返回给浏览器

    这就是简单的asp.net生命周期过程

    如下图(asp.net请求管道第一版):


    详细的asp.net页面生命周期:

    浏览器发送请求到iis

    iis无法处理动态页面

    交给 映射表中对应的扩展程序集

     将请求发给 Framework 

    调用HttpRuntime.ProcessRequest()方法开始整个asp.net生命周期(  HttpRuntime中有一个指向扩展程序的指针用来接受和发送报文 )

    这时会先创建一个HttpWorkRequest对象,里面存放着请求的原始报文数据 

    根据 HttpWorkRequest对象创建一个HttpContext对象存放处理过的报文信息以供给程序员使用,全都封装在
    context对象中的Request属性中,如Request.Form,而Response属性中将会储存生成的响应报文的数据(这里有没有觉得很熟悉,我们经常会使用到的方法和属性就是这里来的)
     在这之后会通过HttpApplicationFactory 创建一个 HttpApplication然后调用ProcessRequest方法来处理整个请求(这里也会用到HttpContext上下文封装的请求信息)

    在该pr方法中按照执行顺序的19个事件的过程组成了一个请求管道(这个pr方法其实就是执行一系列的事件)

    其中第八个事件时创建被请求的页面类对象并转成IHttpHandler接口(对这个接口有没有很熟悉)

    在11与12个事件之间执行页面类对象的ProcessRequest方法

    在这里,ashx的pr方法是直接提供给程序员写的,所以里面只是一些简单的代码

    而aspx的pr方法中,还调用了BuildControlTree()生成页面空间树,之后调用Rend方法根据空间树生成html代码

    这就是为ashx响应速度会比aspx快,因为ashx的pr方法很简洁

    所有事件执行完毕
    之后,会有一个FinishRequest方法结束请求管道

    在通过HttpWorkRequest 将生成的html代码返回给扩展程序

    交给iis

    返回给浏览器

    详情如下图:


    借助反编译攻击Reflector我们可以看到生命周期的整个过程

    记录的不怎么清楚,自己的理解也表达不清楚

    希望大侠给予指导

  • 相关阅读:
    【js】右下角浮动窗口
    malefile
    跟我一起学习VIM
    Linux服务器开发初步
    如何学习Linux
    什么是Java序列化?如何实现序列化?
    java微信工众号开发
    史上最全最强SpringMVC详细示例实战教程
    Hibernate注解方法使用总结
    Hibernate注解
  • 原文地址:https://www.cnblogs.com/jchubby/p/4429745.html
Copyright © 2011-2022 走看看