ASP.NET的內建對象
一、Response對象
Response對象是HttpResponse類的一個執行個體。該類主要是封裝來自ASP.NET操作的HTTP響應資訊。
1.Response對象的屬性
(1)ContentType屬性。ContentType屬性指定響應的HTTP內容類型。如果未指定ContentType,其預設值為text/HTML。
(2)Charset屬性。Charset屬性將字元集名稱附加到Response對象中的content-type頭資訊的後面。對於不包含Response.Charset屬性的
ASP.NET頁,content-type頭資訊將為content-type:text/html。可以在asp檔案中指定content-type頭資訊,如:
Response.Charset="gb2312";
將產生以下結果:
content-type:text/html; charset=gb2312
無論字串表示的字元集是否有效,該功能都會將其插入content-type頭資訊中。且如果某個頁包含多個含有Response.Charset的標記,則
每個Response.Charset都將替代前一個CharsetName。這樣,字元集將被設定為該頁中Response.Charset的最後一個執行個體所指定的值。
(3)Expires屬性。Expires屬性指定了在瀏覽器上緩衝儲存的頁距到期還有多少時間。如果使用者在某個頁面到期之前又回到此頁,就會顯示
緩衝區中的版本。如設定response.expires=0,則可使緩衝的頁面立即到期。這是一個較實用的屬性,當客戶通過ASP.NET的登入頁面進入Web站
點後,應該利用該屬性使登入頁面立即到期,以確保安全。
(4)ExpiresAbsolute屬性。與Expires屬性不同,ExpiresAbsolute屬性指定緩衝在瀏覽器中,頁面的確切到期日和時間。在未到期之前
,若使用者返回到該頁,該緩衝中的頁面就顯示。如果未指定時間,該首頁在當天午夜到期。如果未指定日期,則該首頁在指令碼運行當天的指定
時間到期。
2.Response對象的方法
Response對象可以輸出資訊到用戶端,包括直接發送資訊給瀏覽器、重新導向瀏覽器到另一個URL或設定cookie的值。
1.Write方法
ASP.NET中引用對象方法的文法是“對象名.方法名”,如下面指令碼中用的Response.Write(i+"<BR>")語句,其含義為引用Response對象的
Write方法在螢幕上顯示從1-500。每一句命令執行後結果都立即顯示,可即時地看到執行結果。
for(int i=1;i<=500;i++)
{
Response.Write(i+"<BR>");
}
Response對象的Write方法將指定的字串或運算式的結果寫到當前的HTTP輸出。方法就是嵌入到對象定義中的程式碼,它定義對象怎樣去
處理資訊。使用嵌入的方法,對象便知道如何去執行任務,而不用提供額外的指令。
2.BufferOutput相關方法
在某些場合下,可以利用緩衝區來延續執行過程,當利用緩衝區時,直到整個頁面執行結束才會將結果輸出到瀏覽器上。Buffer方法已被否
決,而代之以BufferOutput方法,提供它只是為了與以前的ASP版本相容。在ASP.NET中使用BufferOutput。如果緩衝了到用戶端的輸出,則為
true;否則為false。預設為true。
下面的樣本只在緩衝了輸出時才執行操作。
if(Response.BufferOutput == true)
{
//....
}
3.End方法、Clear方法和Flush方法
Response對象還有End方法和Clear方法。End方法會立即停止頁面的執行並得到相應結果。在執行End方法時,不需要考慮是否進行了緩衝輸
出。另外,End方法在偵錯工具時,非常有用。它可以輸出一部分內容,來協助判斷程式是在何處中止或出錯的。
Clear方法是用來在不將緩衝中的內容輸出的前提下,清空當前頁的緩衝,僅當使用了緩衝輸出時,才可以利用Clear方法。
Response對象在緩衝輸出中,還有另一個方法是Flush,該方法可以將緩衝中的內容立即顯示出來。該方法有一點和Clear方法一樣,它在腳
本前面沒有將Buffer屬性設定為True時會出錯。和End方法不同的是,該方法調用後,該頁面可繼續執行。
4.Redirect方法
對象Response的另一個常用的方法是Redirect方法。在很多場合下,網站需要引導使用者到另一個首頁上,例如,使用者註冊單沒有填寫完全或
填寫錯誤就進行了提交,那麼提交程式會自動將使用者返回到註冊頁等。Redirect方法使瀏覽器立即重新導向到程式指定的URL。這也是一個開發時
經常用到的方法,這樣程式員就可以根據客戶的不同響應,為不同的客戶指定不同的頁面或根據不同的情況指定不同的頁面。一旦使用了
Redirect方法,任何在頁中顯式設定的響應本文內容都將被忽略。然而,此方法不向用戶端發送該頁設定的其他HTTP頭資訊,而是產生一個將
重新導向URL作為連結的自動響應本文。
可以利用Response.Redirect方法來指向任何合法的網址,該網址可以是HTML頁面或aspx頁面等,可以處於當前伺服器,也可以處於區域網路甚
至廣域網路上的任何一台內建作業系統和HTTPServer的伺服器。
不過,現在這種操作並不順利,老版本的瀏覽器通常無法處理,而是會顯示如下資訊:
Object Moved
This object may be found here
用按一下滑鼠here後,轉到相應頁面。
這樣給使用者的體驗就不是很好。所以也可以把要轉到的頁麵包含進當前檔案。利用服務端的INCLUDE命令可以很容易地在ASP.NET中包含其他
檔案。這種服務端的INCLUDE命令不需要在指令碼中實現,它完全可以作為HTML代碼的一部分,例如:
<HTML>
<HEAD><TITLE>歡迎</TITLE></HEAD>
<BODY>
<!--#INCLUDE VIRTUAL="mybanner.inc"-->
歡迎進入檔案包容樣本程式
</BODY>
</HTML>
在這個例子中。檔案mybanner.inc將被插入到這個ASP.NET檔案<BODY>標記下面,當這個ASP.NET檔案執行時,在mybanner.inc中的HTML代碼
以及指令碼也將在相應位置執行或出現。這種檔案包含有兩種路徑,虛擬路徑或者實體路徑。下面是包含實體路徑的樣本:
<HTML>
<HEAD><TITLE>歡迎</TITLE></HEAD>
<!--#INCLUDE FILE="mybanner.inc"-->
歡迎進入檔案包容樣本程式
</BODY>
</HTML>
如果使用FILE命令來指定實體路徑,那麼檔案必須在目前的目錄或者子目錄下面。本例中,檔案在目前的目錄下,這樣限制就比較多,因此,一
般應當使用虛擬路徑命令。
這種檔案對於任何其他副檔名都是有效,一般來說,習慣上用.INC副檔名,但是還可以使用aspx,htm,html或者任何其它副檔名。有兩種
情況需要包含其他檔案,一種是有一些十分通用的常用程式段或者指令碼,不需要每個ASP.NET檔案都寫一遍,那麼完全可以在每個需要的
ASP.NET檔案中進行包含就行了。
二、Request對象
Request對象是HttpRequest類的一個執行個體。使ASP.NET能夠讀取用戶端在Web請求期間發送的HTTP值。
1.Request對象的屬性
(1)TotalBytes屬性
得到用戶端在請求本文中發送的總位元組數。該屬性為唯讀。
文法:Counter=Request.TotalBytes;
(2)Counter屬性
指定一個變數來接收用戶端在請求中發送的總位元組數。
2.Request對象的方法
(1)Form方法和QueryString方法
當需要在多個ASP.NET首頁中傳遞訊息的時候,Request的Form方法是一個可以選擇的方法。它通過使用POST方法的表格檢索傳送到HTTP請求
本文中表格元素的值。
Form集合按請求本文中參數的名稱來索引。Request.Form(element)的值是請求本文中element值。
在Request對象中,還有一個集合實作類別似的功能,它就是QueryString。大家經常可以看見類似這樣的網路地址:
“http://www.ECNU.com/query.asp?stockCode=06601”
問號(?)後面的值就是HTTP查詢字串,而QueryString集合檢索HTTP查詢字串中變數的值。通過發送表格式資料或由使用者在其遊覽器的地
址框中輸入查詢都可以產生類似的查詢字串。它和Form集合的區別是用QueryString集合檢索HTTP查詢字串中變數的值時,變數和它的值是
可見的。也就是說,任何一個路過的人都可以看見由QueryString集合接收的任何變數的值,這就意味著如果用它來傳遞使用者密碼是很危險的。
如果傳遞的資料量比較大,用Query欄位也不好辦。對於不同的瀏覽器,這種資訊傳遞的大小是有不同的限制的,例如某些瀏覽器無法處理超
過2000個字元的Query欄位。如果URL串連帶Query欄位超過這個長度,瀏覽器就無法正確處理。有時無法確認欄位長度具體有多少,因為實際上
對於瀏覽器限制的長度是指瀏覽器地址欄中所能顯示並發送的最大長度,也就是URL地址和Query欄位的總長度。一般說來,如果傳遞資料量比
較大,就不要使用這種方式了。所以,利用Query欄位傳遞的資訊都應當是簡潔的和非保密的,如果有大量資料需要傳遞,那麼可以利用HTTP的
Form中的hidden類型,詳細介紹請參考有關HTML的介紹。在這裡值得解釋的是,HTTP協議在傳遞Form時比傳遞Query欄位有效得多。
(2)BinaryRead方法
Request對象包括BinaryRead方法,該方法擷取作為POST請求的一部分而從用戶端傳送到伺服器的資料。
文法:variant=Request.BinaryRead(Count)
參數:
·variant:包含由該方法返回的無符號數的數組。該參數的類型為byte。
·count:在執行前,指定要從用戶端讀取的位元組數。此方法返回後,count將包含從客戶機成功讀取的位元組數。實際讀取的位元組總數將小於
或等於Request.TotalBytes。
BinaryRead方法用於讀取作為POST請求的一部分從用戶端發出的未加工的資料。此方法用於在底層訪問資料。與此相反,Request.Form集合
用於查看在公告請求中發送的表格式資料。一旦調用了BinaryRead,則引用Request.Form集合中的任何變數都將導致錯誤發生。反之,一旦引用
了Request.Form集合中的一個變數,則調用BinaryWrite也將導致錯誤發生。請記住,如果在訪問Request集合中的變數時未指定該變數屬於哪
一個子集,將搜尋Request.Form集合并強制使用上述規則。
三、Application對象
Application對象是HttpApplicationState類的一個執行個體。
HttpApplicationState類的單個執行個體在用戶端第一次從某個特定的ASP.NET應用程式虛擬目錄中請求任何URL資源時建立。對於Web伺服器上的
每個ASP.NET應用程式都要建立一個單獨的執行個體。然後通過內部Application對象公開對每個執行個體的引用。
·資料可以在Application對象內部共用,因此一個Application對象可以覆蓋多個使用者。
·一個Application對象包含事件可以觸發某些Application對象指令碼。
·個別的Application對象可以用Internet Service Manager來設定而獲得不同屬性。
·單獨的Application對象可以隔離出來在它們自己的記憶體中運行,這就是說,如果一個人的Application遭到破壞,不會影響其他人。
·可以停止一個Application對象(將其所有組件從記憶體中驅除)而不會影響到其他應用程式。
一個網站可以有不止一個Application對象。典型情況下,可以針對個別任務的一些檔案建立個別的Application對象。例如,可以建立一個
Application對象來適用於全部公用使用者,而再建立另外一個Application對象只適用於網路系統管理員。
Application對象使給定應用程式的所有使用者之間共用資訊,並且在伺服器運行期間持久地儲存資料。因為多個使用者可以共用一個
Application對象,所以必須要有Lock和Unlock方法以確保多個使用者無法同時改變某一屬性。
1.Application對象的集合
(1)Contents集合。下面的樣本建立一個新的HttpApplicationState對象,此對象用於訪問應用程式狀態集合中的對象名。
HttpApplicationState AppState2;
AppState2 = Application.Contents;
String[] StateVars = new String[AppState2.Count];
StateVars = AppState2.Allkeys;
(2)StaticObjects集合。StaticObject集合包含所有的在Application物件範圍中使用<OBJECT>標記創立的對象。可以使用該集合確定某對
象指定屬性的值或遍曆集合,以及檢索所有靜態對象的所有屬性。
文法如下:
public HttpStaticObjectCollection StaticObjects {get;}
使用迴圈控制結構可以遍曆StaticObjects集合中的關鍵字。請看下面的樣本。
HttpStaticObjectsCollection pageObjects;
pageObjects = Application.StaticObjects;
if (PageObjects.Count > 0)
{
//...
}
2.Application對象的方法
(1)Lock方法。Lock方法可以阻止其他客戶修改儲存在Application對象中的變數,以確保在同一時刻僅有一個客戶可以修改和存取
Application變數。如果使用者沒有明確調用Unlock方法,則伺服器將在分頁檔結束或逾時即解除對Application對象的鎖定。
文法:Public void Lock();
(2)Unlock方法。Unlock方法可以使其他用戶端在使用Lock方法鎖住Application對象後,修改儲存在該對象中的變數。如果未顯示調用該
方法,Web伺服器將在分頁檔結束或逾時後解鎖Application對象。
文法:public void UnLock();
下面的樣本使用Lock方法和Unlock方法,在本地會話更改兩個應用程式變數值之前防止其他會話更改他們。
Application.Lock();
Application["MyCode"] = 21;
Application["MyCount"] = Convert.ToInt32(Application["MyCount"]) + 1;
Application.UnLock();
3.Application對象的事件
(1)Application_OnEnd事件。Application_OnEnd事件在應用程式退出時於Session_OnEnd事件之後發生,只有Applicaiton和Server內嵌對
象可用。
(2)Application_OnStart事件。Application_OnStart事件在首次建立新的會話(即Session_OnStart事件)之前發生,只有Application和
Server內嵌對象是可用的。在Application_OnStart事件指令碼中引用Session,Request或Response對象將導致錯誤。
一個Application對象的OnStart事件肯定發生在Session_Start事件之前。不過,Application對象不會像Session對象那樣在一個新使用者請求
後就觸發,Application對象只觸發一次,即第一個使用者的第一次請求。
Application_OnEnd事件只有在服務中止或該Application對象卸載時才會觸發,例如,在Internet Service Manager中關閉了網路服務,那
麼Application_OnEnd事件就會被觸發,如果針對單獨目的使用Application,這個事件可以通過Application在利用Unload按鈕卸載時進行觸發
。一個Application_OnEnd事件肯定發生在Session_OnEnd事件之後。
Application_OnStart和Application_OnEnd事件都是觸發唯一一個指令碼程式。而且這些事件都在一個檔案中,即Global.asax檔案。
應該注意的是,由於Application對象是多使用者共用的,因此它與Session對象有著本質的區別。同時Application對象不會因為某一個甚至全
部使用者離開就消失,一旦建立了Application對象,那麼它就會一直存在到網站關閉或者這個Application對象被卸載。這經常可能是幾周或者
幾個月的時間。
由於Application對象建立後不會自己登出,因此,就要特別小心地使用,它會佔用記憶體,要斟酌使用以免降低伺服器對其他工作的響應速度
。Application對象被中止的方法有3種:服務被中止、Global.asax被改變或者該Application對象被卸載。
四、Session對象
Session對象是HttpSessionState的一個執行個體。該類為目前使用者會話提供資訊,還提供對可用於儲存資訊的會話範圍的緩衝的訪問,以及控制
如何管理會話的方法。
Session的發明是填補HTTP協議的局限,HTTP協議工作過程是,使用者發出請求,伺服器端做出響應,這種使用者端和伺服器端之間的聯絡都是離
散的,非連續的。在HTTP協議中沒有什麼能夠允許伺服器端來跟蹤使用者請求的。在伺服器端完成響應使用者的請求後,伺服器端不能持續與該瀏
覽器保持串連。從網站的觀點看,每一個新的請求都是單獨存在的,因此,當使用者在多個首頁間轉換時,就根本無法知道他的身份。
可以使用SessionObject Storage Service特定使用者會話所需的資訊。這樣,當使用者在應用程式的Web頁之間跳轉時,儲存在Session對象中的變數將不會丟失
,而是在整個使用者會話中一直存在下去。
當使用者請求來自應用程式的Web頁時,如果該使用者還沒有會話,則Web伺服器將自動建立一個Session對象。當會話到期或被放棄後,伺服器將
中止該會話。
當使用者第一次請求給定的應用程式中的aspx檔案時,ASP.NET將產生一個SessionID。SessionID是由一個複雜演算法產生的號碼,它唯一標識每
個使用者會話。在新會話開始時,伺服器將SessionID作為一個cookie儲存在使用者的Web瀏覽器中。
在將SessionID cookie儲存於使用者的瀏覽器之後,即使使用者請求了另一個.aspx檔案,或請求了運行在另一個應用程式中的.aspx檔案,
ASP.NET仍會重用該cookie跟蹤會話。與此相似,如果使用者故意放棄會話或讓會話逾時,然後再請求另一個.aspx檔案,那麼ASP.NET將以同一個
cookie開始新的會話。只有當伺服器管理員重新啟動伺服器,或使用者重新啟動Web瀏覽器時,此時儲存在記憶體中的SessionID設定才被清除,用
戶將會獲得新的SessionID cookie。
通過重用SessionID cookie,Web應用程式將發送給使用者瀏覽器的cookie數量降為最低。另外,如果使用者決定該Web應用程式不需要會話管理
,就可以不讓Web應用程式跟蹤會話和向使用者發送SessionID。
Session對象最常見的一個用法就是儲存使用者的喜好設定。例如,如果使用者指明不喜歡查看圖形,另外其還經常被用在鑒別客戶身份的程式中。
要注意的是,工作階段狀態僅在支援cookie的瀏覽器中保留,如果客戶關閉了cookie選項,Session也就不能發揮作用了。
ASP.NET的Session非常好用,能夠利用Session對象來對Session全面控制,如果需要在一個使用者的Session中儲存資訊,只需要簡單地直接調
用Session對象就可以了,下面是個例子:
Session("Myname")=Response.form("Username");
Session("Mycompany")=Response.form("Usercompany");
一般情況下,無法用普通的指令碼變數來進行這種處理,因為一般的變數只在一個單獨首頁內有效,而Session變數在使用者離開網站前一直存在
、生效。
應注意的是Session對象是與特定使用者相聯絡的。針對某一個使用者賦值的Session對象是和其他使用者的Session對象完全獨立的,不會相互影響
。換句話說,這裡面針對每一個使用者儲存的資訊是每一個使用者自己獨享的,不會產生共用情況。
很明顯,對於不同的使用者,Session對象的Myname變數和Mycompany變數各自是不同的,當每個人在網站的不同首頁間瀏覽時,這種針對個人
的變數會一直保留,這樣作為身份認證是十分有效。
1.Session對象的集合
(1)Contents集合
Session.contents集合包括所有未使用<OBJECT>標記而為該會話建立的項目。此集合可用於確定指定會話項的值或遍曆集合并檢索出會話中
所有項的列表。
文法:public HttpSessionState Contents {get;}
(2)StaticObjects集合
StaticObject集合包含Session物件範圍中用<OBJECT>標記建立的所有對象。該集合可用於確定對象特定屬性的值,或用於遍曆集合并擷取所
有對象的全部屬性。
文法:public HttpStaticObjectsCollection StaticObjects {get;}
2.Session對象的屬性
(1)SessionID屬性
SessionID屬性返回使用者的工作階段識別項。在建立會話時,伺服器會為每一個會話產生一個單獨的標識符。工作階段識別項以長整形資料類型返回。
在很多情況下,SessionID可以用於Web頁面註冊統計。
不要用SessionID屬性為資料庫應用程式建立主關鍵字。這是因為,如果Web伺服器重新啟動,則部分SessionID的值可能同伺服器終止前產生
的值相同。可以使用自動增加的列資料類型來代替,如SQL Server中的IDENTITY,或Access中的COUNTER。
(2)Timeout屬性
伺服器怎麼知道一個Session對象結束了呢?換句話說,怎樣知道使用者是否已經離開了這個網站而去了另一個網站或者已經關掉電腦了呢?如
果一個人一直沒有提出請求或者重新整理首頁長達20分鐘,那麼伺服器就預設為使用者已經離開了。這種策略就使得服務端可以釋放對使用者進程進行
跟蹤時使用的資源。
對於有些網路站台,20分鐘顯然有些短,例如,對於網路圍棋,考慮是需要很長時間的。如果20分鐘就釋放了資源,這個棋手就會被伺服器
端“轟出局”。
有些網路站台則相反,資源有限而訪問量又很大,沒有什麼需要耗費時間的資訊傳遞,那麼白白浪費資源是很可惜的,也會使其他訪問者的
訪問速度受到影響。
不過,對於ASP.NET來說,對這些進行控制都沒什麼難度,Session對象有這種Timeout屬性,完全可以用Session對象限定時間。
3.Session對象的方法
Session對象的方法中有一個Abandon方法,該方法可刪除所有儲存在Session對象中的對象,並釋放這些對象的資源。如果未明確地調用
Abandon方法,一旦會話逾時,伺服器將刪除這些對象。
文法:public void Abandon();
Abandon方法被調用時,將按順序刪除當前的Session對象,不過在當前頁中所有指令碼命令都處理完後,對象才會被真正刪除。這就是說,在
調用Abandon時,可以在當前頁上訪問儲存在Session對象中的變數,但在隨後的Web頁上不行。當伺服器處理完當前頁時,下面樣本將釋放
Session對象資源:
Session.Abandon();
當使用者的Session時間到期後,如果使用者重新整理了首頁,那麼該使用者將被認為是新的訪問者,所有以前的Session資訊會全部失去。也可以利用
Abandon方法來撤銷一個Session。這裡再引入一個SessionID屬性。該屬性將自動為每一個Session分配不同的編號。
要說明的是,對於一個Session對象來說,無論使用者怎樣在首頁間切換,只能有一個SessionID。但是由於這裡面使用了Abandon方法,那麼就
使得這個首頁開闢了一個Session後隨即消除,然後再開闢了一個,對於伺服器端來說,是兩個不同的Session對象,其中前面的已經關閉,後
面的仍然保持。
4.Session對象的事件
(1)Session_OnEnd事件。Session_OnEnd事件在會話被放棄或逾時發生。在伺服器內嵌對象中,只有Application,Server和Session對象可用
。
(2)Session_OnStart事件。Session_OnStart事件在伺服器建立新會話時發生。伺服器在執行請求的頁之前先處理該指令碼。Session_OnStart
事件是設定會話期變數的最佳時機,因為在訪問任何頁之前都會先設定它們。
Session_OnStart事件和Session_OnEnd事件的指令碼位於特定的檔案Global.asax中。
五、Server對象
Server對象是HttpServerUtility的一個執行個體。該對象提供對伺服器上的方法和屬性的訪問。
1、Server對象的屬性
Server對象包含ScriptTimeout屬性。
ScriptTimeout屬性指定指令碼在結束前最大可運行多長時間。當處理伺服器組件時,逾時限制將不在生效。
文法:public int scriptTimeout {get;set;}
參數:NumSeconds指定指令碼在被伺服器結束前最大可啟動並執行秒數。預設值為90秒。
當使用者開發出來的指令碼產生了一個十分巨大的首頁時,使用者肯定不希望首頁顯示到一半就逾時了。那麼可以利用Server對象的ScriptTimeout
屬性定製合理的限制時間,如下所示:Server.ScriptTimeout=150;
2、Server對象的方法
(1)CreatObject方法。Server.CreateObject用於建立已經註冊到伺服器上的ActiveX組件執行個體。這是一個非常重要的特性,因為通過使用
ActiveX組件可以輕鬆地擴充ActiveX的能力,譬如資料庫連接、檔案訪問、廣告顯示不能提供或不能簡單地依靠單獨使用ActiveX所能完成的功
能。
該方法已被重載,文法如下:
建立COM對象的伺服器執行個體,該COM對象由對象的程式標識符(ProgID)標識。
public object CreateObject(string);
建立由物件類型標識的COM對象的一個伺服器執行個體。
public object CreateObject(Type);
預設情況下,由Server.CreateObject方法建立的對象具有頁範圍。這就是說,在當前ASP.NET頁處理完成之後,伺服器將自動破壞這些對
象。如果要建立有會話或Application 領域的對象,可以使用<OBJECT>標記並設定Session或Application對象的Scope屬性,也可以在對話及應用
程式變數中儲存該對象:
Session("ad")=Server.CreateObject("MSWC.AdRotator");
這裡需要注意的是,不能建立與內嵌對象同名的對象執行個體,否則,如下列指令碼將返回錯誤資訊:
Response=Server.CreateObject("Response");
(2)HTMLEncode方法。HTMLEncode方法允許對特定的字串進行HTML編碼。雖然HTML可以顯示大部分寫入ASP.NET檔案中的文本,但是當需
要實際包含HTML標記中所使用的字元時,就會遇到問題。這是因為,當瀏覽器讀到這樣的字串時,會試圖進行解釋。
對字串進行HTML編碼並返回已編碼的字串。
public string HtmlEncode(string);
對字串進行HTML編碼,並將結果輸出發送到TextWriter輸出資料流。
public void HtmlEncode(string、TextWriter);
例如想說明<br>在HTML檔案中將產生換行,使用者可能這樣寫:
<HTML>
<BODY>
<FONT SIZE=3>在HTML中,符號<br>將進行換行操作</FONT>
</BODY>
</HTML>
瀏覽器顯示為:
在HTML中,符號
將進行換行操作
上面語句啟動並執行結果並沒有顯示使用者想象的結果。為了避免此類問題,就需要使用Server對象的HtmlEncode方法,採用對應的不由瀏覽器解
釋的HTML編碼替代HTML標記字元。所以,用下面的代碼才能顯示正確的HtmlEncode字串,從而在瀏覽器中按需要輸出文本。
Response.write(Server.HTMLEncode("在HTML中,符號<br>將進行換行操作"));
上面語句瀏覽器顯示為:
在HTML中,符號<br>將進行換行操作
(3)URLEncode方法。就像HTMLEncode方法使客戶可以將字串翻譯成可接受的HTML格式一樣,Server對象的URLEncode方法可以根據URL規
則對字串進行正確編碼。當字串資料以URL的形式傳遞到伺服器時,在字串中不允許出現空格,也不允許出現特殊字元。為此,如果希望
在發送字串之前進行URL編碼,可以使用Server.URLEncode方法。
該函數已被重載,文法如下:
對字串進行URL編碼,並返回已編碼的字串。
public string UrlEncode(string);
URL對字串進行編碼,並將結果輸出發送到TextWriter輸出資料流。
public void UrlEncode(string、TextWriter);
例如下面例子:
<%Response.Write(Server.URLEncode("http://www.microsoft.com"))%>
產生如下輸出:
http %3A%2Fwww%2Emicrosoft%2Ecom
利用QueryString在不同首頁間傳遞資訊時,如果資訊帶有空格或特殊字元,那麼必須進行Encode操作,因為如果不這樣做,很可能使得接收
資訊的那邊接受到一些所不期望的奇怪字串。注意不要對QueryString的名稱以及等號進行Encode操作,只需要將其值進行Encode操作就可以
了。
進行了Encode操作後,效果如下:
Message=This+Query+String+has+been+URL+ENCODED%2E
使用者並不需要考慮對上面的字串再進行解碼,會自動進行這樣的處理。例如,假設有這樣的指令碼:
Request.QueryString("message");
這時,顯示結果為:
This Query String has been URL encoded
(4)MapPath方法。MapPath方法將指定的相對或虛擬路徑映射到伺服器上相應的物理目錄上。
文法:public string MapPath(string path);
參數path表示指定要映射物理目錄的相對或虛擬路徑。若Path以一個正斜杠(/)或反斜線(/)開始,則MapPath方法返迴路徑時將Path視為完整
的虛擬路徑。若Path不是以斜杠開始,則MapPath方法返回同分頁檔中已有的路徑相對的路徑。這裡需要注意的是MapPath方法不檢查返回的
路徑是否正確或在伺服器上是否存在。
對於下列樣本,檔案data.txt和包含下列指令碼的test.aspx檔案都位於目錄C:/Inetpub/wwwroot/aspx下。C:/Inetpub/wwwroot目錄被設定為
伺服器的宿主目錄。下列樣本使用伺服器變數PATH_INFO映射當前檔案的實體路徑。以下指令碼:
Server.mappath(Request.ServerVariables("PATH_INFO"));
輸出:c:/inetpub/wwwroot/asp/test.aspx
由於下列樣本中的路徑參數不是以斜杠字元開始的,所以它們被相對映射到目前的目錄,此處是目錄C:/Inetpub/wwwroot/aspx.以下指令碼:
Server.mappath("data.txt");
Server.mappath("aspx/data.txt");
輸出:
c:/inetpub/wwwroot/aspx/data.txt
c:/inetpub/wwwroot/aspx/aspx/data.txt
(六)cookie
Cookie就是Web伺服器儲存在使用者硬碟上的一段文本。Cookie允許一個Web網站在使用者的電腦上儲存資訊並且隨後再取回它。資訊的片斷以‘鍵/
值’對的形式儲存。
Cookie是儲存在客戶機硬碟上的一個文字檔,可以儲存有關特定用戶端、會話或應用程式的資訊,在.NET中對應HttpCookie類。
有兩種類型的Cookie:會話Cookie(Session Cookie)和持久性Cookie。前者是臨時性的,一旦工作階段狀態結束它將不複存在;後者則具有確定
的到期日期,在到期之前Cookie在使用者的電腦上以文字檔的形式儲存。
在伺服器上建立並向用戶端輸出Cookie可以利用Response對象實現。
Response對象支援一個名為Cookies的集合,可以將Cookie對象添加到該集合中,從而向用戶端輸出Cookie。
通過Request對象的Cookies集合來訪問Cookie