笔记:如果不对,欢迎指出来。

当一个用户访问一个页面,实际是发送http请求到服务器,而http请求其实是socket发送特定规范(协议)的文字(报文)。

然后服务器的http.sys内核模块接受 请求,放在请求队列中。

IIS中有两个服务,一个IISADMIN,一个W3SVC服务,当http.sys接受到请求时,会通知w3svc。

然后w3svc会确认下有没有应用程序池,如果没有启动,会启动应用程序池,通知应用程序池,应用程序池会让w3wp.exe工作进程去拿一个请求,如果请求的页面时静态的就会处理直接返回。

如果是.aspx等结尾的动态页面,则会交给aspnet_isapi.dll去处理,它会吧请求交给ISAPIRuntiome函数,执行函数的PR方法,在内部中会吧ecb句柄转成HttpWorkRequest对象,随后转给HttpRuntime,执行它的RP方法,她会把HttpWorkRequest转化成HttpContext。

然后通过HttpApplicationFactory获取一个HttpApplication实例

如果是第一次请求,会找到gloable文件,把他编译成类型,调用application_start方法。

通过HttpApplication池获取一个HttpApplication对象。

如果HttpApplication池未空,则通过gloable文件编译的类型反射出一个实例。

然后就以HttpApplication来负责 管道运作。(二十多个步骤,十九个事件)

第一个和最后一个分别是beginrequest和endrequest事件。

会在第七和第八个事件中根据请求地址创建页面对象,或者一般处理程序对象。

在第九个事件和第十个事件之间会根据cookie中的sessionID加载session状态。

在第十一个事件和第十二个事件中会执行页面对象或者是一般处理程序的pr方法。

如果是一般处理程序,就直接执行了。

如果是页面的话,就开始进入页面的生命周期了。

第一步:是创建页面控件树(控件上没有对应的数据)。

第二步:会确定IsPostBack属性值。

第三步:然后进入初始化。

第四步:再加载viewstate(将viewstate上的数据进行base64解密,并放在对应的内容上),处理回发数据,找到对应改变了的控件和被点击的控件。

第五步:执行preLoad事件,执行page_load事件,由于在load事件中可能会做操作,所以还会进行第二次处理回发数据

第六步:触发控件的改变事件。触发点击事件。结束加载

第七步:预渲染(PreRender)是最后改变页面控件状态的机会。

第八步:保存页面状态,把当前页面状态放入viewstate中。

第九步:渲染,把整个aspx页面渲染成html的过程。

第十步:卸载.

asp生命周期的更多相关文章

  1. ASP.net 页面生命周期

    ASP.NET 页面生命周期 Page_Preinit(); 在页初始化开始时发生 Page_Init(); 在所有控件初始化且应用外观设置后引发 Page_InitComplete(); 在页初始化 ...

  2. ASP.NET Core中的依赖注入(4): 构造函数的选择与服务生命周期管理

    ServiceProvider最终提供的服务实例都是根据对应的ServiceDescriptor创建的,对于一个具体的ServiceDescriptor对象来说,如果它的ImplementationI ...

  3. asp.net MVC 应用程序的生命周期

    下面这篇文章总结了 asp.net MVC 框架程序的生命周期.觉得写得不错,故转载一下. 转载自:http://www.cnblogs.com/yplong/p/5582576.html       ...

  4. [转]ASP.NET应用程序生命周期趣谈(五) IIS7瞎说

    Ps:建议初学者在阅读本文之前,先简要了解一下之前的几篇文章,以便于熟悉本文提到的一些关于IIS6的内容,方便理解.仅供参考. PS:为什么叫瞎说呢?我觉得自己理解的并不到位,只能是作为一个传声筒,希 ...

  5. [转]ASP.NET应用程序生命周期趣谈(四) HttpHandler和页面生命周期

    在之前的三篇文章中,我们还算简明扼要的学习了asp.net的整个生命周期,我们知道了一个Request进来以后先去ISAPI Filter,发现是asp.net程序后又ASPNET_ISAPI.dll ...

  6. [转]ASP.NET应用程序生命周期趣谈(三) HttpModule

    在之前的文章中,我们提到过P_Module(HttpModule)这个能干的程序员哥们儿,它通过在项目经理HttpApplication那里得到的授权,插手整个应用程序级别的事件处理.所有的HttpM ...

  7. [转]ASP.NET应用程序生命周期趣谈(一)

    这几天一直在看ASP.NET应用程序生命周期,真是太难了,我理解起来费了劲了,但偏偏它又是那么重要,所以我希望能给大家带来一篇容易理解又好用的文章来帮助学习ASP.NET应用程序生命周期.这篇就是了. ...

  8. asp.net页面生命周期

    Asp.Net页面生命周期 本文转载自:http://www.cnblogs.com/xhwy/archive/2012/05/20/2510178.html 一.什么是Asp.Net页面生命周期 当 ...

  9. 【译】ASP.NET应用程序和页面生命周期

    为何翻译此文 一.此文是Code Project社区2010年4月ASP.NET板块的最佳文章,说明了此文的份量: 二.锻炼自己的英文技术文章翻译能力,提高英文技术文档阅读能力: 三.了解掌握ASP. ...

随机推荐

  1. No redirect found in host configuration file (C:\WINDOWS\Microsoft.NET\Framework\v1.1.4322\aspnet.config).

    Configuration Error Description: An error occurred during the processing of a configuration file req ...

  2. ios 动态修改UILabel字体大小

    - (IBAction)sliderChange:(id)sender {   NSLog(@"sliderChange");   UISlider *slider = (UISl ...

  3. 写一个Windows上的守护进程(8)获取进程路径

    写一个Windows上的守护进程(8)获取进程路径 要想守护某个进程,就先得知道这个进程在不在.我们假设要守护的进程只会存在一个实例(这也是绝大部分情形). 我是遍历系统上的所有进程,然后判断他们的路 ...

  4. (转) Overloads and templates

    Overloaded functions In C++, two different functions can have the same name if their parameters are ...

  5. R语言学习笔记(数据的读取与保存)

    library(MASS)#载入package MASSdata(package="MASS") #查看MASS中的数据集data(SP500,package="MASS ...

  6. 创建ListView的基本步骤

    参考<疯狂android讲义>第2.5节P94 1.创建一个或者多个ListView <LinearLayout xmlns:android="http://schemas ...

  7. JavaScript 全局变量命名空间生成函数

    <script type="text/javascript"> var GLOBAL = {}; GLOBAL.namespace = function(str){ v ...

  8. 关于tuple的只读特性

    a = (1,3,[5,4,1]) a[2][1] = 2 print(a) 结果是:(1,3,[5,2,1]) 可以看到,在这里tuple的内容被修改了. 原因就是tuple的“只读”属性是指tup ...

  9. 巧用Graphviz和pvtrace等工具可视化C函数调用

    http://guiquanz.github.io/2012/10/15/linux_c_call_trace/

  10. Qt 框架的图形性能高(OpenGL上的系统效率高),网络性能低,开发效率高,Quick是可以走硬件加速——Qt中分为好几套图形系统,差不多代表了2D描画的发展史。最经典的软描画系统

    -----图形性能部分-----Qt的widgets部分,运行时的图像渲染性能是一般的,因为大部分的界面内容都是Qt自绘,没有走硬件加速,也就是说很多图形内容都是CPU算出来的.但是widgets底层 ...