一区二区三区日韩精品-日韩经典一区二区三区-五月激情综合丁香婷婷-欧美精品中文字幕专区

分享

ASP.NET內(nèi)置對象

 誓言_2012! 2012-10-24

(1)簡述ASP.NET內(nèi)置對象。

  答:ASP.NET提供了內(nèi)置對象有Page、Request、Response、Application、Session、Server、Mail和Cookies。這些對象使用戶更容易收集通過瀏覽器請求發(fā)送的信息、響應(yīng)瀏覽器以及存儲用戶信息,以實現(xiàn)其他特定的狀態(tài)管理和頁面信息的傳遞。

 ?。?)簡述Response對象。

  答:Response對象用來訪問所創(chuàng)建的并客戶端的響應(yīng),輸出信息到客戶端,它提供了標(biāo)識服務(wù)器和性能的HTTP變量,發(fā)送給瀏覽器的信息和在cookie中存儲的信息。它也提供了一系列用于創(chuàng)建輸出頁面的方法,如無所不在的Response . Write方法。

 ?。?)簡述Request對象。

  答:Request對象是用來獲取客戶端在請求一個頁面或傳送一個Form時提供的所有信息,這包括能夠標(biāo)識瀏覽器和用戶的HTTP變量,存儲在客戶端的cookie信息以及附在URL后面的值(查詢字符串或頁面中< Form>段中的HTML控件內(nèi)的值)。

 ?。?)簡述Application對象。

  答:在asp.net環(huán)境下,Application對象來自HttpApplictionStat類。它可以在多個請求、連接之間共享公用信息,也可以在各個請求連接之間充當(dāng)信息傳遞的管道。使用Application對象來保存我們希望傳遞的變量。由于在整個應(yīng)用程序生存周期中,Application對象都是有效的,所以在不同的頁面中都可以對它進(jìn)行存取,就像使用全局變量一樣方便。

 ?。?)簡述Session對象。

  答:Session對象就是服務(wù)器給客戶端的一個編號。當(dāng)一臺WEB服務(wù)器運行時,可能有若干個用戶瀏覽正在瀏覽這臺服務(wù)器上的網(wǎng)站。當(dāng)每個用戶首次與這臺WWW服務(wù)器建立連接時,他就與這個服務(wù)器建立了一個Session,同時服務(wù)器會自動為其分配一個SessionID,用以標(biāo)識這個用戶的唯一身份。特別說明的是Session對象的變量只是對一個用戶有效,不同的用戶的會話信息用不同的Session對象的變量存儲。在網(wǎng)絡(luò)環(huán)境下Session對象的變量是有生命周期的,如果在規(guī)定的時間沒有對Session對象的變量刷新,系統(tǒng)會終止這些變量。

 ?。?)簡述Server對象。

  答:Server對象提供對服務(wù)器上的方法和屬性的訪問。其中大多數(shù)方法和屬性是作為實用程序的功能服務(wù)的。Server對象也是Page對象的成員之一,主要提供一些處理頁面請求時所需的功能;例如建立COM對象、將字符串的編譯碼等工作。

  (7)簡述Cookie對象。

  答:cookie是一小塊由瀏覽器存貯在客戶端系統(tǒng)上(硬盤)的文本,是一種標(biāo)記。由WEB服務(wù)器嵌入用戶瀏覽器中,以便標(biāo)識用戶,且隨同每次用戶請求發(fā)往WEB服務(wù)器。Cookies的值比A S P.NET其他集合(例如Form和Server Variables )的值要復(fù)雜得多。

 ?。?)簡述Mail對象。

  答:ASP.NET被賦予了一個發(fā)送Email的新對象,名為SmtpMail,實際上Mail對象由System.Web.Mail類庫實現(xiàn)(Class Library)。這個類庫由MailMessage對象、SmtpMail對象、MailFormat對象和MailAttachment對象組成,它們相互合作,完成E-mail的發(fā)送。

 ?。?)簡述GET傳送方式。

*********************

ASP.NET中常用的內(nèi)置對象(一)

ASP.NET中常用的內(nèi)置對象及功能說明如下所示:
對 象 名         功  能  說  明
Page           用于操作整個頁面
Response         用于向瀏覽器輸出信息
Request          用于獲取來自瀏覽器的信息
Server                    提供服務(wù)器端的一些屬性和方法
Application                用于共享多個會話和請求之間的全局信息
Session                   用于存儲特定用戶的會話信息
Cookies                   用于設(shè)置或獲取Cookie信息
一..Page對象
Page對象是由System.Web.UI命名空間中的Page類來實現(xiàn)的,Page 類與擴(kuò)展名為.aspx 的文件相關(guān)聯(lián),這些文件在運行時被編譯為Page對象,并緩存在服務(wù)器內(nèi)存中。Page對象提供的常用屬性、方法及事件如下所示:
名  稱                功  能  說  明
IsPostBack屬性    獲取一個值,該值表示該頁是否正為響應(yīng)客戶端回發(fā)而加載
IsValid屬性      獲取一個值,該值表示頁面是否通過驗證
Application屬性    為當(dāng)前 Web 請求獲取 Application 對象。
Request屬性      獲取請求的頁的 HttpRequest 對象
Response屬性     獲取與 Page 關(guān)聯(lián)的 HttpResponse 對象。該對象使您得以將 HTTP 響應(yīng)數(shù)據(jù)發(fā)送到客戶端,并包含有關(guān)該響應(yīng)的信息。
Session屬性      獲取 ASP.NET 提供的當(dāng)前 Session 對象。
Server屬性      獲取 Server 對象,它是HttpServerUtility 類的實例。
DataBind方法     將數(shù)據(jù)源綁定到被調(diào)用的服務(wù)器控件及其所有子控件
RegisterClientScriptBlock方法  向頁面發(fā)出客戶端腳本塊
Init事件        當(dāng)服務(wù)器控件初始化時發(fā)生
Load事件       當(dāng)服務(wù)器控件加載到Page對象中時發(fā)生
Unload事件      當(dāng)服務(wù)器控件從內(nèi)存中卸載時發(fā)生

1.IsPostBack屬性
IsPostBack屬性用來獲取一個布爾值,如果該值為true,則表示當(dāng)前頁是為響應(yīng)客戶端回發(fā)(例如單擊按鈕)而加載,否則表示當(dāng)前頁是首次加載和訪問。
private void Page_Load(object sender, System.EventArgs e)
{
 if( !Page.IsPostBack )
 {
 Label1.Text = "頁面第一次加載!";
 }
 else
 {
 Label1.Text = "頁面第二次或第二次以上加載!";
   }
}
IsValid屬性
IsValid屬性用來獲取一個布爾值,該值指示頁驗證是否成功,如果頁驗證成功,則為 true;否則為 false。一般在包含有驗證服務(wù)器控件的頁面中使用,只有在所有驗證服務(wù)器控件都驗證成功時,IsValid屬性的值才為true。
private void Button_Click(Object Sender, EventArgs e)
    {
        if (Page.IsValid == true)  //也可寫成if (Page.IsValid)
        {
            mylabel.Text="您輸入的信息通過驗證!";
        }
        else
        {
            mylabel.Text="您的輸入有誤,請檢查后重新輸入!";
        }
    }
二.Request對象
Request對象是由類System.Web.HttpRequest來實現(xiàn)的。當(dāng)客戶請求ASP.NET頁面時,所有的請求信息,包括請求報頭、請求方法、客戶端基本信息等都被封裝在Request對象中,利用Request對象就可以讀取這些請求信息。Request對象常用的屬性和方法如下所示。
名  稱            功  能  說  明
Cookies屬性          獲取客戶端發(fā)送的Cookie的集合
Form屬性           獲取表單變量的集合
QueryString屬性        獲取HTTP查詢字符串變量集合
Form表單數(shù)據(jù)提交到服務(wù)器的方式有兩種:Get和Post方式。
i. . get是把參數(shù)數(shù)據(jù)隊列加到提交表單的ACTION屬性所指的URL中,值和表單內(nèi)各個字段一一對應(yīng),在URL中可以看到。post是通過HTTP post機(jī)制,將表單內(nèi)各個字段與其內(nèi)容放置在HTML HEADER內(nèi)一起傳送到ACTION屬性所指的URL地址。用戶看不到這個過程。
ii. . 對于get方式,服務(wù)器端用Request.QueryString獲取變量的值,對于post方式,服務(wù)器端用Request.Form獲取提交的數(shù)據(jù)。
iii.  get傳送的數(shù)據(jù)量較小,不能大于2KB。post傳送的數(shù)據(jù)量較大,一般被默認(rèn)為不受限制。但理論上,IIS4中最大量為80KB,IIS5中為100KB。
iv.  get安全性非常低,post安全性較高。
Form數(shù)據(jù)集合
使用Request的Form集合來獲取客戶端通過POST方法傳送的表單數(shù)據(jù),例如,服務(wù)器上有兩個網(wǎng)頁form.htm和do.aspx,form.htm中包含一個表單,表單傳送數(shù)據(jù)的方法為POST,并且表單提交到同一目錄下的do.aspx。form.htm的代碼如下:
<html>
    <head>
    <title>使用POST傳送數(shù)據(jù)</title>
    </head>
    <body>
    <form method="post" action="do.aspx">
    請輸入您的名字:<input type="text" name="mingzi"><br>
    <input type="submit" value="提交">
    </form>
    </body>
    </html>
在do.aspx中將使用Request.Form["mingzi"]來獲取用戶輸入的名字,do.aspx的代碼如下:
private void Page_Load(Object o,EventArgs e) 
//頁面加載后即顯示表單數(shù)據(jù)
    {
        string strmessage="您的名字為:";  //定義字符串變量并賦初值
        strmessage+= Request.Form["mingzi"];  //把表單數(shù)據(jù)串接到變量
        Response.Write(strmessage);//輸出變量
    }

QueryString數(shù)據(jù)集合
可以利用QueryString集合來獲取客戶端通過GET方法傳送的表單數(shù)據(jù),如果把form.htm中表單的method屬性值由POST改為GET,則在do.aspx中就需要通過Request.QueryString ["mingzi"]來獲取輸入的名字。因為GET方法傳送數(shù)據(jù)有一定的限制并且不安全,所以表單一般不使用GET方法。
private void Page_Load(object sender, System.EventArgs e)
  {
   if(Request.QueryString["mingzi"].ToString()!="")
    Response.Write("您的名字是:"+Request.QueryString["mingzi"].ToString());
  }
在Web應(yīng)用程序開發(fā)中,QueryString常用來獲取URL查詢字符串中變量的值,這與使用GET方法傳送表單數(shù)據(jù)的情況一樣。例如,客戶端使用如下地址請求:
http://localhost/doit.aspx?name=zhangsan&sex=nan   
或打開如下的超級鏈接:
<a href="
http://localhost/doit.aspx?name=zhangsan&sex=nan">doit.aspx</a>
在doit.aspx中就可以使用Request.QueryString["name"]和Request.QueryString["sex"]來獲取相應(yīng)的值zhangsan和nan。

******************************

本想寫一篇總結(jié)ASP.NET內(nèi)置對象的文章,結(jié)果發(fā)現(xiàn)網(wǎng)上有篇不錯的,就轉(zhuǎn)了過來

ASP.NET的內(nèi)置對象介紹
1.Response
2.Request
3.Server
4.Application
5.Session
6.Cooki

Request對象主要是讓服務(wù)器取得客戶端瀏覽器的一些數(shù)據(jù),包括從HTML表單用Post或者GET方法傳遞的參數(shù)、Cookie和用戶認(rèn)證。因為Request對象是Page對象的成員之一,所以在程序中不需要做任何的聲明即可直接使用;
其類名為 HttpRequest
屬性很多,但方法很少,只有一個BinaryRead()
1.使用Request.Form屬性獲取數(shù)據(jù)
通過該屬性,讀取<Form></Form>之間的表單數(shù)據(jù).注意:提交方式要設(shè)置為“Post”。
與Get方法相比較,使用Post方法可以將大量數(shù)據(jù)發(fā)送到服務(wù)器端
2.利用Request.QueryString屬性獲取數(shù)據(jù)
Request對象的QuerySting屬性可以獲取 HTTP 查詢字符串變量集合 。 通過該屬性,我們可以讀取地址信息 http://localhost/aaa.aspx?uid=tom&pwd=abc 其中標(biāo)識為紅色部分的數(shù)據(jù).
注意:提交方式要設(shè)置為“Get”
3.問題:Request.Form用于表單提交方式為Post的情況,而Request.QueryString用于表單提交方式為Get的情況,如果用錯,則獲取不到數(shù)據(jù)。
解決方法:利用Request(“元素名”)來簡化操作。
4.Request.ServerVariables("環(huán)境變量名稱")
類似的還有:UserHostAddress,Browser,Cookies,ContentType,IsAuthenticated
Item,Params

Response對象用語輸出數(shù)據(jù)到客戶端,包括向瀏覽器輸出數(shù)據(jù)、重定向瀏覽器到另一個URL或向瀏覽器輸出Cookie文件。
其類名為httpResponse
屬性和方法
Write() 向客戶端發(fā)送字符串信息
BufferOutPut屬性 是否使用緩存
Clear() 清除緩存
Flush() 強(qiáng)制輸出緩存的所有數(shù)據(jù)
Redirect() 網(wǎng)頁轉(zhuǎn)向地址
End() 終止當(dāng)前頁的運行
WriteFile() 讀取一個文件,并且寫入客戶端輸出流
(實質(zhì):打開文件,并且輸出到客戶端。)
1.Response.Write 變量數(shù)據(jù)或字符串
Response.Write (變量數(shù)據(jù)或字符串)
<%=…%>
Response.Write("<script language=javascript>alert('歡迎學(xué)習(xí)ASP.NET')</script>")
Response.Write("<script>window.open('WebForm2.aspx')</script>")
2.Response對象的Redirect方法將客戶端瀏覽器重定向到另外的URL上,即跳轉(zhuǎn)到另一個網(wǎng)頁。
例如:
Response.Redirect("http://www./")
3. Response.End() 終止當(dāng)前頁的運行
4.Response.WriteFile(FileName)
其中:
FileName 指代需向瀏覽器輸出的文件的文件名

Server對象提供對服務(wù)器上的方法和屬性進(jìn)行的訪問 .其類名稱是HttpServerUtility.
Server對象的主要屬性有:
MachineName:獲取服務(wù)器的計算機(jī)名稱。
ScriptTimeout:獲取和設(shè)置請求超時(以秒計)。
方法名稱 說明
CreateObject 創(chuàng)建 COM 對象的一個服務(wù)器實例。
Execute 執(zhí)行當(dāng)前服務(wù)器上的另一個aspx頁,執(zhí)行完該頁后再返回本頁繼續(xù)執(zhí)行
HtmlEncode 對要在瀏覽器中顯示的字符串進(jìn)行HTML編碼并返回已編碼的字符串。
HtmlDecode 對HTML編碼的字符串進(jìn)行解碼,并返回已解碼的字符串。
MapPath 返回與 Web 服務(wù)器上的指定虛擬路徑相對應(yīng)的物理文件路徑。
Transfer 終止當(dāng)前頁的執(zhí)行,并為當(dāng)前請求開始執(zhí)行新頁。
UrlEncode 將代表URL的字符串進(jìn)行編碼,以便通過 URL 從 Web 服務(wù)器到客戶端進(jìn)行可靠的 HTTP 傳輸。
UrlDecode 對已被編碼的URL字符串進(jìn)行解碼,并返回已解碼的字符串。
UrlPathEncode 對 URL 字符串的路徑部分進(jìn)行 URL 編碼,并返回已編碼的字符串。
編碼:
Server.HtmlEncode(“HTML代碼”)
解碼:
Server.HtmlDecode(“已編碼的HTML”)
1.Server對象的MapPath方法將虛擬路徑或相對于當(dāng)前頁的相對路徑轉(zhuǎn)化為Web 服務(wù)器上的物理文件路徑。
語法:Server.MapPath(“虛擬路徑”)
String FilePath
FilePath = Server.MapPath(“/”)
Response.Write(FilePath)

Application對象在實際網(wǎng)絡(luò)開發(fā)中的用途就是記錄整個網(wǎng)絡(luò)的信息,如上線人數(shù)、在線名單、意見調(diào)查和網(wǎng)上選舉等。在給定的應(yīng)用程序的多有用戶之間共享信息,并在服務(wù)器運行期間持久的保存數(shù)據(jù)。而且Application對象還有控制訪問應(yīng)用層數(shù)據(jù)的方法和可用于在應(yīng)用程序啟動和停止時觸發(fā)過程的事件。
1.使用Application對象保存信息
使用Application對象保存信息
Application(“鍵名”) = 值

Application(“鍵名”,值)
獲取Application對象信息
變量名 = Application(“鍵名”)
或:變量名 = Application.Item(“鍵名”)
或:變量名 = Application.Get(“鍵名”)
更新Application對象的值
Application.Set(“鍵名”, 值)
刪除一個鍵
Application.Remove(“鍵名”, 值)
刪除所有鍵
Application.RemoveAll()
或Application.Clear()
2.有可能存在多個用戶同時存取同一個Application對象的情況。這樣就有可能出現(xiàn)多個用戶修改同一個Application命名對象,造成數(shù)據(jù)不一致的問題。
HttpApplicationState 類提供兩種方法 Lock 和 Unlock,以解決對Application對象的訪問同步問題,一次只允許一個線程訪問應(yīng)用程序狀態(tài)變量。
關(guān)于鎖定與解鎖
鎖定:Application.Lock()
訪問:Application(“鍵名”) = 值
解鎖:Application.Unlock()
注意:Lock方法和UnLock方法應(yīng)該成對使用。
可用于網(wǎng)站訪問人數(shù),聊天室等設(shè)備
3. 使用Application事件
在ASP.NET 應(yīng)用程序中可以包含一個特殊的可選文件——Global.asax 文件,也稱作 ASP.NET 應(yīng)用程序文件,它包含用于響應(yīng) ASP.NET或HTTP模塊引發(fā)的應(yīng)用程序級別事件的代碼。
Global.asax 文件提供了7個事件,其中5個應(yīng)用于Application對象

事件名稱 說明
Application_Start 在應(yīng)用程序啟動時激發(fā)
Application_BeginRequest 在每個請求開始時激發(fā)
Application_AuthenticateRequest 嘗試對使用者進(jìn)行身份驗證時激發(fā)
Application_Error 在發(fā)生錯誤時激發(fā)
Application_End 在應(yīng)用程序結(jié)束時激發(fā)

Session即會話,是指一個用戶在一段時間內(nèi)對某一個站點的一次訪問。
Session對象在.NET中對應(yīng)HttpSessionState類,表示“會話狀態(tài)”,可以保存與當(dāng)前用戶會話相關(guān)的信息。
Session對象用于存儲從一個用戶開始訪問某個特定的aspx的頁面起,到用戶離開為止,特定的用戶會話所需要的信息。用戶在應(yīng)用程序的頁面切換時,Session對象的變量不會被清除。
對于一個Web應(yīng)用程序而言,所有用戶訪問到的Application對象的內(nèi)容是完全一樣的;而不同用戶會話訪問到的Session對象的內(nèi)容則各不相同。 Session可以保存變量,該變量只能供一個用戶使用,也就是說,每一個網(wǎng)頁瀏覽者都有自己的Session對象變量,即Session對象具有唯一性。
(1)將新的項添加到會話狀態(tài)中
語法格式為:
Session ("鍵名") = 值
或者
Session.Add( "鍵名" , 值)
(2)按名稱獲取會話狀態(tài)中的值
語法格式為:
變量 = Session ("鍵名")
或者
變量 = Session.Item("鍵名")
(3)刪除會話狀態(tài)集合中的項
語法格式為:
Session.Remove("鍵名")
(4)清除會話狀態(tài)中的所有值
語法格式為:
Session.RemoveAll()
或者
Session.Clear()
(5)取消當(dāng)前會話
語法格式為:
Session.Abandon()
(6)設(shè)置會話狀態(tài)的超時期限,以分鐘為單位。
語法格式為:
Session.TimeOut = 數(shù)值
Global.asax 文件中有2個事件應(yīng)用于Session對象
事件名稱 說明
Session_Start 在會話啟動時激發(fā)
Session_End 在會話結(jié)束時激發(fā)

Cookie就是Web服務(wù)器保存在用戶硬盤上的一段文本。Cookie允許一個Web站點在用戶的電腦上保存信息并且隨后再取回它。信息的片斷以‘鍵/值’對的形式存儲。
Cookie是保存在客戶機(jī)硬盤上的一個文本文件,可以存儲有關(guān)特定客戶端、會話或應(yīng)用程序的信息,在.NET中對應(yīng)HttpCookie類。
有兩種類型的Cookie:會話Cookie(Session Cookie)和持久性Cookie。前者是臨時性的,一旦會話狀態(tài)結(jié)束它將不復(fù)存在;后者則具有確定的過期日期,在過期之前Cookie在用戶的計算機(jī)上以文本文件的形式存儲。
在服務(wù)器上創(chuàng)建并向客戶端輸出Cookie可以利用Response對象實現(xiàn)。
Response對象支持一個名為Cookies的集合,可以將Cookie對象添加到該集合中,從而向客戶端輸出Cookie。
通過Request對象的Cookies集合來訪問Cookie

**********************

本章主要介紹ASP.NET的內(nèi)置對象及ASP.NET應(yīng)用程序的配置,并在最后一節(jié)介紹ASP.NET網(wǎng)站的預(yù)編譯和編譯。ASP.NET的內(nèi)置對象包括Request、Response、Server、Application、Session、Cookie等。應(yīng)用程序的配置部分主要包括了解ASP.NET應(yīng)用程序配置、基本配置元素、自定義應(yīng)用程序設(shè)置的配置和檢索等。下面將分別對這些內(nèi)容進(jìn)行闡述。

14.1  ASP.NET內(nèi)置對象

ASP.NET提供了許多內(nèi)置對象,前面所使用的Response對象就是其中一個。這些對象提供了相當(dāng)多的功能,例如,可以在兩個網(wǎng)頁之間傳遞變量、輸出數(shù)據(jù),以及記錄變量值等。這些對象在ASP時代已經(jīng)存在,到了ASP.NET環(huán)境下,這些功能仍然可以使用。而且,它們的種類更多,功能也更強(qiáng)大。

ASP.NET內(nèi)置對象是由IIS控制臺初始化的ActiveX DLL組件。因為IIS可以初始化這些內(nèi)置組件用于ASP.NET中,所以用戶也可以直接引用這些組件來實現(xiàn)自己的編程,即可以在應(yīng)用程序中,通過引用這些組件來實現(xiàn)訪問ASP.NET內(nèi)置對象的功能。

本節(jié)將對ASP.NET的這些內(nèi)置對象,以及Cache對象和Global文件進(jìn)行詳細(xì)的講解。

14.1.1  Response對象

Response對象是HttpResponse類的一個實例。該類主要是封裝來自ASP.NET操作的HTTP響應(yīng)信息。

1.Response對象的屬性

Response對象的屬性如表14-1所示。

表14-1  Response對象的屬性

   

   

   

BufferOutput

獲取或設(shè)置一個值,該值指示是否緩沖輸出,并在完成處理整個頁之后將其發(fā)送

如果緩沖了到客戶端的輸出,則為true;否則為false。默認(rèn)為true

續(xù)表 

   

   

  

Cache

獲取Web頁的緩存策略(過期時間、保密性、變化子句)

包含有關(guān)當(dāng)前響應(yīng)的緩存策略信息的HttpCachePolicy對象

Charset

獲取或設(shè)置輸出流的HTTP字符集

輸出流的HTTP字符集

IsClientConnected

獲取一個值,通過該值指示客戶端是否仍連接在服務(wù)器上

如果客戶端當(dāng)前仍在連接,則為true;否則為false

實例14-1:使用緩沖區(qū)

由于Response對象的BufferOutput屬性默認(rèn)為True,所以要輸出到客戶端的數(shù)據(jù)都暫時存儲在緩沖區(qū)內(nèi),等到所有的事件程序,以及所有的頁面對象全部解譯完畢后,才將所有在緩沖區(qū)中的數(shù)據(jù)送到客戶端的瀏覽器。下面的例子將演示緩沖區(qū)是如何工作的。

<%

Response.Write("緩存已清除" + "<Br>");

%>

<Script Language="C#" Runat="Server">

void Page_Load(Object sender, EventArgs e)

{

Response.Write("緩存清除前" + "<Br>");

Response.Clear();

}

</Script>

上述程序代碼實例首先在“Page_Load”事件中送出“緩存清除前”這一行,此時的數(shù)據(jù)存在緩沖區(qū)中。接著使用Response對象的Clear方法將緩沖區(qū)的數(shù)據(jù)清除,所以剛剛送出的字符串已經(jīng)被清除。然后IIS開始讀取HTML組件的部分,并將結(jié)果送至客戶端的瀏覽器。由執(zhí)行結(jié)果只出現(xiàn)“緩存已清除”可知,使用Clear方法之前的數(shù)據(jù)并沒有出現(xiàn)在瀏覽器上,所以程序開始時是存在緩沖區(qū)內(nèi)的。如果在相同的程序中加入“Response.BufferOutput=false”:

<%

Response.Write("清除之后的數(shù)據(jù)<Br>");

%>

<Script Language="C#" Runat="Server">

void Page_Load(Object sender, EventArgs e)

{

Response.BufferOutput=false;

Response.Write("清除緩沖區(qū)之前的數(shù)據(jù)" + "<Br>");

Response.Clear();

}

</Script>

可以發(fā)現(xiàn),執(zhí)行的結(jié)果并沒有因為使用Clear方法而將緩沖區(qū)的數(shù)據(jù)清除,這表明數(shù)據(jù)是直接輸出而沒有存放在緩沖區(qū)內(nèi)。

2.Response對象的方法

Response對象可以輸出信息到客戶端,包括直接發(fā)送信息給瀏覽器、重定向瀏覽器到另一個URL或設(shè)置cookie的值。表14-2列舉了幾個常用的方法。

表14-2  Response對象的方法

   

   

Write

將指定的字符串或表達(dá)式的結(jié)果寫到當(dāng)前的HTTP輸出

End

停止頁面的執(zhí)行并得到相應(yīng)結(jié)果

Clear

用來在不將緩存中的內(nèi)容輸出的前提下,清空當(dāng)前頁的緩存,僅當(dāng)使用了緩存輸出時,才可以利用Clear方法

Flush

將緩存中的內(nèi)容立即顯示出來。該方法有一點和Clear方法一樣,它在腳本前面沒有將Buffer屬性設(shè)置為True時會出錯。和End方法不同的是,該方法調(diào)用后,該頁面可繼續(xù)執(zhí)行

Redirect

使瀏覽器立即重定向到程序指定的URL

ASP.NET中引用對象方法的語法是“對象名.方法名”?!胺椒ā本褪乔度氲綄ο蠖x中的程序代碼,它定義對象怎樣去處理信息。使用嵌入的方法,對象便知道如何去執(zhí)行任務(wù),而不用提供額外的指令。以下將通過幾個小例子來講解Response對象的常用方法。

實例14-2:使用Response.write,向客戶端發(fā)送信息

for(int i=1;i<=500;i++)

{

 Response.Write("i= "+i+"<BR>");

}

本例使用“write”方法,向屏幕輸出500個值。

實例14-3:使用Response.End方法調(diào)試程序

End方法可以停止當(dāng)前頁面的執(zhí)行,基于這個原因,可以結(jié)合Response.write方法輸出當(dāng)前頁面上的某個變量、數(shù)組值。

<form id="Form1" method="post" runat="server">

    輸入一個數(shù)值:<asp:TextBox id="txtVar" runat="server"></asp:TextBox>

<asp:Button id="btnSubmit" runat="server" Text="計算該值的平方值" onclick="btnSubmit_Click"></asp:Button>

</form>

<Script Language="C#" Runat="Server">

void btnSubmit_Click(Object sender, EventArgs e)

{

    int N = int.Parse(Request.Form["txtVar"].ToString());

    Response.Write("N=" + N + "<br>");

    Response.Write("該值的平方值是:" + N*N);

}

</Script>

運行上面的代碼,結(jié)果如圖14-1所示。

圖14-1  使用Response.End調(diào)試程序

輸入一個值“6”,然后單擊“計算該值的平方值”按鈕,屏幕將顯示如下結(jié)果:

N=6

該值的平方值是:36

在代碼中加上“Response.End()”,代碼如下:

<Script Language="C#" Runat="Server">

void btnSubmit_Click(Object sender, EventArgs e)

{

    int N = int.Parse(Request.Form["txtVar"].ToString());

    Response.Write("N=" + N + "<br>");

Response.End();

    Response.Write("該值的平方值是:" + N*N);

}

</Script>

這時再運行代碼,將只會顯示:

N=6

實驗證明,“Response.End()”方法停止了當(dāng)前頁面的執(zhí)行。這僅僅是一個小例子,讀者可以依此類推,在程序中使用End方法進(jìn)行調(diào)試。不過千萬要記住調(diào)試完代碼后,不要忘記把調(diào)試用的“Response.End()”刪掉。

實例14-4:使用Redirect方法進(jìn)行頁面重定向

在網(wǎng)頁編程中,經(jīng)常會遇到在程序執(zhí)行到某個位置進(jìn)行頁面調(diào)轉(zhuǎn)的情況。Response.Redirect方法可以滿足這種需求,例如代碼:

Response.Redirect("http://www.163.com");

執(zhí)行該代碼,頁面將跳轉(zhuǎn)到網(wǎng)易163的主頁。

14.1.2  Request對象

Request對象是HttpRequest類的一個實例。它能夠讀取客戶端在Web請求期間發(fā)送的HTTP值。

1.Request對象的屬性

Request對象的屬性如表14-3所示。

表14-3  Request對象的屬性

   

   

  

QueryString

獲取 HTTP 查詢字符串變量集合

NameValueCollection對象

Path

獲取當(dāng)前請求的虛擬路徑

當(dāng)前請求的虛擬路徑

UserHostAddress

獲取遠(yuǎn)程客戶端的 IP 主機(jī)地址

遠(yuǎn)程客戶端的IP地址

Browser

獲取有關(guān)正在請求的客戶端的瀏覽器功能的信息

HttpBrowserCapabilities對象

實例14-5:獲取QueryString值

程序中,經(jīng)常可以使用QueryString來獲得從上一個頁面?zhèn)鬟f來的字符串參數(shù)。例如,在頁面1中創(chuàng)建一個連接,指向頁面2,并用QueryString來查詢兩個變量:

<a href="Page2.aspx?ID=6&Name=Wang">查看</a>

在頁面2中接收到從頁面1中傳過來的兩個變量:

<Script Language="C#" Runat="Server">

void Page_Load(object sender, System.EventArgs e)

{

    Response.Write("變量ID的值:" + Request.QueryString["ID"] +"<br>");

    Response.Write("變量Name的值:" + Request.QueryString["Name"]);

}

</Script>

運行上面代碼結(jié)果如下:

變量ID的值:6

變量Name的值:Wang

上面的例子可以成功地得到QueryString的值。

用類似方法,可以獲取Form,Cookies,SeverVaiables的值。調(diào)用方法都是:

Request.Collectlon[”VariabLe”]

Collectlon包括QueryString,F(xiàn)orM,Cookies,SeverVaiables四種集合,VariabLe為要查詢的關(guān)鍵字。不過,這里的Collectlon是可以省略的,也就是說,Request["Variable"]與Request.Collection["Variable"]這兩種寫法都是允許的。如果省略了Collection,那么Request對象會依照QueryString,F(xiàn)orm,Cookies,SeverVaiables的順序查找,直至發(fā)現(xiàn)Variable所指的關(guān)鍵字并返回其值,如果沒有發(fā)現(xiàn)其值,方法則返回空值(Null)。

不過,為了優(yōu)化程序的執(zhí)行效率,建議最好還是使用Collection,因為過多地搜索就會降低程序的執(zhí)行效率。

2.Request對象的方法

Request對象的方法如表14-4所示。

表14-4  Request對象的方法

   

   

BinaryRead

執(zhí)行對當(dāng)前輸入流進(jìn)行指定字節(jié)數(shù)的二進(jìn)制讀取

MapPath

為當(dāng)前請求將請求的 URL 中的虛擬路徑映射到服務(wù)器上的物理路徑

實例14-6:獲取文件的物理路徑

Request.MapPath("FileName");

可以通過這條語句來得到某個文件的實際物理位置,這個方法常常用在需要使用實際路徑的地方。

14.1.3  Application對象

Application對象是HttpApplicationState類的一個實例。

HttpApplicationState類的單個實例,將在客戶端第一次從某個特定的ASP.NET應(yīng)用程序虛擬目錄中請求任何URL資源時創(chuàng)建。對于Web服務(wù)器上的每個ASP.NET應(yīng)用程序,都要創(chuàng)建一個單獨的實例。然后通過內(nèi)部Application對象公開對每個實例的引用。Application對象有如下特點:

— 數(shù)據(jù)可以在Application對象內(nèi)部共享,因此一個Application對象可以覆蓋多個用戶。

— 一個Application對象包含事件,可以觸發(fā)某些Applicatin對象腳本。

— 個別Application對象可以用Internet Service Manager來設(shè)置而獲得不同屬性。

— 單獨的Application對象可以隔離出來在它們自己的內(nèi)存中運行,這就是說,如果一個人的Application遭到破壞,就不會影響其他人。

— 可以停止一個Application對象(將其所有組件從內(nèi)存中驅(qū)除)而不會影響到其他應(yīng)用程序。

一個網(wǎng)站可以有不止一個Application對象。典型情況下,可以針對個別任務(wù)的一些文件創(chuàng)建個別的Application對象。例如,可以建立一個Application對象來適用于全部公用用戶,而再創(chuàng)建另外一個只適用于網(wǎng)絡(luò)管理員的Application對象。

Application對象使給定應(yīng)用程序的所有用戶之間共享信息,并且在服務(wù)器運行期間持久地保存數(shù)據(jù)。因為多個用戶可以共享一個Application對象,所以必須要有Lock和Unlock方法,以確保多個用戶無法同時改變某一屬性。Application對象成員的生命周期止于關(guān)閉IIS或使用Clear方法清除。

1.Application對象的屬性

Application對象的屬性如表14-5所示。

表14-5  Application對象的屬性

   

   

  

AllKeys

獲取HttpApplicationState集合中的訪問鍵

HttpApplicationState對象名的字符串?dāng)?shù)組

Count

獲取HttpApplicationState集合中的對象數(shù)

集合中的Item對象數(shù)。默認(rèn)為0

2.Application對象的方法

Application對象的方法如表14-6所示。

表14-6  Application對象的方法

   

   

Add

新增一個新的Application對象變量

Clear

清除全部的Application對象變量

Get

使用索引關(guān)鍵字或變數(shù)名稱得到變量值

GetKey

使用索引關(guān)鍵字來獲取變量名稱

Lock

鎖定全部的Application變量

Remove

使用變量名稱刪除一個Application對象

RemoveAll

刪除全部的Application對象變量

Set

使用變量名更新一個Application對象變量的內(nèi)容

UnLock

解除鎖定的Application變量

使用Application對象的語法如下所示:

Application("變量名")="變量值"

實例14-7:設(shè)置、獲取Application對象的內(nèi)容

代碼如下:

<script language="C#" runat="server">

void Page_Load(object sender, System.EventArgs e)

{

    Application.Add("App1","Value1");

    Application.Add("App2","Value2");

    Application.Add("App3","Value3");

   

    int N;

    for(N=0;N<Application.Count;N++)

    {

        Response.Write("變量名:"+ Application.GetKey(N));

        Response.Write("變量值:"+ Application.Get(N) +"<br>");

    }

     Application.Clear();

}

</script>

在本例中,首先通過Add方法添加三個Application對象,并賦以初值,接著通過Count屬性得到Application對象的數(shù)量,然后通過循環(huán)操作GetKey方法和Get方法分別得到新增對象的“索引”和“索引”所對應(yīng)的“值”。

執(zhí)行上面代碼,得到如下結(jié)果:

變量名:App1變量值:Value1

變量名:App2變量值:Value2

變量名:App3變量值:Value3

實例14-8:Application對象的加鎖與解鎖

Lock方法可以阻止其他客戶修改存儲在Application對象中的變量,以確保在同一時刻僅有一個客戶可修改和存取Application變量。如果用戶沒有明確調(diào)用Unlock方法,則服務(wù)器將在頁面文件結(jié)束或超時即可解除對Application對象的鎖定。

Unlock方法可以使其他客戶端在使用Lock方法鎖住Application對象后,修改存儲在該對象中的變量。如果未顯式地調(diào)用該方法,Web服務(wù)器將在頁面文件結(jié)束或超時后解鎖Application對象。

使用方法如下:

Application.Lock();

Application["變量名"]="變量值";

Application.UnLock();

14.1.4  Session對象

Session對象是HttpSessionState的一個實例。該類為當(dāng)前用戶會話提供信息,還提供對可用于存儲信息的會話范圍的緩存的訪問,以及控制如何管理會話的方法。

Session的發(fā)明是填補HTTP協(xié)議的局限,HTTP協(xié)議工作過程是,用戶發(fā)出請求,服務(wù)器端做出響應(yīng),這種用戶端和服務(wù)器端之間的聯(lián)系都是離散的,非連續(xù)的。在HTTP協(xié)議中沒有什么能夠允許服務(wù)器端來跟蹤用戶請求的。在服務(wù)器端完成響應(yīng)用戶的請求后,服務(wù)器端不能持續(xù)與該瀏覽器保持連接。從網(wǎng)站的觀點上看,每一個新的請求都是單獨存在的,因此,當(dāng)用戶在多個主頁間轉(zhuǎn)換時,就根本無法知道他的身份。

可以使用Session對象存儲特定用戶會話所需的信息。這樣,當(dāng)用戶在應(yīng)用程序的Web頁之間跳轉(zhuǎn)時,存儲在Session對象中的變量將不會丟失,而是在整個用戶會話中一直存在下去。

當(dāng)用戶請求來自應(yīng)用程序的Web頁時,如果該用戶還沒有會話,則Web服務(wù)器將自動創(chuàng)建一個Session對象。當(dāng)會話過期或被放棄后,服務(wù)器將中止該會話。

當(dāng)用戶第一次請求給定的應(yīng)用程序中的aspx文件時,ASP.NET將生成一個SessionID。SessionID是由一個復(fù)雜算法生成的號碼,它唯一標(biāo)識每個用戶會話。在新會話開始時,服務(wù)器將Session ID作為一個cookie存儲在用戶的Web瀏覽器中。

在將SessionID cookie存儲于用戶的瀏覽器之后,即使用戶請求了另一個.aspx文件,或請求了運行在另一個應(yīng)用程序中的.aspx文件,ASP.NET仍會重用該cookie跟蹤會話。與此相似,如果用戶故意放棄會話或讓會話超時,然后再請求另一個.aspx文件,那么ASP.NET將以同一個cookie開始新的會話。只有當(dāng)服務(wù)器管理員重新啟動服務(wù)器,或用戶重新啟動Web瀏覽器時,此時存儲在內(nèi)存中的SessionID設(shè)置才被清除,用戶將會獲得新的SessionID cookie。

通過重用SessionID cookie,Web應(yīng)用程序?qū)l(fā)送給用戶瀏覽器的cookie數(shù)量降為最低。另外,如果用戶決定該Web應(yīng)用程序不需要會話管理,就可以不讓W(xué)eb應(yīng)用程序跟蹤會話和向用戶發(fā)送SessionID。

Session對象最常見的一個用法就是存儲用戶的首選項。例如,如果用戶指明不喜歡查看圖形,另外其還經(jīng)常被用在鑒別客戶身份的程序中。要注意的是,會話狀態(tài)僅在支持cookie的瀏覽器中保留,如果客戶關(guān)閉了cookies選項,Session也就不能發(fā)揮作用了。

ASP.NET的Sessions非常好用,能夠利用Session對象來對Session全面控制,如果需要在一個用戶的Session中存儲信息,只需要簡單地直接調(diào)用Session對象就可以了,下面就是個例子:

Session("Myname")=Response.form("Username");

Session("Mycompany")=Response.form("Usercompany");

應(yīng)注意的是,Session對象是與特定用戶相聯(lián)系的。針對某一個用戶賦值的Session對象是和其他用戶的Session對象完全獨立的,不會相互影響。換句話說,這里面針對每一個用戶保存的信息是每一個用戶自己獨享的,不會產(chǎn)生共享情況。

很明顯,對于不同的用戶,Session對象的Myname變量和Mycompany變量各自是不同的,當(dāng)每個人在網(wǎng)站的不同主頁間瀏覽時,這種針對個人的變量會一直保留,這樣作為身份認(rèn)證是十分有效的。

1.Session對象的屬性

Session對象的屬性如表14-7所示。

表14-7  Session對象的屬性

   

  

  

Count

獲取會話狀態(tài)集合中Session對象的個數(shù)

Session對象的個數(shù)

TimeOut

獲取并設(shè)置在會話狀態(tài)提供程序終止會話之前各請求之間所允許的超時期限

超時期限(以分鐘為單位)

SessionID

獲取用于標(biāo)識會話的唯一會話ID

會話ID

實例14-9:獲取Session對象的個數(shù)

Count屬性可以幫助統(tǒng)計正在使用的Session對象的個數(shù),語句非常簡單,示例如下:

Response.Write(Session.Count);

實例14-10:設(shè)置Session對象的生存期

每一個客戶端連接服務(wù)器后,服務(wù)器端都要建立一個獨立的Session,并且需要分配額外的資源來管理這個Session,但如果客戶端因某些原因,例如,去忙其他的工作,停止了任何操作,但沒有關(guān)閉瀏覽器,那么這種情況下,服務(wù)器端依然會消耗一定的資源來管理Session,這就造成了對服務(wù)器資源的浪費,降低了服務(wù)器的效率。所以,可以通過設(shè)置Session生存期,以減少這種對服務(wù)器資源的浪費。

要更改Session的有效期限,只要設(shè)定TimeOut屬性即可;TimeOut屬性的默認(rèn)值是20分鐘。

<Html>

<Form Runat="Server" ID="Form1">

<Asp:Button Id="Button1" Text="演示" OnClick="Button1_Click" Runat="Server" />

目前時間:<Asp:Label Id="Label1" Runat="Server" />

<P>

第一個Session的值:<Asp:Label Id="Label2" Runat="Server" /><Br>

第二個Session的值:<Asp:Label Id="Label3" Runat="Server" /><Br>

</Form>

<Script Language="c#" Runat="Server">

void Page_Load(object sender, System.EventArgs e)

{

    if(!Page.IsPostBack)

    {

        Session["Session1"]="Value1";

        Session["Session2"]="Value2";

        Session.Timeout=1;

        DateTime now=DateTime.Now;

        string format="HH:mm:ss";

        Label1.Text=now.ToString(format);

        Label2.Text=Session["Session1"].ToString();

        Label3.Text=Session["Session2"].ToString();

    }

}

void Button1_Click(object sender, System.EventArgs e)

{

    DateTime now=DateTime.Now;

    string format="HH:mm:ss";

    Label1.Text=now.ToString(format);

    Label2.Text=Session["Session1"].ToString();

    Label3.Text=Session["Session2"].ToString();

}

</Script>

</Html>

在本例中,通過Timeout屬性設(shè)置了Session的生存期為1分鐘。運行上面代碼,顯示結(jié)果如圖14-2所示。

圖14-2  設(shè)置Session對象的生存期

一分鐘后,單擊“演示”按鈕,頁面會出現(xiàn)錯誤,提示

Label2.Text=Session["Session1"].ToString();   

Label3.Text=Session["Session2"].ToString();

這兩句代碼錯誤,為什么會這樣呢?原因就在于,Session的生存期限超過了一分鐘,已經(jīng)無法獲得Session["Session1"]和Session["Session2"]的值。

2.Session對象的方法

Session對象的方法如表14-8所示:

表14-8  Session對象的方法

   

   

Add

新增一個Session對象

Clear

清除會話狀態(tài)中的所有值

Remove

刪除會話狀態(tài)集合中的項

RemoveAll

清除所有會話狀態(tài)值

實例14-11:通過Add方法設(shè)置Session對象

通過Add方法可以設(shè)置Session對象的值,語法如下:

Session.Add("變量名",變量值);

在具體應(yīng)用中,可以這樣使用:

int userId = 1;

string userName = "test";

string userPwd = "sdgtrertkl";

Session.Add("userId",userId);

Session.Add("userName", userName);

Session.Add("userPwd", userPwd);

在上面例子中創(chuàng)建了userId,userName,userPwd三個Session來存儲用戶的登錄信息。程序隨時都可以通過這三個Session對象來查看用戶的連接狀態(tài),這是實際的項目中最常見的Session應(yīng)用。

需要注意的是,也可以不使用Add方法來設(shè)置Session對象,語法如下:

Session["變量名"]=變量值;

這樣,上面的例子就可以改為:

Session["userId"] = userId;

Session["userName"] = userName;

Session["userPwd"] = userPwd;

需要指出的是,以上兩種語句在作用上是相同的,讀者可以根據(jù)自己的習(xí)慣來使用。

14.1.5  Server對象

Server對象是HttpServerUtility的一個實例。該對象提供對服務(wù)器上的方法和屬性的訪問。

1.Server對象的屬性

Server對象的屬性如表14-9所示:

表14-9  Server對象的屬性

   

   

  

MachineName

獲取服務(wù)器的計算機(jī)名稱

本地計算機(jī)的名稱

ScriptTimeout

獲取和設(shè)置請求超時

請求的超時設(shè)置(以秒計)

實例14-12:返回服務(wù)器計算機(jī)名稱

通過Server對象的MachineName屬性來獲取服務(wù)器計算機(jī)的名稱,示例如下:

<Script Language="c#" Runat="Server">

void Page_Load(object sender, System.EventArgs e)

{

    String ThisMachine;

    ThisMachine = Server.MachineName;

    Response.Write(ThisMachine);

}

</Script>

實例14-13:設(shè)置客戶端請求的超時期限

用法如下:

Server.ScriptTimeout = 60;

本例中,將客戶端請求超時期限設(shè)置為60秒,如果60秒內(nèi)沒有任何操作,服務(wù)器將斷開與客戶端的連接。

2.Server對象的方法

Server對象的方法如表14-10所示:

表14-10  Server對象的方法

   

   

CreateObject

創(chuàng)建COM 對象的一個服務(wù)器實例

CreateObjectFromClsid

創(chuàng)建COM 對象的服務(wù)器實例,該對象由對象的類標(biāo)識符(CLSID)標(biāo)識

Execute

使用另一頁執(zhí)行當(dāng)前請求

Transfer

終止當(dāng)前頁的執(zhí)行,并為當(dāng)前請求開始執(zhí)行新頁

HtmlDecode

對已被編碼以消除無效HTML字符的字符串進(jìn)行解碼

HtmlEncode

對要在瀏覽器中顯示的字符串進(jìn)行編碼

MapPath

返回與Web服務(wù)器上的指定虛擬路徑相對應(yīng)的物理文件路徑

UrlDecode

對字符串進(jìn)行解碼,該字符串為了進(jìn)行HTTP傳輸而進(jìn)行編碼并在URL中發(fā)送到服務(wù)器

UrlEncode

編碼字符串,以便通過URLWeb服務(wù)器到客戶端進(jìn)行可靠的HTTP傳輸

實例14-14:利用HtmlEncode和HtmlDecode方法對網(wǎng)頁內(nèi)容編碼

當(dāng)想在網(wǎng)頁上顯示HTML標(biāo)簽時,若在網(wǎng)頁中直接輸出則會被瀏覽器解譯為HTML的內(nèi)容,所以要通過Server對象的HtmlEncode方法將它編碼再輸出;若要將編碼后的結(jié)果譯碼回原本的內(nèi)容,則使用HtmlDecode方法。下列程序代碼范例使用HtmlEncode方法將“<B>HTML內(nèi)容</B>”編碼后輸出至瀏覽器,再利用HtmlDecode方法將把編碼后的結(jié)果譯碼還原:

<html>

<Script Language="c#" Runat="Server">

void Page_Load(object sender, System.EventArgs e)

{

    String strHtmlContent;

    strHtmlContent=Server.HtmlEncode("<B>HTML 內(nèi)容</B>");

    Response.Write(strHtmlContent);

    Response.Write("<P>");

    strHtmlContent=Server.HtmlDecode(strHtmlContent);

    Response.Write(strHtmlContent);

}

</Script>

</html>

運行上述示例輸出結(jié)果可以發(fā)現(xiàn),編碼后的HTML標(biāo)注變成了“<B>HTML內(nèi)容</B>”,這是因為“<B>”變成了“<B>”,“</B>”變成了“</B>”,所以才能在頁面中顯示HTML標(biāo)注。

實例14-15:使用URLEncode方法對URL進(jìn)行編碼

就像HTMLEncode方法使客戶可以將字符串翻譯成可接受的HTML格式一樣,Server對象的URLEncode方法可以根據(jù)URL規(guī)則對字符串進(jìn)行正確編碼。當(dāng)字符串?dāng)?shù)據(jù)以URL的形式傳遞到服務(wù)器時,在字符串中不允許出現(xiàn)空格,也不允許出現(xiàn)特殊字符。為此,如果希望在發(fā)送字符串之前進(jìn)行URL編碼,則可以使用Server. URLEncode方法。

該函數(shù)已被重載,語法如下:

對字符串進(jìn)行URL編碼,并返回已編碼的字符串。

public string UrlEncode(string);

URL對字符串進(jìn)行編碼,并將結(jié)果輸出發(fā)送到TextWriter輸出流。

public void UrlEncode(string, TextWriter);

例如下面例子:

<%Response.Write(Server.URLEncode("http://www.microsoft.com"))%>

產(chǎn)生如下輸出:

http %3A%2F%2Fwww%2Emicrosoft%2Ecom

利用QueryString在不同主頁間傳遞信息時,如果信息帶有空格或特殊字符,那么必須進(jìn)行Encode操作,因為如果不這樣做,很可能使得接受信息的那邊接受到一些所不期望的奇怪字符串。注意,不要對QueryString的名稱及等號進(jìn)行Encode操作,只需要將其值進(jìn)行Encode操作就可以了。

進(jìn)行了Encode操作后,效果如下:

Message=This+Query+String+has+been+URL+ENCODED%2E

用戶并不需要考慮對上面的字符串再進(jìn)行解碼,會自動進(jìn)行這樣的處理。例如,假設(shè)有這樣的腳本:

Request.QueryString("message");

這時,顯示結(jié)果為:

This Query String has been  URL encoded

實例14-16:建立虛擬路徑與服務(wù)器物理目錄間映射

使用MapPath方法可以將指定的相對或虛擬路徑映射到服務(wù)器上相應(yīng)的物理目錄上。

語法:

public string MapPath(string path);

參數(shù)Path表示指定要映射物理目錄的相對或虛擬路徑。若Path以一個正斜杠(/)或反斜杠(\)開始,則MapPath方法返回路徑時將Path視為完整的虛擬路徑。若Path不是以斜杠開始,則MapPath方法返回同頁面文件中已有的路徑相對的路徑。這里需要注意的是,MapPath方法不檢查返回的路徑是否正確或在服務(wù)器上是否存在。

對于下列示例,文件data.txt和包含下列腳本的test.aspx文件都位于目錄C:\Inetpub\ wwwroot\aspx下。C:\Inetpub\wwwroot目錄被設(shè)置為服務(wù)器的宿主目錄。下列示例使用服務(wù)器變量PATH_INFO映射當(dāng)前文件的物理路徑。以下腳本:

Server.mappth(Request. ServerVariables("PATH_INFO"));

輸出:

c:\inetpub\wwwroot\asp\test.aspx

由于下列示例中的路徑參數(shù)不是以斜杠字符開始的,所以它們被相對映射到當(dāng)前目錄,此處是目錄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

14.1.6  Cookie對象

什么是Cookie呢?Cookie 是一小段文本信息,伴隨著用戶請求和頁面在Web服務(wù)器和瀏覽器之間傳遞。用戶每次訪問站點時,Web應(yīng)用程序都可以讀取Cookie包含的信息。

Cookie跟Session、Application類似,也是用來保存相關(guān)信息,但Cookie和其他對象的最大不同是,Cookie將信息保存在客戶端,而Session和Application是保存在服務(wù)器端。也就是說,無論何時用戶連接到服務(wù)器,Web站點都可以訪問cookie信息。這樣,既方便用戶的使用,也方便了網(wǎng)站對用戶的管理。

ASP.NET包含兩個內(nèi)部Cookie集合。通過HttpRequest的Cookies集合訪問的集合包含通過Cookie標(biāo)頭從客戶端傳送到服務(wù)器的Cookie。通過HttpResponse的Cookies集合訪問的集合包含一些新Cookie,這些Cookie在服務(wù)器上創(chuàng)建并以Set-Cookie標(biāo)頭的形式傳輸?shù)娇蛻舳恕?/p>

Cookie不是Page類的子類,所以在使用方法上跟Seesion和Application不同。

使用Cookie的優(yōu)點:

— 可配置到期規(guī)則。Cookie 可以在瀏覽器會話結(jié)束時到期,或者可以在客戶端計算機(jī)上無限期存在,這取決于客戶端的到期規(guī)則。

— 不需要任何服務(wù)器資源。Cookie存儲在客戶端并在發(fā)送后由服務(wù)器讀取。

— 簡單性。Cookie是一種基于文本的輕量結(jié)構(gòu),包含簡單的鍵值對。

— 數(shù)據(jù)持久性。雖然客戶端計算機(jī)上Cookie的持續(xù)時間取決于客戶端上的Cookie過期處理和用戶干預(yù),Cookie通常是客戶端上持續(xù)時間最長的數(shù)據(jù)保留形式。

使用Cookie的缺點:

— 大小受到限制。大多數(shù)瀏覽器對Cookie的大小有4096字節(jié)的限制,盡管在當(dāng)今新的瀏覽器和客戶端設(shè)備版本中,支持8192字節(jié)的Cookie大小已越發(fā)常見。

— 用戶配置為禁用。有些用戶禁用了瀏覽器或客戶端設(shè)備接收Cookie的能力,因此限制了這一功能。

— 潛在的安全風(fēng)險。Cookie可能會被篡改。用戶可能會操縱其計算機(jī)上的Cookie,這意味著會對安全性造成潛在風(fēng)險,或者導(dǎo)致依賴于Cookie的應(yīng)用程序失敗。另外,雖然Cookie只能將它們發(fā)送到客戶端的域訪問,歷史上黑客已經(jīng)發(fā)現(xiàn)從用戶計算機(jī)上的其他域訪問Cookie的方法。可以手動加密和解密Cookie,但這需要額外的編碼,并且因為加密和解密需要耗費一定的時間而影響應(yīng)用程序的性能。

1.Cookie對象的屬性

Cookie對象的屬性如表14-11所示:

表14-11  Cookie對象的屬性

  

   

  

Name

獲取或設(shè)置Cookie的名稱

Cookie的名稱

Value

獲取或設(shè)置CookieValue

CookieValue

Expires

獲取或設(shè)置Cookie的過期日期和時間

作為DateTime實例的Cookie過期日期和時間

Version

獲取或設(shè)置此Cookie符合的HTTP狀態(tài)維護(hù)版本

Cookie符合的HTTP狀態(tài)維護(hù)版本

2.Cookie對象的方法

Cookie對象的方法如表11-12所示:

表14-12  Cookie對象的方法

   

   

Add

新增一個Cookie變量

Clear

清除Cookie集合內(nèi)的變量

Get

通過變量名或索引得到Cookie的變量值

GetKey

以索引值來獲取Cookie的變量名稱

Remove

通過Cookie變量名來刪除Cookie變量

實例14-17:設(shè)置Cookie

下面的示例將創(chuàng)建名為“LastVisit”的新Cookie,將該Cookie的值設(shè)置為當(dāng)前日期和時間,并將其添加到當(dāng)前Cookie集合中,所有Cookie均通過HTTP輸出流在Set-Cookie頭中發(fā)送到客戶端。

HttpCookie MyCookie = new HttpCookie("LastVisit");

DateTime now = DateTime.Now;

MyCookie.Value = now.ToString();

MyCookie.Expires = now.AddHours(1);

Response.Cookies.Add(MyCookie);

運行上面例子,將會在用戶機(jī)器的Cookies目錄下建立如下內(nèi)容的文本文件:

mycookie

LastVisit

盡管上面的這個例子很簡單,但可以從中擴(kuò)展許多富有創(chuàng)造性的應(yīng)用程序。

實例14-18:獲取客戶端發(fā)送的Cookie信息

下面的示例是依次通過客戶端發(fā)送的所有Cookie,并將每個Cookie的名稱、過期日期、安全參數(shù)和值發(fā)送到HTTP輸出。

int loop1, loop2;

HttpCookieCollection MyCookieColl;

HttpCookie MyCookie;

MyCookieColl = Request.Cookies;

//把所有的cookie名放到一個字符數(shù)組中

String[] arr1 = MyCookieColl.AllKeys;

//用cookie名獲取單個cookie對象

for (loop1 = 0; loop1 < arr1.Length; loop1++)

{

   MyCookie = MyCookieColl[arr1[loop1]];

   Response.Write("Cookie: " + MyCookie.Name + "<br>");

   Response.Write("Expires: " + MyCookie.Expires + "<br>");

   Response.Write ("Secure:" + MyCookie.Secure + "<br>");

//將單個cookie的值放入一個對象數(shù)組

   String[] arr2 = MyCookie.Values.AllKeys;

//遍歷cookie值集合打印所有值 

   for (loop2 = 0; loop2 < arr2.Length; loop2++)

   {

      Response.Write("Value" + loop2 + ": " + arr2[loop2] + "<br>");

   }

14.1.7  Cache對象

對于每個應(yīng)用程序域均創(chuàng)建該類的一個實例,并且只要對應(yīng)的應(yīng)用程序域保持活動,該實例便保持有效。有關(guān)此類實例的信息通過HttpContext對象的Cache屬性或Page對象的Cache屬性來提供。

1.Cache對象的屬性

Cache對象的屬性如表14-13所示:

表14-13  Cache對象的屬性

   

   

  

Count

獲取存儲在緩存中的項數(shù)。當(dāng)監(jiān)視應(yīng)用程序性能或使用ASP.NET跟蹤功能時,此屬性可能非常有用

存儲在緩存中的項數(shù)

Item

獲取或設(shè)置指定鍵處的緩存項

表示緩存項的鍵的String對象

2.Cache對象的方法

Cache對象的方法如表14-14所示:

表14-14  Cache對象的屬性

   

   

Add

將指定項添加到 Cache 對象,該對象具有依賴項、過期和優(yōu)先級策略,以及一個委托(可用于在從 Cache 移除插入項時通知應(yīng)用程序)

Get

 Cache 對象檢索指定項

Remove

從應(yīng)用程序的 Cache 對象移除指定項

Insert

Cache對象插入項。使用此方法的某一版本改寫具有相同key參數(shù)的現(xiàn)有Cache

實例14-19:檢索為ASP.NET文本框服務(wù)器控件緩存的值

Get方法可以從Cache對象檢索指定項,其唯一的參數(shù)key表示要檢索的緩存項的標(biāo)識符。該方法返回檢索到的緩存項,未找到該鍵時為空引用。

下面的示例展示如何檢索為ASP.NET文本框服務(wù)器控件緩存的值。

Cache.Get("MyTextBox.Value");

實例14-20:移除Cache對象

Remove方法可以從應(yīng)用程序的Cache對象移除指定項,其唯一的參數(shù)key表示要移除的緩存項的String標(biāo)識符。該方法返回從Cache移除的項。如果未找到鍵參數(shù)中的值,則返回空引用。

下面的示例創(chuàng)建一個RemoveItemFromCache函數(shù)。調(diào)用此函數(shù)時,它使用Item屬性檢查緩存中是否包含與Key1鍵值相關(guān)的對象。如果包含,則調(diào)用Remove方法來移除該對象。

public void RemoveItemFromCache(Object sender, EventArgs e)

{

    if(Cache["Key1"] != null)

      Cache.Remove("Key1");

}

14.1.8  Global.asax

除了編寫界面代碼外,開發(fā)人員還可以將邏輯和事件處理代碼添加到他們的Web應(yīng)用程序中。此代碼不處理界面的生成,并且一般不為響應(yīng)個別頁請求而被調(diào)用。相反,它負(fù)責(zé)處理更高級別的應(yīng)用程序事件,如Application_Start,Application_End,Session_Start,Session_End等。開發(fā)人員使用位于特定Web應(yīng)用程序虛擬目錄樹根處的Global.asax文件來創(chuàng)作此邏輯。第一次激活或請求應(yīng)用程序命名空間內(nèi)的任何資源或URL時,ASP.NET自動分析該文件并將其編譯成動態(tài).NET框架類(此類擴(kuò)展了HttpApplication基類)。

第一次激活或請求應(yīng)用程序命名空間內(nèi)的任何資源URL時,ASP.NET分析Global.asax文件并將其動態(tài)編譯成.NET框架類。Global.asax文件被配置為自動拒絕任何直接URL請求,從而使外部用戶不能下載或查看內(nèi)部代碼。

通過在Global.asax文件中創(chuàng)作符合命名模式“Application_EventName(Appropriate EventArgumentSignature)”的方法,開發(fā)人員可以為HttpApplication基類的事件定義處理程序。例如:

<script language="C#" runat="server">

void Application_Start(object sender, EventArgs e) {

  // Application startup code goes here

}

</script>

如果事件處理代碼需要導(dǎo)入附加的命名空間,可以在.aspx頁中使用@ import指令,如下所示:

<%@ Import Namespace="System.Text" %>

第一次打開頁時,引發(fā)應(yīng)用程序和會話的Start事件:

void Application_Start(object sender, EventArgs e) {

  // Application startup code goes here

}

void Session_Start(object sender, EventArgs e) {

  Response.Write("Session is Starting...<br>");

  Session.Timeout = 1;

}

對每個請求都引起B(yǎng)eginRequest和EndRequest事件。刷新頁時,只顯示來自Begin-Request,EndRequest和Page_Load方法的消息。

靜態(tài)對象、.NET框架類和COM組件都可以使用對象標(biāo)記在Global.asax文件中定義。范圍可以是appinstance,session或application。appinstance范圍表示對象特定于Http-Application的一個實例并且不共享。

<object id="id" runat="server" class=".NET Framework class Name" scope=" appinstance"/>

<object id="id" runat="server" progid="COM ProgID" scope="session"/>

<object id="id" runat="server" classid="COM ClassID" scope="application"/>

請注意,Global.asax使用了微軟的HTML拓展<SCRIPT>標(biāo)記語法來限制腳本,這也就是說,必須用<SCRIPT>標(biāo)記來引用這兩個事件而不能用<%和%>符號引用。在Global.asax中不能有任何輸出語句,無論HTM的語法還是Response.Write方法都是不行的,Global.asax是任何情況下也不能進(jìn)行顯示的。

網(wǎng)上看到的 很好就貼了過來

    本站是提供個人知識管理的網(wǎng)絡(luò)存儲空間,所有內(nèi)容均由用戶發(fā)布,不代表本站觀點。請注意甄別內(nèi)容中的聯(lián)系方式、誘導(dǎo)購買等信息,謹(jǐn)防詐騙。如發(fā)現(xiàn)有害或侵權(quán)內(nèi)容,請點擊一鍵舉報。
    轉(zhuǎn)藏 分享 獻(xiàn)花(0

    0條評論

    發(fā)表

    請遵守用戶 評論公約

    類似文章 更多

    国产欧美高清精品一区| 欧洲精品一区二区三区四区| 日本东京热视频一区二区三区| 国产精品一区欧美二区| 日韩国产中文在线视频| 99热九九热这里只有精品| 日韩精品一区二区三区含羞含羞草| av一区二区三区天堂| 开心五月激情综合婷婷色| 国产成人免费高潮激情电| 亚洲av成人一区二区三区在线| 男人把女人操得嗷嗷叫| 日韩在线精品视频观看| 精品国产av一区二区三区不卡蜜 | 国产欧美日韩视频91| 午夜色午夜视频之日本| 亚洲一区二区三区四区| 国产成人免费高潮激情电 | 一区二区日韩欧美精品| 一级片黄色一区二区三区| 欧美精品久久一二三区| 中文字幕五月婷婷免费| 大香蕉精品视频一区二区| 国产乱人伦精品一区二区三区四区| 欧美人与动牲交a精品| 国产成人精品国产成人亚洲| 男女午夜福利院在线观看| 欧美一级黄片免费视频| 国产又粗又猛又爽又黄的文字| 男女午夜福利院在线观看| 亚洲国产性生活高潮免费视频| 91日韩欧美国产视频| 这里只有九九热精品视频| 国产一级特黄在线观看| 最新日韩精品一推荐日韩精品| 激情偷拍一区二区三区视频 | 亚洲最新中文字幕在线视频| 亚洲另类女同一二三区| 毛片在线观看免费日韩| 日韩欧美一区二区不卡看片| 中文字幕人妻一区二区免费|