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協議中沒有什麼能夠允許服務器端來跟蹤用戶請求的。在服務器端完成響應用戶的請求後,服務器端不能持續與該瀏覽器保持連接。從網站的觀點看,每一個新的請求都是單獨存在的,因此,當用戶在多個主頁間轉換時,就根本無法知道他的身份。
  可以使用Session對象存儲特定用戶會話所需的信息。這樣,當用戶在應用程序的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頁處理完成之後,服務器將自動破壞這些對象。如果要創建有會話或應用程序作用域的對象,可以使用<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 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章