1. 程式人生 > >ASP.NET的內建物件:Application物件

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();

}