準確地說,
asp.net 并沒有內置對象這一說,
jsp 里確實把 request、response 這些當作 jsp 的內置對象,這里只不過是借用了一下 jsp 的說法而已。
在 Web 中處于中心的是 Web 服務器,用來處理客戶端的 HTTP 請求。由于 HTTP 是一種無狀態的協議,也就是它并不記得上一次誰請求過它,不會主動去詢問客戶端,只有當客戶端主動請求之后,服務器才會響應。
1.【Request】
Request封裝了客戶端請求信息。Request的常見屬性如下:
屬性名 | 值類型 | 說明 |
applicationPath | String | 獲取請求的資源在網站上的根路徑 |
ContentEncoding | Encoding | 設置請求對象的編碼 |
Cookies | HttpCookieCollection | 客戶端發送到服務器的Cookie集合 |
QueryString | NameValueCollection | 當前請求的查詢字符串集合 |
UrlReferrer | Url | 獲取用戶由哪個url跳轉到當前頁面 |
2.【Response】
Response代表了服務器響應對象。每次客戶端發出一個請求的時候,服務器就會用一個響應對象來處理這個請求,處理完這個請求之后,服務器就會銷毀這個相應對象,以便繼續接受其它客服端請求。
Response常用屬性如下:
屬性名 | 值類型 | 說明 |
Charset | string | 表示輸出流的所使用的字符集 |
ContentEncoding | Encoding | 設置輸出流的編碼 |
ContentLength | Int | 輸出流的字節大小 |
ContentType | string | 輸出流的HTTP MIME類型 |
Cookies | HttpCookieCollection | 服務器發送到客戶端的Cookie集合 |
Output | TextWriter | 服務器響應對象的字符輸出流 |
RedirectLocation | string | 將當前請求重定向 |
Response常用方法
屬性名 | 返回值類型 | 說明 |
AppendCookie | void | 向響應對象的Cookie集合中增加一個Cookie |
Clear | void | 清空緩沖區中的所有內容輸出 |
Close | void | 關閉當前服務器到客戶端的連接 |
End | void | 終止響應,并且將緩沖區中的輸出發送到客戶端 |
Redirect | void | 重定向當前請求 |
3.【Server】
Server對象是用于獲取服務器的相關信息的對象。它常用方法如下:
屬性名 | 返回值類型 | 說明 |
Execute | void | 執行指定的資源,并且在執行完之后再執行本頁的代碼 |
HtmlDecode | string | 消除對特殊字符串編碼的影響 |
HtmlEncode | string | 對特殊字符串進行編碼 |
MapPath | string | 獲取指定相對路徑在服務器上的物理路徑 |
Transfer | void | 停止執行當前程序,執行指定的資源 |
UrlDecode | string | 對路徑字符串進行解碼 |
UrlEncode | string | 對路徑字符串進行編碼 |
Session對象用來保存與特定用戶相關的信息,Session中的數據保存在服務器端,在客戶端需要的時候創建Session,在客戶端不需要的時候銷毀Session,使它不再占用服務器內存。
在asp.net中Session的默認生命周期是20分鐘,也就是當我們在9:00的時候設置了一個Session,如果在9:20之前客戶端沒有任何請求,那么它的生命周期就到9:20分鐘結束。但是一旦用戶在9:19又向服務器發送了一個請求,那么這個Session現在的生命周期就是在當前時間的基礎上再加上20分鐘,也就是此時這個Session的生命周期是到9:39結束。
Session具有以下特點:
Session中的數據保存在服務器端;
Session中可以保存任意類型的數據;
Session默認的生命周期是20分鐘,可以手動設置更長或更短的時間。
假設我們要設置一個Session用來保存用戶名,這個Session的名字是“UserName”,值是“sa”,代碼如下:
Session[“UserName”]=”sa”;
一個網站里用到 Session 的地方肯定不止一個,所以在設置和獲取 Session 的時候通過 Session 的名在來操作,并且 Session 被設置成能存儲任意類型的對象(即 Object 類型),所以獲取 Session 的時候要根據設置的時候的實際類型進行響應的強制類型轉換(當然如果在 Session 中存放像 int/byte/short 這樣的數據類型,獲取 Session 的值算是一種拆箱操作而不是強制類型轉換),對于上面的 Session ,獲取 Session 的值的代碼如下:
string username=(string)Session[“UserName”];
對于上面的代碼,有個問題需要注意:當沒有設置相應的 Session 或者 Session 因為超過生命周期而被銷毀時,上面的代碼有可能拋出異常。我們可以先判斷是否存在指定名稱的 Session,如果不存在就不用獲取了,僅當存在的情況下才獲取 Session 的值,上面的代碼可以改進如下:
string userName; if(Session["UserName"]!=null) { //當指定名稱的Session存在時,獲取指定Session的值 userName=(string)Session["UserName"];}
5.【Cookie】
Cookie 對象和 Session 對象一樣也是用來保存特定的用戶相關的數據,不過 Session 不同的是 Cookie 保存在客戶端而不是服務器上,每次客戶端發出請求的時候都會把 Cookie 一起發送到服務器,服務器每次響應客戶端請求的時候會重新把 Cookie 發送到客戶端保存。
Cookie 保存數據有以下特點:
Cookie 中的數據保存在客戶端;
Cookie 中只能保存字符串類型的數據,如果需要在Cookie中保存其它類型數據,需要將其轉換成字符串類型后保存;
Cookie 也有其默認生命周期,也可以手動設置,最大可設置成50年之后過期。
同 Session 的情況一樣,有可能在一個網站中使用到的 Cookie 不止一個,我們仍通過 Cookie 的名稱來區分不同的 Cookie。
設置 Cookie 的過程就是在服務器的響應對象 Response 的 Cookie 集合中增加一個 Cookie ,Response 對象會把這個 Cookie 集合中的所有 Cookie 都發送客戶端。代碼如下(仍以保存用戶名為例):
HttpCookie cookie = new HttpCookie("UserName", "sa");Response.Cookies.Add(cookie);
獲取 Cookie 就是從客戶端的請求對象中找到對應名稱的 Cookie,當然也有可能出現 Cookie 不存在的情況,所以在獲取之前也需要檢查指定名稱的Cookie是否存在,如下:
string userName; if (Request.Cookies["UserName"] != null) { userName = Request.Cookies["UserName"].Value; }
6.【Application】
Application 和 Session 存儲的數據類型和存儲位置一樣,都是存放 Object 類型的數據(也就是任意類型),并且存放在服務器上,不同的 Application 中的數據可以由網站中所有的用戶來設置或者獲取。并且 Application 中存放的數據沒有時間限制,除非我們手動刪除或者服務器重新啟動,否則存放的數據都會丟失。
下面是 Session、Cookie 和 Application 的區別:
名稱 | 使用范圍 | 存儲位置 | 存放數據類型 | 生命周期 |
Session | 特定用戶 | 服務器 | Object,也就是任意類型 | 有,可以自行設置 |
Cookie | 特定用戶 | 客戶端 | String,也就值字符串 | 可以自行設置 |
Application | 所有用戶 | 服務器 | Object,也就是任意類型 | 無 |
7.【<%%>表達式】
<%%>用來編寫程序的代碼部分。在其中可以聲明變量和方法。如下:
<% string name = Request.Form["userName"].Trim(); string userName; if (Request.Cookies["UserName"] != null) { userName = Request.Cookies["UserName"].Value; } %>
在<%%>就是符合C#要求的代碼。
8.【<%=%>表達式】
Response.Write()輸出和<%=%>輸出最后的效果是一樣的。
來源:zhoufoxcn.blog.51cto.com/792419/166803