ASP.NET的內建物件:Application物件
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();
}