邵珠貴 楊惠英
(吉林電大分校,吉林市 132002;東北電力大學,吉林市 132002)
關于ASP.NET網頁間數據共享的研究
邵珠貴 楊惠英
(吉林電大分校,吉林市 132002;東北電力大學,吉林市 132002)
利用ASP.NET C#開發基于B/S模式的應用系統,通常是由多個頁面構成的整體。頁面之間必然存在數據的傳遞,即存在數據的共享問題。解決好頁面之間的數據共享是開發高質量應用系統的重要前提,若解決不好會給系統的安全運行帶來隱患。本文參考相關資料結合開發實踐對ASP.NET網頁的數據共享問題進行了較為詳細的總結和探討。
asp.net;數據共享;編程
利用ASP.N ET C#開發基于B/S模式的應用系統,往往是由許多頁面構成的一個復雜整體。這些頁面共同協調實現用戶所需要的功能,頁面之間必然存在內在聯系,存在數據的傳遞,即存在數據的共享問題。即使在同一頁面中,內部各函數之間也需要數據共享。解決好頁面的數據共享是開發高質量應用系統的重要前提,否則會使系統的數據紊亂,導致系統復雜度提高,使開發工作事倍功半,給系統的安全運行帶來隱患。
在利用ASP.N ET開發的系統中,每個頁面對應一個程序文件,而每個程序文件是由多個函數組成的,在函數之間需要數據共享;另外 HTTP協議是一種無狀態的通信協議,每個連接都是全新的開始。在頁面狀態發生變化時即對一個頁面進行刷新時,刷新前后的頁面也需要數據共享。
一般情況實現某一個功能是需要多個網頁聯合共同完成的,當客戶端用戶在同一個瀏覽器窗口先后進入這些頁面 (不是中途打開直接進入),有時前面的頁面會向它轉向打開的后面頁面傳送數據,即這些頁面也是存在數據共享的問題。例如前一個網頁的輸入數據或處理結果被后一個網頁所使用。
當用戶在同一臺機器上先后打開多個瀏覽器窗口,瀏覽同一個網站的相同或不同的網頁時,本用戶的數據有時需要在不同時間重復使用,即存在同一用戶機器不同窗口間的數據共享的問題。例如在個人專用機器上用戶的一些登錄信息可以重復使用的,不必每次都重新輸入這些登錄信息。
當有不同用戶同時或不同時在不同機器上瀏覽相同或不同的網頁時,用戶之間有時也會有數據的聯系,例如統計頁面的訪問次數或記錄網站的在線人數時就需要統計訪問本網頁 (網站)的所有訪問用戶。這些用戶可能是同時或不同時在不同機器上瀏覽的。
*利用類的實例
可以在系統文件夾App-Code中設計自定義類,在頁面類的變量聲明處可以創建這個類的實例,而這個類的實例就類似頁面的全局變量,在頁面中的每個函數都可以使用。
*利用服務器控件
服務器控件在頁面運行過程中具有保存數據的功能,例如 TextBox控件在頁面被提交 (Post-Back)前后,它的 Text的屬性值不會發生改變的,因此可以利用服務器控件實現在頁面不同狀態下的數據共享。
*利用View State對象
View State對象可以用來保存頁面中的各種變量,甚至是對象。
“有些數據可以直接保存到View State中,諸如字符串、整數、布爾、數組表、哈希表等。”服務器端會為每個連接到該頁面的用戶分別建立一個V iew State,相當于頁面級全局變量,但是一旦退出當前頁面,它就會丟失。使用格式是:保存數據View State[“數據名稱”]=數據;讀取數據變量=(int)View State[“數據名稱”]。
*利用Response與request進行參數傳遞
Response與 request是asp.net提供的兩個常用內置對象。Response對象主要功能是向瀏覽器輸出信息。該對象使用redirect方法可以重定向到其他頁面,并且可以使用連接地址攜帶參數。其格式是:Response(“URL地址 ?參數列表”)。Request對象是與 Response對象相對應的對象。利用 Request對象可以讀取 Response對象在其他網頁提交過來的數據。其使用格式是:Request[“參數名”]。因此利用Response與 request的參數傳遞可以實現網頁間的數據共享。
*利用Session對象
Session對象也是asp.net提供的一個常用內置對象。該對象可以實現同一用戶多個網頁間數據的共享,Session對象是面向瀏覽器窗口的 (即是用戶級的),每個瀏覽器窗口都有自己獨立的Session互不干擾。當用戶在應用程序的Web頁之間跳轉時,存儲在 Session對象中的變量不會丟失,而是在整個用戶會話中一直存在下去,直到用戶離開這個網站為止。因此可以利用Session對象實現同一用戶網頁間的數據共享。Session對象的使用格式:讀取數據變量=Session[索引號|“數據名稱”];保存數據 Session[索引號 |“數據名稱”] =數據。
*利用Cookies對象
Cookies對象是可以用來進行數據共享的另外一種對象。Cookies對象是依附于 Response與 request對象的子對象,不能單獨使用。Cookiess是與Web站點關聯而不是與具體網頁關聯的,無論用戶瀏覽站點中哪個頁面,瀏覽器和服務器都交換網站的Cookies信息。Cookies的數據是以文本形式存在客戶端的機器中,因此Cookies對象是面向機器的,可以使同在該機器上分別打開的不同瀏覽器窗口共享數據。Cookies對象使用格式:保存數據Response.Cookies[“數據名稱”].value=數據;讀出數據 data=Request.Cookies[“數據名稱”]. value。
*利用App lication對象
App lication是一個面向應用程序級的對象,用于保存所有用戶共用的數據信息,這些信息對所有用戶是共享的。因此,可以利用App lication對象實現應用程序的所有用戶之間共享數據。App lication對象的使用格式:讀取數據數據=App lication [索引號|“數據名稱”];保存數據App lication[索引號|“數據名稱”]=數據。
*利用文件或數據庫實現
以上大多數的共享方法當IIS或者機器關閉之后,存放在對象中的數據也隨之消失,如果想要在IIS或者機器關閉之后數據仍然能夠長期保存共享,就必須將共享數據存到文件或數據庫里,需要時再從文件或數據庫中取出。Stream Reader對象是.N ET提供的專門用于讀取文件的對象; StreamW riter是寫入文件的專用對象。兩個對象都有相應的方法用來完成文件的讀出和寫入。數據庫可以是一些常用的后臺數據庫,ASP.N ET提供了專門的操作數據庫的對象及方法,利用這些對象及方法可以完成對數據庫的具體操作。
綜上所述,利用ASP.NET C#開發基于B/S模式的應用系統時,網頁間數據共享的情況比較多,解決的方法也不盡相同。在實際編程時需要根據實際情況采取綜合的解決方案。
[1]徐新華.精通ASP.Net 2.0[M].北京:機械工業出版社,2006:101.
[2]劉培義.ASP.Net程序設計教程 [M].北京:科海電子出版社,2009:75.
[3]宮繼兵.ASP.Net 2.0 Web數據庫開發教程[M].北京:機械工業出版社,2009,94.
TP393
A
1008-7508(2012)01-0134-03
2011-09-26
邵珠貴 (1955~),吉林市人,吉林電大分校副教授,主要從事計算機應用的教學和信息管理軟件的開發。楊惠英 (1958~),女,吉林市人,東北電力大學副教授.主要從事計算機應用的教學和信息管理軟件的開發。