周 彤,陳軍霞
射擊項目是我國競技體育優勢項目,全國每年都會舉行各級別的分項或綜合比賽,競賽組織工作之初的報名報項是關系到比賽能否順利進行的關鍵。在以往的比賽組織工作中,賽事承辦單位先將統一格式的Excel電子文件分發到各地,在搜集并整理各地報名數據表之后將數據導入已有的競賽管理軟件中進行后續的工作。但在實際操作過程中由于操作要求不明確、Excel電子表格制定不嚴謹等問題導致在數據導入過程中頻繁出錯,使最終數據不一致。國家射擊射箭項目管理中心組織開發了射擊項目網上報名報項系統,利用現有競賽管理軟件的數據庫,采用網上報名報項的形式,將數據直接寫入數據庫中,降低了運動員數據的出錯機率,減少了中間的周轉環節。
系統采用基于ASP.NET的三層結構的瀏覽器/服務器(B/S)模式,運動員的數據通過網上報名報項系統直接提交到國家射擊射箭管理中心數據庫中集中管理。后臺數據庫采用已有射擊項目競賽管理軟件的Access數據庫,以便和現有管理系統進行兼容。開發的工具使用viusal Studio 2008與Dreamweaver。
整個報名報項過程分為網上注冊和網上報名報項兩個階段:1)各參賽單位上網進行參賽單位注冊工作,創建各地報名報項管理人員的帳號;2)按照競賽規程進行網上報名報項。
如圖1所示,網上報名報項系統分為參賽單位注冊、報名報項、系統管理等3個功能模塊,每個功能模塊又分別包含多個子模塊。

圖1 功能模塊
3.1.1 為何使用Ajax
在傳統的B/S交互模式中(如用戶提交表單),是由用戶觸發一個HTTP請求到服務器,服務器對其進行接受并進行處理后再返回一個新的HTHL頁面到客戶端。每當服務器處理客戶端提交的請求時,用戶需要等待服務器的響應,在等待期間,用戶不能做其它操作,這樣做存在兩個問題:第一是用戶需要等待,這就導致了用戶界面的響應比本地應用慢得多,產生了一定程度的滯后效應;第二個是,瀏覽器需要將整個頁面中的表單數據都提交給服務器,服務器也要生成一個全新的頁面再返回給瀏覽器,瀏覽器與服務器之間通訊的數據量將非常大。
與此不同的是,Ajax應用可以僅向服務器發送并取回必需的數據,它使用SOAP或其它一些基于XML的Web service接口,并在客戶端采用JavaScript處理來自服務器的響應。這樣,在服務器和瀏覽器之間交換的數據就會大量減少,用戶就能看到響應更快的應用,用戶可以感覺到幾乎所有的操作都會很快響應沒有頁面重載(白屏) 的等待。同時,很多的處理工作可以在發出請求的客戶端機器上完成,大大減輕Web服務器的負擔和處理時間。
3.1.2 系統實現
我們以系統中射擊大項與小項名稱聯動為例:
首先,在需要局部刷新的頁面內創建ScriptManager控件和UpdatePanel控件ScriptManager是ASP.NET Ajax中一個重要的控件,它用來處理頁面上的所有ASP.NET Ajax組件以及局部頁面的更新,生成相關的客戶端腳本,所有需要支持ASP.NET Ajax的ASP.NET頁面上有且只能有一個ScriptManager控件。在ScriptManager控件中我們可以指定需要的腳本庫,或者指定通過JS來調用的Web Service,還可以指定頁面錯誤處理。UpdatePanel控件就是設置頁面中異步局部更新區域,它必須依賴于ScriptManager存在。
下一步,在UpdatePanel控件區域內創建需局部更新數據的控件,這里我們添加兩個DropDownList控件,并設置大項DropDownList1控件的ListItems值。之后,編寫大項DropDownList1控件的SelectedIndexChanged事件代碼,代碼如下:
protected void DropDownList1_SelectedIndexChanged (object sender, EventArgs e)
{
DropDownList2.Items.Clear();
if (DropDownList1.SelectedValue == “步槍”)
{
DropDownList2.Items.Add (“10 m氣步槍”);
DropDownList2.Items.Add (“50 m步槍臥射”);
DropDownList2.Items.Add (“50 m步槍3種姿勢”);
}
else
{
DropDownList2.Items.Add (“10 m氣手槍”);
DropDownList2.Items.Add (“25 m手槍速射”);
DropDownList2.Items.Add (“25 m手槍慢加速”);
DropDownList2.Items.Add (“50 m手槍慢射”);
}
}
一旦DropDownList1控件選項值發生改變,則在頁面不用刷新的情況下DropDownList2控件的選項值會發生相應變化。
3.2.1 為何使用Web緩存
評價網上應用系統主要包括:系統的響應時間、平均事務處理時間、數據庫服務器的負載、最大承載的并發用戶數等多個指標。由于網上射擊項目報名報項系統開放主要集中在一段時間,在這段時間里在線人數眾多,需要考慮減輕服務器的負擔。Web緩存是緩解網絡擁塞,減少訪問延遲的有效方法,也是一種無需大量時間和分析就可以獲得“足夠良好的”性能的方法。把用戶重復訪問的數據放入緩存,可以減少用戶對數據庫的訪問次數,從而減輕數據庫服務器的負載,提高系統的響應效率。
3.2.2 Web緩存原理及實現
ASP.NET提供了多種形式的緩存,本系統中使用了頁面級輸出緩存和編程緩存。輸出緩存的優點是非常易于實現,在大多數情況下都使用這種緩存技術。而編程緩存則提供了很大的靈活性,可用于在應用程序的每一層利用緩存。
頁面級輸出緩存是在內存中保留為響應請求而發送的HTML的副本,其后再有請求時將提供緩存的輸出,直到緩存到期,這樣,性能有可能得到很大的提高。并允許以絕對時間(如12:00P.M.)或相對時間(如頁面最后一次被請求后的10分鐘)的方式指定頁面在緩存中保存的時間,這對于頁面中的數據在特定的時間內變化不太頻繁的情況非常有用。ASP.NET在使用緩存中的輸出之前,會檢測一個頁面的輸入,如果輸入不同,那么就會產生一個新的輸出,而不會使用前一個輸出,保持輸出結果的準確性。
要實現頁面輸出緩存,只要將一條OutputCache指令添加到ASPX頁面的頂部,即在任何輸出之前。例如,本系統中根據調研和實踐測試,系統整個操作流程估計完成時間在為30分鐘,因此設置頁面級輸出緩存代碼為:
<%@OutputCache Duration=“1800” VaryByParam=“none”%>
在以往,編程人員常用Session對象和Application對象提供鍵值對來緩存數據,Session對象保存與單個用戶有關的數據,Application對象可保留與應用程序有關的數據,每個用戶都可以訪問。
在ASP.NET中,提供了專門用于緩存數據的Cache對象,它的應用范圍是應用程序域。生存期是和應用程序緊密相關的,每當應用程序啟動的時候就重新創建Cache對象,并且,Cache對象還提供了專門用于緩存管理的特性,比如依賴和過期策略。
在Cache中存儲數據的語法如下:
Cache[“key”] =“value”;
系統中在許多地方需調用數據庫連接字符串來連接數據庫,因此,可以將數據庫連接字符串存入Cache對象中,就無需在以后請求時從系統中讀取。代碼如下:
Cache (“ConnectionString”)=“Provider=Microsoft.Jet.OLEDB.4.0;Data Source=SJJSRJ.mdb”;
射擊項目網上報名報項系統已開發完成,并進行了測試和完善,通過競賽報名報項情況看,達到了預期目標,提高了報名報項的效率和準確度。該系統后期將在此基礎上與國家體育總局運動員數據庫進行對接,將已有運動員信息進行直接獲取,保證信息的準確性。
[1] 李振坤,張朝暉,李小強.港澳臺僑聯招報名系統的設計與實現[J] .計算機工程,2007,33(15):252-254.
[2] 韓雙旺,王心源,李德錄.利用緩存優化基于ASP.NET 的Web GIS 性能[J].微計算機信息,2006,22(8):152-155.
[3] 王 星,潘 郁.基于AJAX技術的Web模型在網站開發中的應用研究[J] .微計算機信息,2006,22(9):206-207.
[4] 賀 琛,陳肇雄,黃河燕.Web 緩存技術綜述[J].小型微型計算機系統,2004,25(5):836-842.
[5] 邵麗萍,肖世德.新一代Web開發技術ASP.NET的發展與探析[J].微計算機信息,2005(1):190-192.