Response對象可以從服務器向用戶發送輸出的結果。
Response幾種常用方法
方法 | 描述 |
BinaryWrite | 向瀏覽器輸出二進制的內容 |
Clear | 清除已經緩沖的HTML輸出 |
End | 停止處理當前的頁面,並返回當前的結果 |
Flush | 立即發送已緩沖的HTML輸出 |
Redirect | 把用戶重定向到另一個URL |
Write | 向輸出寫指定的字符串 |
Write方法
Write方法前面已經接觸過了,用於向瀏覽器輸出一個字符串,例如下面的代碼:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Hello World</title> </head> <body> <h1> <% Response.Write("Hello World") %> </h1> </body> </html>
會向瀏覽器輸出“Hello World”字樣,它並不包含任何HTML代碼,因此,如果你想向瀏覽器輸出完整的HTML代碼,則需要一並寫在Response.Write中。
BinaryWrite方法
BinayWrite方法主要是在沒有任何字符轉換的情況下直接向輸出寫數據,此方法可以用於從數據庫向瀏覽器寫圖像數據(BLOB)。語法如下:
Response.BinaryWrite data
參數data是必須的,內容為被發送的二進制信息。
下面的測試,來看看Write和BinaryWrite的區別,代碼如下:
然后在Firefox瀏覽器中“查看頁面源代碼”,我們發現了稍許不同,如下圖:
Redirect方法
它的作用是將瀏覽器的訪問重定向到另一個頁面。下面的例子中我們在頁面的開始對當前時間進行判斷,如果是白天進入Day.html頁面,如果是黑夜進入Night.html頁面。代碼如下:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% Dim Hours Hours = Hour(Now()) '獲取當前小時數 If Hours < 18 Then '小於18點跳轉到Day.html頁面 Response.Redirect("Day.html") Else '>=18點跳轉到Night.html頁面 Response.Redirect("Night.html") End If %> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Response.Redirect</title> </head> <body></body> </html>
當使用Response.Redirect方法后,實際上ASP向瀏覽器發送了一個HTTP 301的重定向的HTTP頭,瀏覽器會根據這個HTTP頭重新請求新的頁面。
Flush、End和Clear方法
這三個方法都涉及到了IIS的緩存操作。IIS是運行ASP的網站服務器軟件,當ASP對網頁內容進行輸出操作時,實際上是將網頁的輸出事先放置在IIS的一個緩沖區內,等到需要發送給用戶的時候才統一發送,避免了多次輸出的通訊開銷。
下面的代碼用來展示Flush的用法,其中的過程Sleep會將程序暫停一段時間,這樣才能看到Flush的效果,代碼如下:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% Response.Buffer = true %> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Response.Flush演示代碼</title> </head> <body> <% Dim j Sub Sleep 'Sleep延時程序,為了看清楚Flush效果 Dim i For i = 1 To 1000000 Next End Sub For J = 1 To 1000 Response.Write(J & " ") Response.Flush() '嘗試有這個和沒有這個的區別 Sleep Next %> </body> </html>
在Firefox40.0版本中測試效果如下:
下面的代碼將演示Clear方法的效果,如下圖所示:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% Response.Buffer = true %> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Response.Clear演示代碼</title> </head> <body> <p>This is some text I want to send to the user.</p> <p>No, I changed my mind. I want to clear the text.</p> <% Response.Clear()'緩沖區將清理,上面的所有HTML都將不顯示 %> </body> </html>
在Firefox40.0版本中測試,將得到一個空白頁面,我們通過“查看頁面源代碼”右鍵菜單,看看源代碼是什么樣子的,如下圖:
下面的代碼中我們將繼續演示End方法的使用,代碼如下:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% Response.Buffer = false %> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Response.End演示代碼</title> </head> <body> <p> I am writing some text. This text will never be<br> <% Response.End() '立刻輸出當前緩沖區,並終止 %> <!-- 接下來的HTML將不會輸出到客戶端 --> finished! It's too late to write more!</p> </p> </body> </html>
在Firefox40.0版本中測試結果如下圖:
通過查看“查看頁面源代碼”,我們看看源代碼有什么不一樣?如下圖:
Response幾種常用屬性
屬性 | 描述 |
Buffer | 規定是否緩沖頁面的輸出 |
Charset | 將字符集的名稱追加到Response對象的content-type頭部 |
ContentType | 設置Response對象的HTTP內容類型 |
Expires | 設置頁面在失效前的瀏覽器緩存時間 |
ExpiresAbsolute | 設置頁面緩存失效的日期和時間 |
IsClientConnected | 指示客戶端是否已從服務器斷開 |
Buffer屬性我們再一次實驗一個代碼(將上面Flush的代碼稍作修改),如下:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% Response.Buffer = false '設置不緩存 %> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Response.Flush演示代碼</title> </head> <body> <% Dim j Sub Sleep 'Sleep延時程序,為了看清楚Flush效果 Dim i For i = 1 To 1000000 Next End Sub For J = 1 To 1000 Response.Write(J & " ") Sleep '暫停一下,為了看清楚效果 Next %> </body> </html>
在Firefox中測試效果和Flush的代碼一樣效果,逐個輸出了數字。
Buffer屬性可規定是否對輸出進行緩沖。通常情況下,ASP 腳本在服務器端執行,每句的執行結果都會發送到客戶端的瀏覽器上顯示出來。當輸出設置緩存時,服務器會阻止向瀏覽器的響應,直到所有的服務器腳本均被處理,或者直到腳本調用了 Flush 或 End 方法。
注意:如果要設置此屬性,它應當位於 .asp 文件中的 <html> 標簽之前。
Charset屬性向 Response 對象中 content-type 頭部追加字符集名稱。默認字符集是 ISO-LATIN-1。
注意:此屬性可接受任何字符串,不論是否為合法的字符集名稱。
我們新建一個ASP空頁面,沒有任何ASP代碼,運行后content-type頭部是什么樣子呢?代碼如下:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Resposne.Charset</title> </head> <body> </body> </html>

我們重新修改代碼,使用Charset屬性指定一個字符集,如下:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% Response.Charset = "utf-8" %> <!doctype html> <html> <head>
再次在Firefox中查看消息頭信息,Content-Type內容變成了 “text/html; Charset=utf-8”
Charset屬性用來動態指定這個編碼的,它有時在AJAX形式調用的網頁中用到。
Expires和ExpiresAbsolute兩個屬性用來控制瀏覽器對於當前網頁的緩存時間,在緩存時間之內,重復訪問網頁將直接從瀏覽器的緩存中調用而不再從服務器上獲取。二者的區別在於Expires指定過期時間距離當前時間的間隔,而ExpiresAbsolute用於指定過期的絕對時間。
Expires示例
下面代碼指示頁面不會緩存,將Expires值設置為-1,如下:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% Response.Expires = -1 '不緩存%> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Resposne.Expires和ExpiresAbsolute</title> </head> <body> <p>This page will be refreshed with each access!!!!</p> </body> </html>
通過Firefox的“查看元素”功能,我們能看到Date和Expires時間差別:
同理,如果將Expires設置為10,即相差10分鍾,結果分析如下:
ExpiresAbsolute示例
下面的代碼將使頁面在10天后過期,如下:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% '將在10天后過期 Response.ExpiresAbsolute = DateAdd("d", 10, Date()) %> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Resposne.Expires和ExpiresAbsolute</title> </head> <body> <p>這個頁面將在10天后過期並更新</p> </body> </html>
通過Firefox分析后,顯示Expires內容如下:
小知識:
DateAdd函數返回已添加指定時間間隔的日期。
DateAdd(interval, number, date)
interval參數可以設置為年、季度、月、當年的第幾天、日、當周的第幾天、當年的第幾周、小時、分、秒。
number參數設置時間間隔,對未來的日期使用正值,對過去的日期使用負值。
date參數指定被添加的時間間隔的日期的變量或文字。
IsClientConnected屬性指示客戶端是否已經與服務器斷開連接。
示例代碼如下:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Resposne.IsClientConnected</title> </head> <body> <% If Response.IsClientConnected = true then Response.Write("The user is still connected!") Else Response.Write("The user is not connected!") End If %> </body> </html>
ContentType屬性為Response對象設置HTTP內容類型,ASP頁面如果沒有設置ContentType屬性,那么默認的Content-Type頭部是這樣的(Firefox查看元素),如下( ”text/html”):
我們舉個例子,此例子將會打開一個Excel電子表格,代碼如下:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% Response.ContentType = "application/vnd.ms-excel" %> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Resposne.ContentType</title> </head> <body> <table> <tr> <td>1</td> <td>2</td> <td>3</td> <td>4</td> </tr> <tr> <td>5</td> <td>6</td> <td>7</td> <td>8</td> </tr> </table> </body> </html>
通過測試,提示當前頁面用Excel打開,如下圖:
點擊“打開,通過 Microsoft Excel()默認”后,就會看到Excel的處理內容了,如下圖:
小知識:
如果獲得某種類型的MIME類型呢?出了百度之外,你可以通過你注冊表的HKEY_CLASSES_ROOT分支下查看相應的某種類型的鍵值,例如xls格式的MIME類型是application/vnd.ms-excel
Response集合
Response有一個Cookies的集合,這個集合用於向瀏覽器輸出Cookies。
為什么要使用Cookies呢?HTTP協議是一個無狀態的協議,服務器並不知道客戶端兩次請求之間的聯系,而Cookies的設計使得服務器可以通過Cookies在客戶端存儲一些信息,並在服務器端讀取,從而實現例如用戶登錄保存等功能。
Cookies 集合用於設置或取得 cookie 的值。如果 cookie 不存在,就創建它,並賦予它規定的值。
注意:Response.Cookies 命令必須位於 <html> 標簽之前。
語法:
Response.Cookies(name)[(key)|.attribute]=valuevariablename=Request.Cookies(name)[(key)|.attribute]
語法看着嚇人,通過下面的代碼我們將要學習如何設置Cookies,並讀取Cookies,其實很簡單,代碼如下:
<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> <% '設置Cookies Response.Cookies("user")("firstname") = "John" Response.Cookies("user")("lastname") = "Smith" Response.Cookies("user")("country") = "Norway" Response.Cookies("user")("age") = "25" '在這里我們設置了名為user的Cookies,其中又包含多個值 %> <!doctype html> <html> <head> <meta charset="utf-8"> <title>Response.Cookies</title> </head> <body> <h1>Cookies讀取示例</h1> <% '將設置好的Cookies讀取出來,並輸出到瀏覽器 Dim x For Each x in Request.Cookies("user") Response.Write(x & " : " & y & " = " & Request.Cookies("user")(x)) Response.Write("<br>") Next %> </body> </html>
代碼的開頭設置了名為user的Cookies,並且包含多個值,<body>中將名為user的Cookies讀取出來並顯示,在Firefox中測試分析如下: