刚接触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 其他额外的操作都没做

我们再观察一下html的对比

10想解决以上疑惑 那么我们就得了解页面的生命周期了

前面我们所说的使用了服务器控件和不使用控件的页面类对象实现的PR方法处理逻辑里面的不同点是  使用了服务器控件的页面类

的PR方法会将服务器控件以控件对象保存到数组里面。

这个时候回调用页面生命周期的一系列事件

(1)LoadState将表单隐藏域 _ViewState的数据设置到页面类对象的ViewState中 然后将viewState的数据绑定到对应的控件属性中(回发情况下 这里就是使用了数据源服务器控件保存状态的原因了(listview DataList))

(2)ProcessPostData  这里会将提交的表单元素赋值给对应的控件对象(表单类型服务器控件还原状态 textBox之类的)

(3) PageLoad 这里则是调用后台页面的我们自己写的处理逻辑的代码了

(4)ProcessPostData 这里还会调用一次(之前很疑惑。想想也就明白了 比如我们在PageLoad可能会动态的创建控件对象。那么回发情况也要还原我们手动创建的控件对象的值。那么为什么上面那一次不在这里一起处理。因为我们会在PageLoad的时候通过this.服务器控件 的形式访问 处理业务)

(5)RaiseChangeEvents方法执行控件的非点击事件

(6)RaisePostBackEvents方法执行控件的点击事件

我们观察上面的控件绑定的事件后会生成一段js  这段js 就是手动触发表单的提交事件 回发。并且把触发事件的 服务器控件id发送到服务器。5 6环境则会调用触发的服务器控件相应事件

比如可以做一个测试 一个服务器控件绑定了change事件和click事件 那么 我们点击这个事件后不仅click会在服务器调用 change也会

(7)则吧新的数据源保存到页面类的ViewState中。(下一次回发再还原)

(8)最后则调用服务器控件的Render方法生成对应的html 写入response(多态的一种展现形式)

发现写代码的时候更多时候回关注 自己写的一段代码会出现什么效果。而不会关注实现这个效果 程序中处理是千山万水才走到这一步。 那么很多东西我们都不能自己把控。所以把现在理解的东西记下来 方便查阅

转载于:https://www.cnblogs.com/LQBlog/p/5290115.html

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

  1. asp.net中生命周期的浅析

    由于,一直对asp.net中生命周期的问题困惑,所以就特地去学习了下生命周期. 生命周期我觉得主要能分成一下几个阶段,按照发生的时间顺序 1.初始化页面框架 这个过程触发page.Init事件,这个是 ...

  2. [译] ASP.NET 生命周期 – ASP.NET 应用生命周期(一)

    概述 ASP.NET 平台定义了两个非常重要的生命周期.第一个是 应用生命周期  (application life cycle),用来追踪应用从启动的那一刻到终止的那一刻.另一个就是 请求生命周期 ...

  3. [译] ASP.NET 生命周期 – ASP.NET 请求生命周期(二)

    ASP.NET 请求生命周期 全局应用类也可以用来跟踪每个独立请求的生命周期,包括请求从 ASP.NET 平台传递到 MVC 框架.ASP.NET 框架会创建一个定义在 Global.asax 文件中 ...

  4. 【转载】Asp.Net 全生命周期

    用三张图片详解Asp.Net 全生命周期 此文是转载阳阳多的博客内容,特此声明. 下面我们使用三张图片解析ASP.net的整个生命周期,我总感觉使用图片更加的清楚的说明这种问题,所以使用的这样方式 说 ...

  5. ASP.NET页生命周期概述

    ASP.NET页生命周期的定义,有以下8个方面:页请求,开始,页初始化,页加载,验证,回发事件,呈现,卸载. ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤.这些步 ...

  6. [转]ASP.NET页面生命周期描述

    ASP.NET页面生命周期描述 vigorID:Vigorcsdn 在以前写个一篇关于ASP.NET页面生命周期的草稿,最近又看了看ASP.NET,做个补充,看看页面初始过程到底是怎么样的 下面是AS ...

  7. Asp.net MVC生命周期

     Asp.net应用程序管道处理用户请求时特别强调"时机",对Asp.net生命周期的了解多少直接影响我们写页面和控件的效率.因此在2007年和2008年我在这个话题上各写了一篇文 ...

  8. .NET与java的MVC模式(3):ASP.NET 页生命周期概述

    ASP.NET 页生命周期概述 来源:MSDN ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤.这些步骤包括初始化.实例化控件.还原和维护状态.运行事件处理程序代码 ...

  9. ASP.NET页面生命周期描述

    附一篇文章:http://blog.csdn.net/Vigorcsdn/article/details/572552 在以前写个一篇关于ASP.NET页面生命周期的草稿,最近又看了看ASP.NET, ...

最新文章

  1. Atitit.java jna  调用c  c++ dll的原理与实践  总结  v2  q27
  2. 使用DPM 2010备份还原Exchange2010单个邮箱
  3. Java笔记——Java代码块的执行顺序
  4. AsyncTask与多任务
  5. Android 网络编程之Http通信
  6. Oracle数据库12cR2(项目实战之二):Linux系统安装Oracle12.2
  7. PHP笔记-获取文件扩展名例子
  8. Spring 2.5新特性及架构图
  9. 给大家介绍一下实现Go并发同步原语的基石
  10. 预充电电路工作原理_变频冰箱开关电源电路工作原理及检修。
  11. volatile指令重排_volatile可见性和指令重排
  12. 前阿里P10员工赵海平加入字节跳动,职级或为4+
  13. PHP长方体体积,长方体体积公式
  14. 在centos7上编译EDK2
  15. Android实时音视频如何快速实现回声消除
  16. 苹果从中国赚六百多亿美元,却在转移生产线,该减轻对它的依赖了
  17. ASCII 编码对照表 一览表
  18. html手机和电脑一致,浏览器兼容性(手机、电脑。js、html、css)
  19. 基于JavaSwing开发画图软件 课程设计 小作业 大作业源码
  20. 计蒜客题解——T1769:最大岛屿

热门文章

  1. mysql 查询近几天的数据
  2. 【thymeleaf】 Link (URL) expressions: 使用 Link 表达式创建 URL
  3. php中get和set区别,javascript中set与get方法详解
  4. python框架django入门_web框架之Django(python3入门)
  5. android 并排按钮,简单布局:右边三个按钮并排靠右,左边一个输入框填满其他空间,多谢...
  6. 多少人举报才封手机号_一个人赚多少钱,才敢回家过年?
  7. python中title用法_在CSV fi中使用Title()
  8. Npm如何升级package.json
  9. 移动端安全测试主要涉及_移动端测试之Monkey操作事件和参数
  10. sql 分组求和_从零学会SQL:汇总分析 D3