ASP 的內建 Response 物件,可用來記錄伺服器傳回用戶端的資訊。此物件包含了一個集合(Collections)、五個性質(Properties)及八個方法(Methods),可說明如下。Response 物件的集合只有 Cookies 一項,Response.Cookies 可傳送 cookies 並將其寫入用戶端電腦的硬碟內。 (有關如何使用 Response.Cookies 及 Request.Cookies,會在後續小節中說明。)
Response 物件有下列五種性質,可列表如下:
性質 值域說明 功能說明 Buffer True 或 False (預設值為 False) 設定伺服器傳送資料的方式,是邊處理邊送(False),或是完全處理完畢後,在一次送回用戶端(True) ContentType 字串 設定伺服器傳回資料的內容型態(Content type)。例如:
- 若是傳回純文字,則為「text/plain」。
- 若是傳回 HTML,則為「text/html」(此為預設值)。
- 若是傳回 *.jpg 影像檔,則是「image/jpeg」。
Expires 字串 設定網頁在用戶端的的逾期時間(以相對時間為準,以分鐘為單位) ExpiresAbsolute 字串 設定網頁在用戶端的的逾期時間(以絕對時間為主) Status 數字 傳回 HTTP 協定的狀態碼(Status code)至用戶端 Response 物件有下列八種方法,可列表如下:
性質 功能說明 AddHeader(name, value) 設定 HTTP 新表頭(Header)的名稱和對應值。 AppendToLog(string) 加一個字串到伺服器記錄檔的結尾處。 BinaryWrite(binaryData) 傳送不經字元轉換(Character-set conversion)的二進位資料到用戶端。 Clear 清除緩衝區域的內容 End 立刻停止伺服器對 ASP 檔案的處理,並傳送緩衝區域的內容。 Flush 立刻傳送現存於緩衝區域的內容 Redirect(urlString) 轉接到指定的網址 Write(string) 印出字串 以下我們用幾個簡單的範例來說明。下面這個範例,使用 Response.Redirect 來進行轉址:
在上述範例中,只要使用者任選一個選項,網頁即會轉址到相關的網址,上述範例的完整原始檔案 (response/redirect.asp) 如下:
<%@language=JScript%> <% // 有更好的辦法來進行下列測試嗎? x=Request.Form("select")+""; if (x!="undefined") Response.Redirect(Request.Form("select")); %> <%title="Response.Redirect 的範例"%> <!--#include file="../head.inc"--> <hr> 請選一個轉址目標: <form method="post"> <input type="radio" name="select" value="/jang/books/webprog/03jscript/" onClick="this.form.submit()"> JavaScript 線上中文手冊<br> <input type="radio" name="select" value="/jang/books/webprog/06asp/" onClick="this.form.submit()"> ASP 線上中文手冊<br> <input type="radio" name="select" value="/jang/books/webprog/08perl/" onClick="this.form.submit()"> Perl 線上中文手冊<br> </form> <hr> <!--#include file="../foot.inc"-->特別要注意的是:Response.Redirect 所包含的資訊都是屬於表頭資訊,因此它必須出現在任何網頁內容之前,否則就會造成錯誤。下面這個範例,使用 Buffer、Flush、Clear、End 等方法來控制伺服器對緩衝區資料的傳送:
上述範例的完整原始檔案 (response/buffer.asp) 如下:
<%@language=JScript%> <%Response.Buffer=true%> <%title="Response.Buffer、Flush、Clear、End 的範例"%> <!--#include file="../head.inc"--> <hr> <p>我把緩衝區的內容立刻送到客戶端,所以這是你看得到的內容。 <%Response.Flush;%> <p>我把緩衝區的內容清掉了,所以這是你看不到的內容。 <%Response.Clear;%> <p>我又開始寫入緩衝區,所以這是你看得到的內容。 <hr> <!--#include file="../foot.inc"--> <%Response.End;%> <p>這些都看不到,因為伺服器看到 Response.End,就不載送資料到用戶端了!在上述範例中,我們把伺服器回傳的資料放置於緩衝區(Buffer)中,並利用不同的方法來控制緩衝區的資料。特別要注意的是:Response.Buffer 所包含的資訊也是屬於表頭資訊,因此它必須出現在任何網頁內容之前,否則就會造成錯誤。下面這個範例,使用 Response.Charset 傳送網頁文件的編碼資訊:
上述範例的完整原始檔案 (response/charset.asp) 如下:
<%@language=JScript%> <% Response.Charset="x-sjis" %> <%title="Response.Charset 的範例"%> <!--#include file="../head.inc"--> <hr> <p>This page is encoded in "x-sjis", which is a Japanese character set. <br>In order to view the following Big5 characters, you need to change the document encoding. <br>你若看得懂這一句中文,代表你已經將文件編碼改成大五碼了! <hr> <!--#include file="../foot.inc"-->在上述範例中,我們把文件編碼設定成日文編碼,所以看不到中文。(如果你的系統沒有安裝日文字形,IE 也會詢問是否要安裝日文字形。)只有經由手動將瀏覽器的編碼方式改成大五碼,才能看的到網頁中的中文。下面這個範例,伺服器使用 Response.contentType 來告知用戶端所要接受的資料類別:
上述範例的完整原始檔案 (response/contentType.asp) 如下:
<%@language=JScript%> <% Response.ContentType="text/plain" %> <p>因為伺服器告訴瀏覽器,所傳的網頁是純文字,因此你會看到所有的內容,包含 HTML 的各種標籤。 <p>但是,有些瀏覽器會自作聰明,只要看到 HTML, HEAD, BODY 這些標籤,就自動以 HTML 呈現。你可以把這些標籤加進來試試看! <hr>很明顯的,由於伺服器告訴用戶端所傳回來的資料是「text/plain」(純文字資料),因此瀏覽器在呈現網頁時,就以純文字的方式呈現,因此你會看到 HTML 的標籤。(但是,有些瀏覽器會自作聰明,只要看到 <HTML>, <HEAD>, <BODY> 這些標籤,就自動以 HTML 呈現。你可以把這些標籤加進上列網頁試試看!)下面這個範例列印出 Response 物件的各個性質的預設值:
上述範例的完整原始檔案 (response/listResponse.asp) 如下:
<%@language=jscript%> <%title="印出 Response 物件的各種性質"%> <!--#include file="../head.inc"--> <hr> Response.Buffer = <%=Response.Buffer%><br> Response.ContentType = <%=Response.ContentType%><br> Response.Expires = <%=Response.Expires%><br> Response.ExpiresAbsolute = <%=Response.ExpiresAbsolute%><br> Response.Status = <%=Response.Status%><br> <% function listprop(obj, objname) { for (var i in obj) Response.write(objname+".<font color=red>"+i+"</font>=<font color=green>"+obj[i]+"</font><br>"); } Response.write("<br>Response 的資料型態是"+typeof(Response)+"<br>"); Response.write("為什麼下一段程式碼列印不出東西?同學請幫忙找原因!<br>"); for (var i in Response) Response.write("Response.<font color=red>"+i+"</font>=<font color=green>"+Response[i]+"</font><br>"); %> <hr> <!--#include file="../foot.inc"-->範例整理
- 使用 Response.Redirect 的範例: JScript、 VBScript
- 使用 Response.Buffer, Response.Flush, Response.Clear, Response.End 的範例: JScript、 VBScript
- 使用 Response.Charset 的範例: JScript、 VBScript
- 列印出 Response 物件的各個性質的預設值: JScript、 VBScript
- 使用 Response.ContentType 的範例: JScript、 VBScript
- 使用 Response.addHeader 的範例: JScript、 VBScript
- 使用 Response.Expires 的範例: JScript(請同學幫忙:如何驗證此範例?)
- 使用 Response.ExpiresAbsolute 的範例: JScript(請同學幫忙:如何驗證此範例?)
- 使用 Response.IsClientConnected 的範例: JScript(請同學幫忙:如何驗證此範例?)
參考資料
回到「第 6 章:ASP」