第十二讲 ASP.NET内置对象(三)
教学目的:
一、掌握 Application对象的属性和方法二、掌握 Session对象的属性和方法三、掌握 Global.asax文件的用法教学重点:
一,Application对象的应用二,Session对象的应用三,Global.asax文件的应用一,概述
ASP.NET支持应用程序事件和会话事件,当应用程序启动时,将触发
Application_Start事件。这时,可以初始化整个应用程序中需要使用的各种资源,例如,数据库连接字符串(而不是数据库连接对象本身)。当应用程序停止时,将触发 Application_End事件。这时,可以关闭资源,同时执行任何其他必要的日常管理。垃圾回收机制将自动释放内存。然而,如果分配了托管的资源,
会话事件也是如此。 当用户第一次请求应用程序的页面时,会话开始。当应用程序关闭会话或会话超时,会话结束。 当会话开始时,触发 Session_Start事件,这时,可以初始化会话生命周期中使用的资源,例如,打开数据库连接。尽管更好的时机是:需要的时候再去打开数据库连接,并且使用完毕立刻关闭。
Application对象与 Session对象的关系类似于高级语言中全局变量与局部变量的关系。
Application对象是服务器硬盘上的一组应用程序,也就是虚拟目录及其子目录下的一组主页及
ASP文件。 Application对象的所有数据可以在整个应用程序内部共享,并且对所有用户都是可见的; 在一个 Application中创建的变量或对象可以为整个 Application所用; Application对象包括任何类型,甚至可以是队列。
Session对象存储特定用户的信息。不同用户的
Session不同,用户之间不能共享 Session,这与
Application不同。
当用户浏览 Web站点时,使用 Session可以为每一个用户保存指定信息 。 任何存储在用户 Session中的信息可以在用户调用下一个页面时取得 。 这就像是 C语言里的局部变量和函数之间的关系一样,一个 Session的值对于一个用户是相同的,对于不同的用户是不同的 。
使用 Session可以在 ASP文件之间传递数值,字符串,
数组和对象 。 当用户在应用程序的页间跳转时,存储在 Session对象中的变量不会清除 。
Session对象在很多方面与 Application对象有着相似性及可比性 。 虽然很相似,但是在本质上有着很大的差别 。 比如 对于同一个页面,不同的访问者可以创建不同的 Session,但是 Application的值是相同的,
只被创建一次 。
Application对象主要被用于:
① 统计网站访问的人数;
② 统计广告点击的次数;
③ 创建聊天室;
④ 读取数据库中的数据等 。
而 Session对象则常被用在:
① 存储用户的首选项;
② 保存用户的身份标记,实现用户的身份认证和用户权限管理等 。
二,Application对象
Application对象是运行在 Web应用服务器上的虚拟目录及其子目录下所有文件、页面、模块和可执行代码的总和。 一旦网站服务器被打开,就创建了 Application对象;所有的用户共用一个
Application对象并可以对其进行修改;
Application对象的这一特性使得网站设计者可以方便地创建诸如聊天室和网站计数器等常用
Web应用程序。
1,Application对象的属性和方法
9
属性 说明
Allkeys 获取 HttpApplicationState集合中的访问键
Contents 获取对 HttpApplicationState对象的引用
Count 获取 HttpApplicationState集合中的对象数
Item
获取对 HttpApplicationState集合中对象的访问 。 重载该属性以允许通过名称或者数字索引访问对象 。 在 C#中,该属性为
HttpApplicationState类的索引器
StaticObj
ects
获取由 <object>标记声明的所有对象,其范围设置为 ASP.NET 应 用 程 序 中 的
,Application”
方法 说明
Add 将新的对象添加到 HttpApplicationState集合中
Clear 从 HttpApplicationState集合中移除所有对象
Get 通过名称或者索引获取 HttpApplicationState对象
GetKey 通过索引获取 HttpApplicationState对象名
Lock 锁定对 HttpApplicationState变量的访问以促进访问同步
Remove 从 HttpApplicationState集合中移除命名对象
RemoveAll 从 HttpApplicationState集合中移除所有对象
Set 更新 HttpApplicationState集合中的对象值
UnLock 取消对 HttpApplicationState变量的访问的锁定以促进访问同步
★ Application对象是一个集合对象,并在整个 ASP.NET网站内可用,不同的用户在不同的时间都有可能访问 Application对象的变量,因此 Application对象提供了 Lock方法用于锁定对 HttpApplicationState变量的访问以避免访问同步造成的问题 。在对
Application对象的变量访问完成后,需要调用 Application的 UnLock方法取消对
HttpApplicationState变量的锁定。
2,利用 Application对象存取变量
Application对象用来存储变量或对象,以便在网页再次被访问时(不管是不是同一个连接者或访问者),所存储的变量或对象的内容还可以被重新调出来使用,也就是说
Application对于同一网站来说是公用的,可以在各个用户间共享。
利用 Application对象存取变量时需要注意以下几点:
Application对象变量应该是经常使用的数据,如果只是偶尔使用,可以把信息存储在磁盘的文件中或者数据库中。
Application对象是一个集合对象,它除了包含文本信息外,
也可以存储对象。
如果站点开始就有很大的通信量,则建议使用 Web.config文件进行处理,不要用 Application对象变量。
3,利用 Application对象实现网页访问计数
网页计数器是每个网站必备的功能,通过 Application对象可以实现一个简单的网页计数器。
利用 Application对象实现网页访问计数三,会话状态 (Session对象 )
会话状态 (Session State)是为单个用户保留的状态。在网站中,每一个新访问的用户都将产生自己的会话 (Session)对象。这个 Session对象在服务器端进行管理,只能为当前访问的用户服务。如果另一位用户也进入网站,他也将拥有自己的 Session对象,两个用户的 Session对象之间即使同名,
也不能共享同一个 Session对象。
1,Session对象的属性和方法属性 说明
CodePage 获取或者设置当前会话的代码页标识符
Contents 获取对当前会话状态对象的引用
Count 获取会话状态集合中的项数
IsCookieless 获取一个值,该值可指示会话 ID是嵌入在URL中还是存储在 HTTP Cookie中
IsNewSession 获取一个值,该值可指示会话是否是与当前请求一起创建的
IsReadOnly 获取一个值,该值指示会话是否为只读
Keys 获取存储在会话中的所有值的集合
Mode 获取当前会话状态模式
SessionID 获取用于标识会话的惟一 ID
StaticObject
s
获取由 ASP.NET应用程序文件 global.asax
中的 <object runat="server"
scope="session" />
Timeout 获取并设置终止会话之前各请求之间所允许的超时期限 ( 以分钟为单位 ) 默认 20分钟方法 说明
Abandon 取消当前会话
Add 将新的项添加到会话状态中
Clear 清除会话状态中的所有值
CopyTo
将会话状态值的集合复制到一维数组中 ( 从数组的指定索引处开始 )
Remove 删除会话状态集合中的项
RemoveAll 删除所有会话状态值
2,Session对象的惟一性
对于每个用户的每次访问 Session对象是唯一的,
这包括两个含义:
对于某个用户的某次访问,Session对象在访问期间唯一,可以通过 Session对象在页面间共享信息。
只要 Session没有超时,或者 Abandon方法没有被调用,Session中的信息就不会丢失。 Session对象不能在用户间共享信息,而 Application对象可以在不同的用户间共享信息。
对于用户的每次访问其 Session都不同,两次访问之间也不能共享数据,而 Application对象只要没有被重新启动,可以在多次访问间共享数据。
3,Session对象中方法的调用
Session对象的方法可以用来保存会话状态和管理会话状态两个方面。
3.1 保存会话状态
保存 Session对象时可以使用以下语句:
Session["Message"] = "MyMsg";
取出 Session对象时可以使用以下语句:
string MyVar= Session["Message"].ToString();
为了与 ASP 的早期版本兼容,也可以使用
Contents 属性访问这些值,语句如下:
Session.Contents["Message"] = "MyMsg";
string MyVar=
Session.Contents["Message"].ToString();
3.2 启动会话状态
应用程序状态在网站中总是可用的,而会话状态在使用前必须先启动。不过,因为配置文件 (Machine.config)的默认设置是启动会话状态,因此不需要额外的步骤就能启动它。虽然如此,还是应该知道,是 Machine.config和应用程序的 Web.config配置文件的设置决定了会话状态是被启动还是被禁止。
如果想延迟到需要时再启动会话状态,则可以在页面中编写以下指令:
<%@ Page EnableSessionState="False" %>
上述设定并不会毁坏其他页面建立的会话,而只会禁止从该页面访问 Session对象 的值。
另外一种方法就是通过改变窗体页的属性来选择,在下拉列表框中选择 DOCU-MENT,然后选择 enableSessionState
属性,如图 8.2所示。
可以在 enableSessionState属性的下拉列表中的 True、
False,ReadOnly的选项中选择一种。
3.3 管理对话
Session对象提供了 Timeout属性,用来设置
Session的有效时限,以分钟为单位。默认情况下有效时限为 20分钟。 即如果在有效时间内没有链接 Web服务器,对 Session的设置将自动失效。
可以在网页中延长或缩短 Session的有效时间,
例如语句:
Session.Timeout=60 ;
就可以将 Session的有效时间延长至 60分钟。
如果需要终止 Session的使用时,可以调用
Abandon()方法。语句如下:
Session.Abandon();
例 1
protected void Button1_Click(object sender,
EventArgs e) {
Session["MyName"] = TextBox1.Text;
}
public partial class _2ndPage,Page {
protected void Page_Load(object sender,
EventArgs e) {
Response.Write((string)Session["MyName"]);
}
}
void Application_Start(object sender,
EventArgs e)
{
Application["Message"] = "欢迎使用应用程序状态。 ";
Application["Count"] = 0;
}
protected void Page_Load(object sender,
EventArgs e)
{
Application.Lock(); // 锁定应用程序状态
Application["Count"] =
((int)Application["Count"]) + 1;
Application.UnLock();// 取消锁定
// 读取应用程序状态集合中的变量
Label1.Text =
Application["Message"].ToString();
Label2.Text =
Application["PageRequestCount"].ToString();
}
四,使用 global.asax进行配置
,全局应用程序类”:也就是 Global.asax。
该文件使应用程序用来保持应用程序级的事件、对象和变量的。一个 ASP.NET应用程序只能有一个 Global.asax文件,位于应用程序的根目录下。
1.Application_Start事件
Application_Start事件当应用程序启动时激发,
此事件在程序的生命周期中仅被激发一次。通常可以将供所有客户端共享的内部对象的初始化代码放在这里,以便当应用程序启动时就完成初始化。 如果将初始化代码放在首页的 Page_Load事件中,那每当首页被加载时都会重新初始化那些对象,对象此前的值将丢失。应用程序启动时也会激发一次
Session_Start事件,不过 Application_Start事件激发在前,而 Session_Start事件激发在后。在程序的生命周期中 Application_Start事件仅被激发一次,Session_Start事件可被多次激发。
2.Application_End 事件
Application_End事件当应用程序关闭时激发,此事件在程序的生命周期中仅被激发一次。 当应用程序结束时,会自动释放应用程序的内存,若应用程序还占用了系统别的资源,
要编写释放资源的代码。
3.Session_Start事件
Session_Start事件当一个新的客户端请求应用程序的某个页面时激发。 在应用程序的生命周期中,常常不断有新的客户端对应用程序提出请求,因而 Session_Start事件会被反复激发。对特定客户端在各个页面中共享的内部对象的初始化代码放适合在这里。
4.Session_End事件
Session_End事件当 Session超时或 Session关闭时激发。
从特定的客户端访问本应用程序开始,Session_Start事件被激发,当用户转向到其他应用程序的 URL时,应用程序并不结束 Session,当用户从其他应用程序返回到本应用程序中时,保存在 Session中的数据仍然有效,直到用户关闭浏览器为止。 可以通过 Session超时来限制用户离开本应用程序的时间间隔。例如设置 Session超时间隔为
20分钟,当用户离开本应用程序 20分钟后,Session_End
事件就被激发。
5.Application_BeginRequest事件
Application_BeginRequest事件当客户端向应用程序发出请求后激发。 在应用程序的生命周期中,常常不断有客户端对应用程序提出各种请求,因而
Application_BeginRequest事件会被反复激发。
6.Application_EndRequest事件
Application_EndRequest事件当结束客户端发出请求处理后激发。在应用程序的生命周期中,
Application_EndRequest事件也会被反复激发。
7.Application_Error事件
Application_Error事件当应用程序发生异常时激发。可以将异常处理程序代码用 try?catch 格式写在估计将要引发异常的程序段中,也可以将异常处理程序代码写在 Application_Error事件中。
8.Application_AuthenticateRequest事件
Application_AuthenticateRequest事件当发生身份验证请求时激发。在这个事件中可以自定义身份验证信息。
五,Web窗体页的生命周期
Web窗体页的生命周期代表窗体页从生成到消亡经历的阶段,以及各阶段中执行的方法,使用的信息,保持的数据,
呈现的状态等。程序设计者掌握这些知识,会对理解和分析某些问题有所帮助。
下面按照执行的顺序简要地讲述窗体页生命周期各阶段执行的内容。
(1) 初始化:主要执行 Page的 Init事件和 OnInit方法。
(2) 加载视图状态:主要执行 LoadViewState方法,就是从 ViewState中获取上一次的状态,并依照页面的控件树的结构,用递归来遍历整个树,将对应的状态恢复到每一个控件上。
(3) 处理回发数据:主要执行 LoadPostData()方法,用来检查客户端发回的控件数据的状态是否发生了改变。
(4) 加载:本阶段主要是触发 Load事件,执行 Page_Load
方法。
(5) 预呈现:预呈现这个阶段就是执行在最终呈现之前所做的状态的更改,因为在呈现一个控件之前,必须根据它的属性来产生 HTML,比如 Style属性,这是最典型的例子。
在预呈现之前,可以更改一个控件的 Style,当执行预呈现的时候,就可以把 Style保存下来,作为呈现阶段显示
HTML的样式信息。
(6) 保存状态:这个阶段就是把状态写入 ViewState。
(7) 呈现:将对应的 HTML代码写入最终响应的流中。
(8) 处置:实际上就是执行 Dispose方法,在这个阶段会释放占用的资源,例如数据库连接等。
(9) 卸载:最后,页面会执行 OnUnLoad
方法,触发 UnLoad事件,处理在页面对象被销毁之前的最后处理,实际上 ASP.NET提供这个事件只是设计上的考虑,通常资源的释放都会在 Dispose方法中完成,所以这个方法也变成不怎么重要了。
教学目的:
一、掌握 Application对象的属性和方法二、掌握 Session对象的属性和方法三、掌握 Global.asax文件的用法教学重点:
一,Application对象的应用二,Session对象的应用三,Global.asax文件的应用一,概述
ASP.NET支持应用程序事件和会话事件,当应用程序启动时,将触发
Application_Start事件。这时,可以初始化整个应用程序中需要使用的各种资源,例如,数据库连接字符串(而不是数据库连接对象本身)。当应用程序停止时,将触发 Application_End事件。这时,可以关闭资源,同时执行任何其他必要的日常管理。垃圾回收机制将自动释放内存。然而,如果分配了托管的资源,
会话事件也是如此。 当用户第一次请求应用程序的页面时,会话开始。当应用程序关闭会话或会话超时,会话结束。 当会话开始时,触发 Session_Start事件,这时,可以初始化会话生命周期中使用的资源,例如,打开数据库连接。尽管更好的时机是:需要的时候再去打开数据库连接,并且使用完毕立刻关闭。
Application对象与 Session对象的关系类似于高级语言中全局变量与局部变量的关系。
Application对象是服务器硬盘上的一组应用程序,也就是虚拟目录及其子目录下的一组主页及
ASP文件。 Application对象的所有数据可以在整个应用程序内部共享,并且对所有用户都是可见的; 在一个 Application中创建的变量或对象可以为整个 Application所用; Application对象包括任何类型,甚至可以是队列。
Session对象存储特定用户的信息。不同用户的
Session不同,用户之间不能共享 Session,这与
Application不同。
当用户浏览 Web站点时,使用 Session可以为每一个用户保存指定信息 。 任何存储在用户 Session中的信息可以在用户调用下一个页面时取得 。 这就像是 C语言里的局部变量和函数之间的关系一样,一个 Session的值对于一个用户是相同的,对于不同的用户是不同的 。
使用 Session可以在 ASP文件之间传递数值,字符串,
数组和对象 。 当用户在应用程序的页间跳转时,存储在 Session对象中的变量不会清除 。
Session对象在很多方面与 Application对象有着相似性及可比性 。 虽然很相似,但是在本质上有着很大的差别 。 比如 对于同一个页面,不同的访问者可以创建不同的 Session,但是 Application的值是相同的,
只被创建一次 。
Application对象主要被用于:
① 统计网站访问的人数;
② 统计广告点击的次数;
③ 创建聊天室;
④ 读取数据库中的数据等 。
而 Session对象则常被用在:
① 存储用户的首选项;
② 保存用户的身份标记,实现用户的身份认证和用户权限管理等 。
二,Application对象
Application对象是运行在 Web应用服务器上的虚拟目录及其子目录下所有文件、页面、模块和可执行代码的总和。 一旦网站服务器被打开,就创建了 Application对象;所有的用户共用一个
Application对象并可以对其进行修改;
Application对象的这一特性使得网站设计者可以方便地创建诸如聊天室和网站计数器等常用
Web应用程序。
1,Application对象的属性和方法
9
属性 说明
Allkeys 获取 HttpApplicationState集合中的访问键
Contents 获取对 HttpApplicationState对象的引用
Count 获取 HttpApplicationState集合中的对象数
Item
获取对 HttpApplicationState集合中对象的访问 。 重载该属性以允许通过名称或者数字索引访问对象 。 在 C#中,该属性为
HttpApplicationState类的索引器
StaticObj
ects
获取由 <object>标记声明的所有对象,其范围设置为 ASP.NET 应 用 程 序 中 的
,Application”
方法 说明
Add 将新的对象添加到 HttpApplicationState集合中
Clear 从 HttpApplicationState集合中移除所有对象
Get 通过名称或者索引获取 HttpApplicationState对象
GetKey 通过索引获取 HttpApplicationState对象名
Lock 锁定对 HttpApplicationState变量的访问以促进访问同步
Remove 从 HttpApplicationState集合中移除命名对象
RemoveAll 从 HttpApplicationState集合中移除所有对象
Set 更新 HttpApplicationState集合中的对象值
UnLock 取消对 HttpApplicationState变量的访问的锁定以促进访问同步
★ Application对象是一个集合对象,并在整个 ASP.NET网站内可用,不同的用户在不同的时间都有可能访问 Application对象的变量,因此 Application对象提供了 Lock方法用于锁定对 HttpApplicationState变量的访问以避免访问同步造成的问题 。在对
Application对象的变量访问完成后,需要调用 Application的 UnLock方法取消对
HttpApplicationState变量的锁定。
2,利用 Application对象存取变量
Application对象用来存储变量或对象,以便在网页再次被访问时(不管是不是同一个连接者或访问者),所存储的变量或对象的内容还可以被重新调出来使用,也就是说
Application对于同一网站来说是公用的,可以在各个用户间共享。
利用 Application对象存取变量时需要注意以下几点:
Application对象变量应该是经常使用的数据,如果只是偶尔使用,可以把信息存储在磁盘的文件中或者数据库中。
Application对象是一个集合对象,它除了包含文本信息外,
也可以存储对象。
如果站点开始就有很大的通信量,则建议使用 Web.config文件进行处理,不要用 Application对象变量。
3,利用 Application对象实现网页访问计数
网页计数器是每个网站必备的功能,通过 Application对象可以实现一个简单的网页计数器。
利用 Application对象实现网页访问计数三,会话状态 (Session对象 )
会话状态 (Session State)是为单个用户保留的状态。在网站中,每一个新访问的用户都将产生自己的会话 (Session)对象。这个 Session对象在服务器端进行管理,只能为当前访问的用户服务。如果另一位用户也进入网站,他也将拥有自己的 Session对象,两个用户的 Session对象之间即使同名,
也不能共享同一个 Session对象。
1,Session对象的属性和方法属性 说明
CodePage 获取或者设置当前会话的代码页标识符
Contents 获取对当前会话状态对象的引用
Count 获取会话状态集合中的项数
IsCookieless 获取一个值,该值可指示会话 ID是嵌入在URL中还是存储在 HTTP Cookie中
IsNewSession 获取一个值,该值可指示会话是否是与当前请求一起创建的
IsReadOnly 获取一个值,该值指示会话是否为只读
Keys 获取存储在会话中的所有值的集合
Mode 获取当前会话状态模式
SessionID 获取用于标识会话的惟一 ID
StaticObject
s
获取由 ASP.NET应用程序文件 global.asax
中的 <object runat="server"
scope="session" />
Timeout 获取并设置终止会话之前各请求之间所允许的超时期限 ( 以分钟为单位 ) 默认 20分钟方法 说明
Abandon 取消当前会话
Add 将新的项添加到会话状态中
Clear 清除会话状态中的所有值
CopyTo
将会话状态值的集合复制到一维数组中 ( 从数组的指定索引处开始 )
Remove 删除会话状态集合中的项
RemoveAll 删除所有会话状态值
2,Session对象的惟一性
对于每个用户的每次访问 Session对象是唯一的,
这包括两个含义:
对于某个用户的某次访问,Session对象在访问期间唯一,可以通过 Session对象在页面间共享信息。
只要 Session没有超时,或者 Abandon方法没有被调用,Session中的信息就不会丢失。 Session对象不能在用户间共享信息,而 Application对象可以在不同的用户间共享信息。
对于用户的每次访问其 Session都不同,两次访问之间也不能共享数据,而 Application对象只要没有被重新启动,可以在多次访问间共享数据。
3,Session对象中方法的调用
Session对象的方法可以用来保存会话状态和管理会话状态两个方面。
3.1 保存会话状态
保存 Session对象时可以使用以下语句:
Session["Message"] = "MyMsg";
取出 Session对象时可以使用以下语句:
string MyVar= Session["Message"].ToString();
为了与 ASP 的早期版本兼容,也可以使用
Contents 属性访问这些值,语句如下:
Session.Contents["Message"] = "MyMsg";
string MyVar=
Session.Contents["Message"].ToString();
3.2 启动会话状态
应用程序状态在网站中总是可用的,而会话状态在使用前必须先启动。不过,因为配置文件 (Machine.config)的默认设置是启动会话状态,因此不需要额外的步骤就能启动它。虽然如此,还是应该知道,是 Machine.config和应用程序的 Web.config配置文件的设置决定了会话状态是被启动还是被禁止。
如果想延迟到需要时再启动会话状态,则可以在页面中编写以下指令:
<%@ Page EnableSessionState="False" %>
上述设定并不会毁坏其他页面建立的会话,而只会禁止从该页面访问 Session对象 的值。
另外一种方法就是通过改变窗体页的属性来选择,在下拉列表框中选择 DOCU-MENT,然后选择 enableSessionState
属性,如图 8.2所示。
可以在 enableSessionState属性的下拉列表中的 True、
False,ReadOnly的选项中选择一种。
3.3 管理对话
Session对象提供了 Timeout属性,用来设置
Session的有效时限,以分钟为单位。默认情况下有效时限为 20分钟。 即如果在有效时间内没有链接 Web服务器,对 Session的设置将自动失效。
可以在网页中延长或缩短 Session的有效时间,
例如语句:
Session.Timeout=60 ;
就可以将 Session的有效时间延长至 60分钟。
如果需要终止 Session的使用时,可以调用
Abandon()方法。语句如下:
Session.Abandon();
例 1
protected void Button1_Click(object sender,
EventArgs e) {
Session["MyName"] = TextBox1.Text;
}
public partial class _2ndPage,Page {
protected void Page_Load(object sender,
EventArgs e) {
Response.Write((string)Session["MyName"]);
}
}
void Application_Start(object sender,
EventArgs e)
{
Application["Message"] = "欢迎使用应用程序状态。 ";
Application["Count"] = 0;
}
protected void Page_Load(object sender,
EventArgs e)
{
Application.Lock(); // 锁定应用程序状态
Application["Count"] =
((int)Application["Count"]) + 1;
Application.UnLock();// 取消锁定
// 读取应用程序状态集合中的变量
Label1.Text =
Application["Message"].ToString();
Label2.Text =
Application["PageRequestCount"].ToString();
}
四,使用 global.asax进行配置
,全局应用程序类”:也就是 Global.asax。
该文件使应用程序用来保持应用程序级的事件、对象和变量的。一个 ASP.NET应用程序只能有一个 Global.asax文件,位于应用程序的根目录下。
1.Application_Start事件
Application_Start事件当应用程序启动时激发,
此事件在程序的生命周期中仅被激发一次。通常可以将供所有客户端共享的内部对象的初始化代码放在这里,以便当应用程序启动时就完成初始化。 如果将初始化代码放在首页的 Page_Load事件中,那每当首页被加载时都会重新初始化那些对象,对象此前的值将丢失。应用程序启动时也会激发一次
Session_Start事件,不过 Application_Start事件激发在前,而 Session_Start事件激发在后。在程序的生命周期中 Application_Start事件仅被激发一次,Session_Start事件可被多次激发。
2.Application_End 事件
Application_End事件当应用程序关闭时激发,此事件在程序的生命周期中仅被激发一次。 当应用程序结束时,会自动释放应用程序的内存,若应用程序还占用了系统别的资源,
要编写释放资源的代码。
3.Session_Start事件
Session_Start事件当一个新的客户端请求应用程序的某个页面时激发。 在应用程序的生命周期中,常常不断有新的客户端对应用程序提出请求,因而 Session_Start事件会被反复激发。对特定客户端在各个页面中共享的内部对象的初始化代码放适合在这里。
4.Session_End事件
Session_End事件当 Session超时或 Session关闭时激发。
从特定的客户端访问本应用程序开始,Session_Start事件被激发,当用户转向到其他应用程序的 URL时,应用程序并不结束 Session,当用户从其他应用程序返回到本应用程序中时,保存在 Session中的数据仍然有效,直到用户关闭浏览器为止。 可以通过 Session超时来限制用户离开本应用程序的时间间隔。例如设置 Session超时间隔为
20分钟,当用户离开本应用程序 20分钟后,Session_End
事件就被激发。
5.Application_BeginRequest事件
Application_BeginRequest事件当客户端向应用程序发出请求后激发。 在应用程序的生命周期中,常常不断有客户端对应用程序提出各种请求,因而
Application_BeginRequest事件会被反复激发。
6.Application_EndRequest事件
Application_EndRequest事件当结束客户端发出请求处理后激发。在应用程序的生命周期中,
Application_EndRequest事件也会被反复激发。
7.Application_Error事件
Application_Error事件当应用程序发生异常时激发。可以将异常处理程序代码用 try?catch 格式写在估计将要引发异常的程序段中,也可以将异常处理程序代码写在 Application_Error事件中。
8.Application_AuthenticateRequest事件
Application_AuthenticateRequest事件当发生身份验证请求时激发。在这个事件中可以自定义身份验证信息。
五,Web窗体页的生命周期
Web窗体页的生命周期代表窗体页从生成到消亡经历的阶段,以及各阶段中执行的方法,使用的信息,保持的数据,
呈现的状态等。程序设计者掌握这些知识,会对理解和分析某些问题有所帮助。
下面按照执行的顺序简要地讲述窗体页生命周期各阶段执行的内容。
(1) 初始化:主要执行 Page的 Init事件和 OnInit方法。
(2) 加载视图状态:主要执行 LoadViewState方法,就是从 ViewState中获取上一次的状态,并依照页面的控件树的结构,用递归来遍历整个树,将对应的状态恢复到每一个控件上。
(3) 处理回发数据:主要执行 LoadPostData()方法,用来检查客户端发回的控件数据的状态是否发生了改变。
(4) 加载:本阶段主要是触发 Load事件,执行 Page_Load
方法。
(5) 预呈现:预呈现这个阶段就是执行在最终呈现之前所做的状态的更改,因为在呈现一个控件之前,必须根据它的属性来产生 HTML,比如 Style属性,这是最典型的例子。
在预呈现之前,可以更改一个控件的 Style,当执行预呈现的时候,就可以把 Style保存下来,作为呈现阶段显示
HTML的样式信息。
(6) 保存状态:这个阶段就是把状态写入 ViewState。
(7) 呈现:将对应的 HTML代码写入最终响应的流中。
(8) 处置:实际上就是执行 Dispose方法,在这个阶段会释放占用的资源,例如数据库连接等。
(9) 卸载:最后,页面会执行 OnUnLoad
方法,触发 UnLoad事件,处理在页面对象被销毁之前的最后处理,实际上 ASP.NET提供这个事件只是设计上的考虑,通常资源的释放都会在 Dispose方法中完成,所以这个方法也变成不怎么重要了。