深入了解asp.net框架。生命周期以及事件处理机制

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了深入了解asp.net框架。生命周期以及事件处理机制相关的知识,希望对你有一定的参考价值。

刚接触asp.net框架觉得很好奇。他的快速开发是怎么实现的。控件的状态又是怎么保持的。我们都知道http是无状态的。而且网上很多人都说使用asp.net框架使用服务器框架是非常慢的。

带着这些疑问我们来了解asp.net框架吧

 

我们先来简单说一下asp.net框架的执行过程

当浏览器发送一个请求 比如请求index.aspx 的页面 到底经过了哪些事情

1.首先客户端会组织请求报文发送到iis服务器

2.iis服务器通过文件后缀到扩展程序映射找到对应的处理程序即,这里这是asp.net_isapi(经典模式情况下)

3.通过这个程序将请求报文发送到asp.net框架。最先处理的则是httpRuntime.ProcessRequset方法(以后我们简称PR方法)

    (1)这里会对请求报文进行解析并封装 (2)同时创建上下文对象 初始化相关属性(httpRequset,httpResponse,seeson)

4.然后通过httpAplicationFactory工厂类创建一个httpAplication对象  这个对象主要是管理我们的事件管道

5.调用httpAplicaton对象的PR方法 传递HttpContext进去 并执行我们的事件管道

6.事件管道有22个事件但是我们只要关注19个就行了

7第8个管道到第九个管道之间则通过解析创建我们的前台页面类(我们的页面编译后也会是一个类继承关系 <后台页面类<page) 然后将他保存到上下文的IhttpHander类型的RemapHandler-属性中

技术分享

8.第9个事件则通过判断RemapHandelr是否实现了IRequiresSessionState接口如果实现了则通过读取cookie中的sessionId在session池中知道对应session对象

赋值到上下文的Session属性。(这里曾经的疑惑就豁然开朗了了。一般处理程序为何要手动实现这个接口才能使用session)

9.第11到第12个事件则调用RemapHandelr的PR方法这里相当于有2个分支

   (1)首先我们来对比一下使用了服务器控件的页面类和没有使用服务器控件的页面类

       没用使用服务器控件页面

技术分享

 接下来我们看一下使用了服务器控件的页面

技术分享

从这里我们可以做个一个简单对比

           使用了服务器控件我们知道最终都打造成控件对象(而我们知道创建对象是耗时的)

          没使用服务器控件的页面只是将html写入response 其他额外的操作都没做

 

 

 

今天先写到这里了 呼呼  个人总结不喜勿喷

 

以上是关于深入了解asp.net框架。生命周期以及事件处理机制的主要内容,如果未能解决你的问题,请参考以下文章

ASP.NET 页生命周期概述1

[译] ASP.NET 生命周期 – ASP.NET 请求生命周期

ASP.NET 生命周期,PreRequestHandlerExecute 事件

ASP.NET应用程序与页面生命周期

Load和Ready

[译] ASP.NET 生命周期 – ASP.NET 请求生命周期