6-5:Response 物件

     
ASP 的內建 Response 物件,可用來記錄伺服器傳回用戶端的資訊。此物件包含了一個集合(Collections)、五個性質(Properties)及八個方法(Methods),可說明如下。

Response 物件的集合只有 Cookies 一項,Response.Cookies 可傳送 cookies 並將其寫入用戶端電腦的硬碟內。 (有關如何使用 Response.Cookies 及 Request.Cookies,會在後續小節中說明。)

Response 物件有下列五種性質,可列表如下:

性質值域說明功能說明
BufferTrue 或 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"-->

範例整理

參考資料


回到「第 6 章:ASP