Application对象用于共享应用程序级信息,即多个用户共享一个Application对象。
在第1个用户请求ASP.NET文件时,将启动应用程序并创建Application对象。一旦Application对象被创建,就可以共享和管理整个应用程序的信息。在应用程序关闭之前,Application对象将一直存在。所以,Application对象是用于启动和管理ASP.NET应用程序的主要对象。
1、Application对象的常用集合、属性和方法
Application对象的常用集合及说明
集合 | 说明 |
Contents | 用于访问应用程序状态集合中的对象名 |
StaticObjects | 确定某对象指定属性的值或遍历集合,并检索所有静态对象的属性 |
Application对象的常用属性及说明
属性 | 说明 |
AllKeys | 返回全部Application对象变量名到一个字符串数组中 |
Count | 获取Application对象变量的数量 |
Item | 允许使用索引或Application变量名称传回内容值 |
Application对象的常用方法及说明
方法 | 说明 |
Add | 新增一个Application对象变量 |
Clear | 清除全部Application对象变量 |
Lock | 锁定全部Application对象变量 |
Remove | 使用变量名称移除一个Application对象变量 |
RemoveAll | 移除全部Application对象变量 |
Set | 使用变量名称更新一个Application对象变量的内容 |
UnLock | 解除锁定的Application对象变量 |
2、使用Application对象存储和读取全局变量
Application对象用来存储和维护某些值,需要通过定义变量来完成。Application对象定义的变量为应用程序级变量,即全局变量。变量可以在Global.asax文件或aspx页面中进行声明。语法如下:
Application[varName] = 值;
其中,varName是变量名。
例如:
Application.Lock();
Application["Name"] = "小亮";
Application.UnLock();
Response.Write( Application["Name"].ToString() );
[注]:由于应用程序中的所有页面都可以访问应用程序变量,所以为了确保数据的一致性,必须对Application对象加锁。
3、Application对象的程序应用
(1)设计一个访问计数器
访问计数器主要是用来记录应用程序曾经被访问次数的组件。用户可以通过Application对象和Session对象实现这一功能。
本示例主要是在Global.asax文件中对访问人数进行统计,并在Default.aspx文件中将将统计结果显示出来。
程序实现的主要步骤如下:
①新建一个网站,添加一个全局应用程序类(即Global.asax文件),在该文件的Application_Start事件中将把访问数初始化为0。代码如下:
void Application_Start(objectsender, EventArgs e) {
// アプリケーションのスタートアップで実行するコードです
Application["count"] = 0;
}
②当有新用户访问网站时,将建立一个新的Session对象,并在Session对象的Session_Start事件中对Application对象加锁,以防止因为多个用户同时访问页面造成并行,同时将访问人数加1;当用户推出该网站时,将关闭该用户的Session对象,同理对Application对象加锁,然后将访问人数减1.代码如下:
void Session_Start(objectsender, EventArgs e) {
// 新規セッションを開始したときに実行するコードです
Application.Lock();
Application["count"] = (int)Application["count"] + 1;
Application.UnLock();
}
void Session_End(objectsender, EventArgs e) {
// セッションが終了したときに実行するコードです
// 注意: 只有在 Web.config 文件中的 sessionstate 模式设置为
// InProc 时,才会引发 Session_End 事件。如果会话模式设置为 StateServer
// 設定されている場合、イベントは発生しません。
Application.Lock();
Application["count"] = (int)Application["count"] - 1;
Application.UnLock();
}
③对Global.asax文件进行设置后,需要将访问人数在网站默认主页Default.aspx中显示出来。在Default.aspx页面上添加了1个Label控件,用于显示访问人数。代码如下:
protected voidPage_Load(object sender, EventArgs e){
Label1.Text= "您是该网站的第" + Application["count"].ToString() + "个访问者";
}
(2)制作聊天室
Application对象的一个典型应用就是聊天室的制作。
本示例主要利用Application对象实现聊天室功能。首先应该登录聊天室,在“用户名”文本框中输入登录用户的名称,再单击“登录”按钮进入聊天室。
程序的主要实现步骤如下:
①新建一个网站,在网站中添加Login.sapx、Content.aspx和List.aspx三个Web页面,将Login.sapx设为主页,其中,Default.aspx页面为聊天室的主页面,Content.aspx页面用来显示用户的聊天信息,List.aspx页面用来显示在线用户的列表。
②在网站中添加一个Global.asax全局程序级文件,用来初始化Application对象。
a.该聊天室是使用Application对象实现的,在应用程序启动时,应在Application对象的Application_Start事件中将所有数据初始化。代码如下:
void Application_Start(object sender, EventArgs e) {
// 在应用程序启动时运行的代码
//建立用户列表
string user= ""; //用户列表
Application["user"] = user;
Application["userNum"]= 0;
string chats= ""; //聊天记录
Application["chats"] = chats;
//当前的聊天记录数
Application["current"] = 0;
}
b.在聊天室主页面中单击“发送”按钮时,首先调用Application对象的Lock方法对所有的Application对象进行锁定,然后判断当前聊天新的的记录数是否大于20。如果大于,则清空聊天记录,并重新加载用户的聊天记录;否则,将把聊天内容、用户名和发信息时间保存在Application对象中。代码如下:
protected voidbtnSend_Click(object sender, EventArgs e){
int P_int_current = Convert.ToInt32(Application["current"]);
Application.Lock();
if (P_int_current == 0 || P_int_current > 20){
P_int_current = 0;
Application["chats"] =Session["userName"].ToString() + "说:" + txtMessage.Text.Trim() + "(" + DateTime.Now.ToString()+ ")";
}
else
{
Application["chats"] =Application["chats"].ToString() + "," + Session["userName"].ToString()+ "说:" + txtMessage.Text.Trim() + "(" + DateTime.Now.ToString()+ ")";
}
P_int_current += 1;
Application["current"] = P_int_current;
Application.UnLock();
}
protected voidbtnExit_Click(object sender, EventArgs e){
Application.Lock();
string P_str_userName = Application["user"].ToString();
Application["user"] =P_str_userName.Replace(Session["userName"].ToString(),"");
Application.UnLock();
Response.Write("<script>window.opener=null;window.close();</script>");
}
③显示聊天信息页面Content.aspx加载时,从Application对象中读取保存的聊天信息,并将其显示在TextBox文本框中。Content.aspx页面的Page_Load事件代码如下:
protected voidPage_Load(object sender, EventArgs e){
int P_int_current = Convert.ToInt32(Application["current"]);
Application.Lock();
string P_str_chats = Application["chats"].ToString();
string[] P_str_chat = P_str_chats.Split(',');
for (int i =P_str_chat.Length - 1; i >= 0; i--){
if (P_int_current == 0){
txtContent.Text = P_str_chat[i].ToString();
}
else{
txtContent.Text = txtContent.Text + "\n"+ P_str_chat[i].ToString();
}
}
Application.UnLock();
}