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)

如下图

 

转载于:https://www.cnblogs.com/Pinapple/p/6605387.html

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值