ASP.NET的生命周期
我主要参考了这些文章 ASP.NET应用程序与页面生命周期, IIS处理Asp.net请求和 Asp.net页面生命周期
asp.net页面的生命周期
页面生命周期开始
(一)页面生命周期的主要阶段包括:
1.页面初始化(Init): 服务器创建服务器控件的实例
2.加载(load): 控件实例被加载到它定义的页面对象中
3.预输出:(PreRender) 对控件的更改被更新,准备输出。
4.保存(SaveViewState): 控件的状态信息被保存。
5.输出页面(Render):服务器为控件创建html标记。
6.处理(Dispose): 主要做的工作就是dispose, 关闭数据库连接,文件资源的释放等。
7.卸载(Unload):销毁服务器控件的实例
(二)页面生命周期的主要事件:
1.PreInit:
1)检查IsPostBack 属性
2)动态设置Master Page
3)动态设置Theme
4)设置控件的默认值(UniqueId等)
5)重新创建动态控件(初始化控件),初始化控件的值
2.Init: 这个事件发生在所有的控件被初始化,所有的皮肤设置被应用以后。它用来读取或者初始化控件属性。它能够用来注册一些aspx页面中没有指出的控件的事件。
3.InitComplete: Use this event for processing tasks that require all initialization to be complete.
4.PreLoad: 加载页面的ViewState和所有的控件,然后处理所有的包含在Request实例中的postback数据。
5.Load: 这个事件可能是大家最熟悉的了。需要注意的是,Page对象会递归的调用子控件的onload事件直到页面和所有的子控件被加载完成。这个事件主要用来设置控件属性的值,建立数据库连接(通常不这么做)。
6.Control events: 这个就不多说了,主要是处理控件的事件,例如click。这也就让我们明白了每次我们click一个Button的时候,实际上是要先去执行load事件然后才执行click事件的,一般我们用!IsPostBack来判断一下从而避免执行不必要的加载逻辑。
7.LoadComplete: 页面所有的控件都被加载以后执行,暂时没有想到用来干什么。。。
8.PreRender: 在HTML被生成之前这是最后一个事件。每一个页面中的控件都有PreRender的过程。在这里对将要输出的HTML结果进行最后一次修改。
9.SaveStateComplete: 在这个时间发生之前,已经保存了所有控件和页面的,任何对page或者控件的改动都不会产生左右。暂时没想到用来干啥。
10.Render: 它不是一个事件而是一个方法。工作就是把HTML写回客户端浏览器。
11.UnLoad: 页面中的每一个控件都会发生这件事。在控件中,使用这个事件来做清理工作,例如关闭数据库连接等。对与页面本身也是做清理工作,例如关闭打开的文件和数据库连接,或者结束日志或者其它指定的工作。
需要说明的是,每次Request都会创建一个全新的Page类的实例,所以在页面中的自己定义的字段是不能在两次request中传递值的,需要使用viewstate来存储。
HttpHandler根据页面生命周期中事件的处理把结果发回IIS,IIS再把结果发回客户端浏览器。
值得注意的是,在这个过程中请求会再次通过HttpModule(注册一个EndRequest事件)。
至此,整个Request结束。
asp.net应用程序的生命周期
1.用户从浏览器发送请求到web服务器中,服务器检查请求的扩展名,确定由哪个ISAPI扩展处理该请求。
.aspx、.ascx、.ashx 和 .asmx这类被映射到其上,就可以被ASP.NET处理。
2.ASP.NET收到任何资源的第一个请求时,ApplicationManager类会创建一个应用程序域。然后在应用程序域中,会为HostingEnvironment类创建一个实例。
应用程序域为全局变量提供应用程序隔离,并允许单独卸载每个应用程序。
该实例提供对有关应用程序的信息(如存储该应用程序的文件夹的名称)的访问。
3.HostingEnvironment类创建实例以后,ASP.NET会创建和初始化核心对象,比如HttpContext,HttpRequest,HttpResponse。
4.初始化核心以后,通过HttpApplication类的实例启动应用程序。
如果应用程序具有 Global.asax 文件,则 ASP.NET 会创建 Global.asax 类(从 HttpApplication 类派生)的一个实例,并使用该派生类表示应用程序。
以上4步如下图
5.由HttpApplication管线处理请求MHPM(Module, handler, page and Module event)
如下图
ASP.NET的生命周期的更多相关文章
- ASP.net 页面生命周期
ASP.NET 页面生命周期 Page_Preinit(); 在页初始化开始时发生 Page_Init(); 在所有控件初始化且应用外观设置后引发 Page_InitComplete(); 在页初始化 ...
- asp.net页面生命周期
Asp.Net页面生命周期 本文转载自:http://www.cnblogs.com/xhwy/archive/2012/05/20/2510178.html 一.什么是Asp.Net页面生命周期 当 ...
- 三张图片详解Asp.Net 全生命周期
用三张图片详解Asp.Net 全生命周期 下面我们使用三张图片解析ASP.net的整个生命周期,我总感觉使用图片更加的清楚的说明这种问题,所以使用的这样方式 说明: 1 第一张图片从全局说明从客户端 ...
- 【深入ASP.NET原理系列】--ASP.NET页面生命周期
前言 ASP.NET页面运行时候,页面将经历一个生命周期,在生命周期中将执行一系列的处理步骤.包括初始化.实例化控件.还原和维护状态.运行时间处理程序代码以及进行呈现.熟悉页面生命周期非常重要,这样我 ...
- ASP.NET 页生命周期概述
ASP.NET 页生命周期概述 Visual Studio 2005 ASP.NET 页运行时,此页将经历一个生命周期,在生命周期中将执行一系列处理步骤.这些步骤包括初始化.实例化控件.还原和维 ...
- ASP.NET编程模型之ASP.NET页面生命周期图解
ASP.NET编程模型中ASP.NET页面生命周期是指什么呢?它包括什么呢?ASP.NET编程模型之ASP.NET页面生命周期具体的过程有哪些呢?下面就开始我们的讲解吧: ASP.NET 页运行时,此 ...
- Asp.net MVC生命周期
Asp.net应用程序管道处理用户请求时特别强调"时机",对Asp.net生命周期的了解多少直接影响我们写页面和控件的效率.因此在2007年和2008年我在这个话题上各写了一篇文章 ...
- 微软Asp.net MVC5生命周期流程图
.NET WEB Development blog 发布了Asp.net MVC5生命周期文档, 这个文档类似Asp.net应用程序生命周期,您以前开发ASP.NET WEB应用程序应该 ...
- .net学习笔记----Asp.net的生命周期之一应用程序生命周期
Http请求刚刚到达服务器的时候 当服务器接收到一个 Http请求的时候,IIS (Internet Information Services,互联网信息服务)首先需要决定如何去处理这个请求. 什么是 ...
- [译] ASP.NET 生命周期 – ASP.NET 请求生命周期(二)
ASP.NET 请求生命周期 全局应用类也可以用来跟踪每个独立请求的生命周期,包括请求从 ASP.NET 平台传递到 MVC 框架.ASP.NET 框架会创建一个定义在 Global.asax 文件中 ...
随机推荐
- loj#2565. 「SDOI2018」旧试题(反演 三元环计数)
题意 题目链接 Sol 神仙反演题.在洛谷上疯狂被卡常 Orz shadowice #include<bits/stdc++.h> #define Pair pair<int, in ...
- engineercms支持文档协作和文档流程,基于flow
我们用于管理文件的系统,比如网盘云盘等,并不具备流程功能,所谓流程,本质是修改文档状态,比如,从初始状态,不同权限的人登录,查看这个文件,具有修改这个文档状态的权限,比如将初始状态修改为已审查状态. ...
- springcloud 入门 8 (config配置中心)
Spring Cloud Config: 配置中心为了方便服务配置文件统一管理,实时更新,所以需要分布式配置中心组件,它就是Spring Cloud Config. 在分布式系统中,由于服务数量巨多, ...
- Python多继承
# -*- coding: utf-8 -*- """ Created on Tue Nov 13 16:56:03 2018 @author: zhen "& ...
- [20171206]rman与truncate.txt
[20171206]rman与truncate.txt --//昨天下班在回家的路上,突然想起以前遇到的问题,就是truncate表后,rman做备份时会备份多少truncate表的信息,--//当时 ...
- 洗礼灵魂,修炼python(56)--爬虫篇—知识补充—编码之url编码
其实在最前面的某一篇博文里,是绝对提过编码的,有ASCII,有UTF-8,有GB2312等等,这些我绝对说过的. url编码 首先,Http协议中参数的传输是"key=value" ...
- python pip 使用时错误: Patal error in launcher:Unable to create process using '"'
当前我的电脑配置是64位, 装有python2.7 和python 3.6 两个版本 在使用pip install mysqlclient 的时候,出现了 Patal error in launch ...
- 深入 kernel panic 流程【转】
一.前言 我们在项目开发过程中,很多时候会出现由于某种原因经常会导致手机系统死机重启的情况(重启分Android重启跟kernel重启,而我们这里只讨论kernel重启也就是 kernel panic ...
- linux 平均负载 load average 的含义【转】
文章来源: linux 平均负载 load average 的含义 load average 的含义 平均负载(load average)是指系统的运行队列的平均利用率,也可以认为是可运行进程的平均数 ...
- rls与rlsd
服务器端的程序一般有如下几个过程,首先是bind,然后再是listen,最后是accept.再往后就是客户端与服务器连接后的各种操作了. 相比之下,客户端的程序就比较简单了,只需先获得sock_id, ...