探索ASP.NET的生命周期
2017-05-19汤小波
汤小波
(重庆三峡职业学院)
【摘要】ASP.NET的生命周期在程序执行过程中具有重要意义,本文就应用程序的生命周期和web页面的生命周期进行了深入的分析和探索。
【关键字】生命周期 ASP.NET
ASP.NET的生命周期是一个比较复杂的问题,也是一个比较有深度的问题,它在ASP.NET开发中有着重要的作用,对于一个合格的ASP.NET程序员,它是必须要了解和掌握的,它包括ASP.NET应用程序的生命周期和ASP.NET页面生命周期,我们将从上述两个方面来进行深入探讨。
1.ASP.NET应用程序生命周期
在ASP.NET中,若要对ASP.NET应用程序进行初始化并使它处理请求,必须执行一些处理步骤,可以把ASP.NET应用程序生命周期分为5个阶段:
第一阶段:用户从WEB服务器请求应用程序资源。
应用程序的生命周期以浏览器向Web服务器发送请求为起点,当web服务器接收到请求时,会对所请求文件的扩展名时行检查,确定应由哪个ISAPI扩展处理该请求,然后将该请求传递给合适的ISAPI扩展。ASP.NET处理已映射到其上的文件扩展名。
第二阶段:ASP.NET接收对应用程序的第一个请求。
当ASP.NET接收到对应用程序中任何资源和第一个请求时,名为Application Manager的类会创建一个应用程序域,它为全局变量提供应用程序隔离,并允许单独卸载每个应用程序。
第三階段:为每个请求创建ASP.NET核心对象。
创建了应用程序域并对Hosting Environment对象进行实例化之后,ASP.NET将创建并初始化核心对象,如HttpContext、HttpRequest和HttpResponse。HttpRequest对象包含有关当前请求的信息,包括Cookie和浏览器信息,HttpResponse对象包含发送到客户端的响应。
第四阶段:将HttpApplication对象分配给请求。
初始化所有核心应用程序对象之后,将通过创建HttpApplication类的实例启动应用程序。如果应用程序具有Global.asax文件,则ASP.NET会创建Global.asax类的一个实例,并使用该派生类表示应用程序。
第五阶段:由HttpApplication管线处理请求。
在处理该请求进将由HttpApplication类执行相应事件。
2、ASP.NET页面生命周期
ASP.NET页面运行时,此页也将经历一个生命周期,在生命周期中将执行一系列处理步骤,这些步骤包括初始化、实例化控件、还原和维护状态、运行事件处理程序代码以及进行呈现等。
一般说来,一个ASP.NET页面要经历如下各个阶段。
其一、浏览器发出请求
浏览器提出请求发生在页面生命周期之前。浏览器请求页面时,ASP.NET将确定是否需要分析和编译页,从而开始ASP.NET的生命周期。
其二、页面框架初始化
ASP.NET在这个阶段开始创建页面,它产生在页面中用标签定义的所有控件。Page.Init事件在这个阶段将被触发。
其三、用户代码初始化
Page.Load事件在这个处理阶段被触发,不管是第一次请求还是作为回发的一部分被请求,Page.Load事件总会触发。通过属性IsPostBack来决定是否是第一次加载。
其四、验证阶段
在验证期间,将调用所有验证程序控件的Validate方法,从而进行数据验证。
其五、事件处理阶段
在这阶段,页面被完全装载且通过验证。ASP.NET将触发在上次回发后发生的所有事件,包括立即反映事件和变化事件。
其六、清除阶段
在页面生命周期的最后阶段,页面呈现为HTML。页面呈现后,真正的清除开始并触发Page.UnLoad事件。
通过如下所示图例可以有效的理解页面生命周期。
3、演示ASP.NET页面生命周期
为了能加深对页面生命周期的理解,下面通过一个模拟示例来演示ASP.NET页面生命周期。
在项目中新建一页面PageLoad.aspx,其代码如下:
<%@ Page Language="C#" %>
void Page_Init(Object sender, EventArgs e)
{Response.Write("正在¨初始化(Init事件)
");}
void Page_Load(Object sender, System.EventArgs e)
{
if (!IsPostBack)
{ Response.Write("这是第?一次Load事件
"); }
else
{ Response.Write("这是PostBack后的Load事件
"); }
}
void Button1_Click(Object sender, System.EventArgs e)
{Response.Write("欢迎你(Click事件)
"); }
(上接131页)
当页面第一次加载时,结果如图2所示,当点击确定按钮时,结果如图3所示。
正确理解ASP.NET生命周期和页面生命周期对于理解ASP.NET程序和执行具有很重要的意义,它能解释很多让人无法解释的问题:
其一、内置对象如Respons、Request等对象在什么时候创建,怎样创建,怎样应用就有很好的指导意义;
其二、能正确理解Global.asax文件的类的对象创建和事件的执行过程;
其三、ASP.NET页面从页面对象生成到消亡的过程;
其四、能更好地理解页面的环回机制,页面的多次回发的执行过程;
其五、能深入理解Page对象的IsPostBack属性在页面加载过程中的重要作用;
其六、能解释Web页面为什么是无状态的,页面信息为什么在多次回发过程中信息无法保留。
总之,ASP.NET应用程序及页面的生命周期它是web应用程序运行过程中的基石,理解它的产生过程就是理解了web程序的执行过程,对于分析和调试程序具有现实意义。