- ASP.NET从入门到精通(第5版)
- 明日科技
- 1278字
- 2021-03-31 00:47:54
2.3 Application对象
视频讲解
2.3.1 Application对象概述
Application对象用于共享应用程序级信息,即多个用户共享一个Application对象。
在第一个用户请求ASP.NET文件时,将启动应用程序并创建Application对象。一旦Application对象被创建,它就可以共享和管理整个应用程序的信息。在应用程序关闭之前,Application对象将一直存在。所以,Application对象是用于启动和管理ASP.NET应用程序的主要对象。
2.3.2 Application对象的常用集合、属性和方法
Application对象的常用集合及说明如表2.6所示。
表2.6 Application对象的常用集合及说明
Application对象的常用属性及说明如表2.7所示。
表2.7 Application对象的常用属性及说明
Application对象的常用方法及说明如表2.8所示。
表2.8 Application对象的常用方法及说明
2.3.3 使用Application对象存储和读取全局变量
使Application对象存储和维护某些值,就要通过定义变量来完成。Application对象定义的变量为应用程序级变量,即全局变量。变量可以在Global.asax文件或aspx页面中进行声明。语法如下:
其中,varName是变量名。例如:
注意
由于应用程序中的所有页面都可以访问应用程序变量,所以为了确保数据的一致性,必须对Application对象加锁。
2.3.4 设计一个访问计数器
访问计数器主要用来记录应用程序曾经被访问次数的组件。用户可以通过Application对象和Session对象实现这一功能。下面就通过一个示例进行介绍。
【例2.6】访问计数器。(示例位置:mr\TM\02\06)
下面的示例主要是在Global.asax文件中对访问人数进行统计,并在Default.aspx文件中将统计结果显示出来。执行程序,示例运行结果如图2.7所示。
图2.7 访问计数器
程序实现的主要步骤如下。
(1)新建一个网站,添加一个全局应用程序类(即Global.asax文件),在该文件的Application_Start事件中将访问数初始化为0,代码如下:
当有新的用户访问网站时,将建立一个新的Session对象,并在Session对象的Session_Start事件中对Application对象加锁,以防止因为多个用户同时访问页面造成并行,同时将访问人数加1;当用户退出该网站时,将关闭该用户的Session对象,同时对Application对象加锁,然后将访问人数减1。代码如下:
(2)对Global.asax文件进行设置后,需要将访问人数在网站的默认主页Default.aspx中显示出来。在Default.aspx页面上添加了一个Label控件,用于显示访问人数。代码如下:
2.3.5 聊天室
Application对象的一个典型的应用就是制作聊天室。下面就通过一个示例进行介绍。
【例2.7】聊天室。(示例位置:mr\TM\02\07)
下面的示例主要利用Application对象实现聊天室功能。执行程序,首先应该登录聊天室,在“用户名”文本框中输入登录用户的名称,再单击“登录”按钮进入聊天室。示例运行结果如图2.8所示。
图2.8 聊天室
程序实现的主要步骤如下。
(1)新建一个网站,其主页默认为Default.aspx,将其重命名为Login.aspx。
(2)在该网站中添加Default.aspx、Content.aspx和List.aspx 3个Web页面,其中,Default.aspx页面为聊天室的主页面,Content.aspx页面用来显示用户的聊天信息,List.aspx页面用来显示在线用户的列表。
(3)在该网站中添加一个Global.asax全局程序集文件,用来初始化Application对象值。
该聊天室是使用Application对象实现的,在应用程序启动时,应在Application对象的Application_Start事件中将所有数据初始化。代码如下:
在聊天室主页面中单击“发送”按钮时,首先调用Application对象的Lock方法对所有Application对象进行锁定,然后判断当前聊天信息的记录数是否大于20。如果大于20,则清空聊天记录,并重新加载用户的聊天记录;否则,将把聊天内容、用户名和发信息时间保存在Application对象中。代码如下:
加载显示聊天信息页面Content.aspx时,从Application对象中读取保存的聊天信息,并将其显示在TextBox文本框中。Content.aspx页面的Page_Load事件代码如下: