陳 印,周 蓉,朱 倩
(四川職業(yè)技術學院計算機科學系,四川 遂寧 629000)
ASP.NET頁面臨時數據共享需求與解決方案研究
陳 印,周 蓉,朱 倩
(四川職業(yè)技術學院計算機科學系,四川 遂寧 629000)
探討ASP.NET站點中WEB頁面對應用程序、會話以及頁面級別的臨時數據共享需求,提出基于Application、Session以及ViewState等技術的數據共享解決方案.
ASP.NET;Application;Session;ViewState;數據共享
在A S P.NE T站點中,使用數據庫是核心數據共享的最佳方案.然而,除了核心數據以外,站點頁面中頻繁使用的變量、頁面交互中使用的參數等臨時數據同樣需要共享,而且這些數據的共享并不適合使用數據庫.縱觀A S P.NE T站點中的臨時數據共享技術,不僅包含了傳統的F o rm和Q u e r y S t r in g技術,更包括了.NE T F ram e W o rk框架下面向對象的A ppl i ca t tion、S ession以及V ie wS t a te等一系列特有的技術.然而不同級別的數據共享需求所適用的共享技術并非等同,因此,本文從共享需求角度來分析不同場合下頁面臨時數據的共享解決方案.
2.1 WEB應用程序級別
在W EB項目開發(fā)中,經常會遇到整個站點都需要共用某些數據的情況.比如,某些論壇網站需要統計站點訪問量,通常情況下應該是不同時刻每個訪問站點的瀏覽器進程都應該能獲取到當前訪問量并對數據進行增加,然后再通過某種方式儲存起來供下一次訪問.又比如常見的購物網站對在線人數的統計,一般情況下應該是有新的用戶進程訪問站點就應該對在線人數進行加一操作,有用戶進程過期就應該對在線人數進行減一操作.這里的“站點訪問量”和“在線人數”就屬于W EB應用程序級別需要共享的數據.
2.2 會話級別
在限定時間范圍內訪問W EB站點的同一客戶端的請求稱為一個會話[1],在會話期間,某些數據可能需要在同一會話內的訪問頁面中共享使用.比如,某個用戶訪問站點并登錄后,需要在訪問期間能共享其登錄的賬戶名、賬戶類型以及訪問級別等數據,這就需要將這些數據進行會話級別的共享,以供本次訪問站點的會話自己使用.
2.3 頁面級別
W EB站點從一個頁跳轉到另一個頁是最常見的頁面交互方式.如果兩個頁面在訪問前后需要用到相同的數據,這些數據就需要進行頁面級別的共享.頁面跳轉交互在A S P.NE T中有兩種情況:
一種是不同頁面進行跳轉交互.比如,在新聞站點的新聞列表頁中點擊新聞標題后跳轉到該新聞的詳情頁,這兩個頁面在訪問前后需要對新聞的關鍵數據(如新聞編號)進行共享,否則新聞詳情頁就無法獲知需要呈現哪條新聞.
另一種是同一頁面在刷新前后交互.比如,在查詢頁面點擊服務器控件(如B u t ton)按照指定條件找到查詢結果之后,又需要用服務器控件(如L in k B u t ton)實現上一頁和下一頁導航,這就需要在導航過程中對搜索條件進行共享.
3.1 WEB應用程序級別
在A S P.NE T中,站點應用程序級別的數據共享可以使用A ppl i ca tion對象來進行設置.A ppl i cation是應用程序級的對象,它通過在服務器上建立一個狀態(tài)變量來存儲信息,該變量創(chuàng)建在內存中,可供該應用程序中的任何一個頁面訪問[2].A ppl ica tion對象變量一般在全局配置文件(G l o bal.a s ax)的A ppl i ca tion_S t ar t事件中進行初始化,然后在其他頁面直接訪問:
設置方法:A ppl i ca tion["變量名"]="值";
取值方法:字符變量名=A ppl i ca tion["參數名"].T o S t r in g();
A ppl i ca tion對象共享的數據是o bj e c t類型,取值時需要根據需要進行類型轉換。如前文提到的站點訪問量、在線人數等,可以分別在G l o bal. a s ax文件的S ession_S t ar t和S ession_E nd事件中獲取共享的A ppl i ca tion對象變量進行操作,并回存修改后的變量值:
A ppl i ca tion.L o ck();//開啟排他鎖
A ppl i ca tion["c o u nt O n"]=(int)A ppl i ca tion ["c o u nt O n"]+1;//在線人數增加
A ppl i ca tion.U n L o ck();//關閉排他鎖
此外,A S P.NE T還提供了Cac he對象用于應用程序級別緩存臨時數據,其用法與A ppl i ca tion相似,但更靈活,可以設置緩存有效時間及優(yōu)先次序.
設置方法:Cac he["變量名"]="值";
取值方法:字符變量名=Cac he["變量名"]. T o S t r in g();
設置Cac he緩存變量時,可以使用以下方法設置過期策略:
Cac he.I nse r t("變量名","變量值",n ul l, D a te T i m e.N o w.Add M in u tes (10), Cac he. N o Sl idin g E xp i ra tion);
以上設置緩存變量的過期時間為現在開始的10分鐘.如果緩存在N o Sl idin g E xp i ra tion設定的時間內沒有被訪問,緩存過期,否則就不過期.
3.2 會話級別
會話級別的數據共享一般使用S ession,它是A S P.NE T中存儲會話級別共享數據的特有對象。
設置方法:S ession["變量名"]="值";
取值方法:字符變量=S ession["變量名"]. T o S t r in g();
如,用戶登錄成功以后可以將其賬戶名、賬戶類型和訪問級別等數據設置到S ession對象中,在其他頁面直接從S ession中取值即可.在會話的有效期內,該數據能且僅能被該會話獨自使用.
此外,C oo k ie也可以用作會話級別的對象來共享數據,用法與S ession類似,不同的是前者存儲在客戶端,后者存儲在服務器端.
3.3 頁面級別
在A S P.NE T中,不同頁面跳轉前后的數據共享與同一頁面刷新前后的數據共享視需求的不同可以采取不同的解決方案.
(1)不同頁面跳轉前后的數據共享解決方案.
通過超級鏈接或R edi r e c t方法發(fā)生的不同頁面跳轉后數據的共享(更多屬于參數的傳遞)可以使用F o rm表單或Q u e r y S t r in g來實現,這與傳統的Post或Get方法使用原理比較類似.F o rm表單適合于前一頁向后一頁發(fā)送(共享)大量數據的需求,而Q u e r y S t r in g則適合少量數據的共享需求.
①F o rm表單共享數據的方法:
a.a s px頁面:R u nAt="S e rv e r"的表單中放置W EB服務器控件及數據.
b.a s px頁面:通過R e q u est.F o rm["控件名"]獲取數據。
②Q u e r y S t r in g的數據共享方法:
a.a s px頁 面 :R es p onse.R edi r e c t("ne w s-De a t a i l.a s px?ne w s I D="+ne w s I D);
b.a s px頁面:st r in g ne w s I D=R e q u est.Q u e r y S-t r in g["ne w s I D"];
(2)同一頁面刷新前后的數據共享解決方案.
A S P.NE T中的V ie wS t a te對象為同一頁面在刷新前后的數據共享提供了良好的解決方案:
設置方法:V ie wS t a te["變量名"]="值";
取值方法:字符變量=V ie wS t a te["變量名"].T o S t r in g();
同樣,V ie wS t a te存儲的也是o bj e c t類型的數據,支持復合數據的存儲.
A S P.NE T中頁面?zhèn)髦档姆椒ǘ喾N多樣,必須分清楚頁面值傳遞的具體應用需求、掌握不同范圍數據共享技術的適用場合,我們才能在W EB項目開發(fā)中做到胸有成竹,找到合適的解決方案.
[1]張俊鎖.A S P.NE TS ession的原理和用法[J].信息通信, 2014,(11).
[2]郭清菊.A S P.NE T中頁面間傳值方法的實現[J].軟件導判,2010,9(7).
責任編輯:張隆輝
TP31
A
1672-2094(2016)02-0162-02
2016-01-13
四川省教育廳自然科學一般科研項目13Z B0031.
陳 印(1979-),男,四川渠縣人,四川職業(yè)技術學院副教授,碩士.研究方向:計算機軟件技術.