下面,我們開始學習 ASP 的另一個內建對象 Response。
與 Request 是獲取客戶端 HTTP 信息相反 ,Response 對象是用來控制發送給用戶的信息,包括直接發送信息給浏覽器、重定向浏覽器到另一個 URL 或設置 cookie 的值。
語法:Response.collection|property|method
一、屬性
1、Buffer
Buffer 屬性指示是否緩沖頁輸出。當緩沖頁輸出時,只有當前頁的所有服務器腳本處理完畢或者調用了 Flush 或 End 方法後,服務器才將響應發送給客戶端浏覽器,服務器將輸出發送給客戶端浏覽器後就不能再設置 Buffer 屬性。因此應該在 .asp 文件的第一行調用 Response.Buffer。
2、Charset
Charset 屬性將字符集名稱附加到 Response 對象中 content-type 標題的後面。對於不包含 Response.Charset 屬性的 ASP 頁,content-type 標題將為 :content-type:text/html。
我們可以在 .asp 文件中指定 content-type 標題,如 :
< % Response.Charset="gb2312") %>
將產生以下結果 :
content-type:text/html; charset=gb2312
注意,無論字符串表示的字符集是否有效,該功能都會將其插入 content-type 標題中。且如果某個頁包含多個含有 Response.Charset 的標記,則每個 Response.Charset 都將替代前一個 CharsetName。這樣,字符集將被設置為該頁中 Response.Charset 的最後一個實例所指定值。
3、ContentType
ContentType 屬性指定服務器響應的 HTTP 內容類型。如果未指定 ContentType,默認為 text/HTML。
4、Expires
Expires 屬性指定了在浏覽器上緩沖存儲的頁距過期還有多少時間。如果用戶在某個頁過期之前又回到此頁,就會顯示緩沖區中的頁面。如果設置 response.expires=0,則可使緩存的頁面立即過期。這是一個較實用的屬性,當客戶通過 ASP 的登陸頁面進入 WEB 站點後,應該利用該屬性使登陸頁面立即過期,以確保安全。
5、ExpiresAbsolute
與 Expires 屬性不同 ExpiresAbsolute 屬性指定緩存於浏覽器中的頁面的確切到期日期和時間。在未到期之前,若用戶返回到該頁,該緩存中的頁面就顯示。如果未指定時間,該主頁在當天午夜到期。如果未指定日期,則該主頁在腳本運行當天的指定時間到期。如下示例指定頁面在 1998 年 12 月 10 日上午 9:00 分 30 秒到期。
< % Response.ExpiresAbsolute=#Dec 12,1998 9:00:30# %>
二、方法
1、Clear
可以用 Clear 方法清除緩沖區中的所有 HTML 輸出。但 Clear 方法只清除響應正文而不清除響應標題。可以用該方法處理錯誤情況。但是如果沒有將 Response.Buffer 設置為 TRUE,則該方法將導致運行時錯誤。
2、End
End 方法使 Web 服務器停止處理腳本並返回當前結果。文件中剩余的內容將不被處理。如果 Response.Buffer 已設置為 TRUE,則調用 Response.End 將緩沖輸出。
3、Flush
Flush 方法立即發送緩沖區中的輸出。如果沒有將 Response.Buffer 設置為 TRUE,則該方法將導致運行時錯誤。
4、Redirect
Redirect 方法使浏覽器立即重定向到程序指定的 URL。這也是一個我們經常用到方法,這樣程序員就可以根據客戶的不同響應,為不同的客戶指定不同的頁面或根據不同的情況指定不同的頁面。一旦使用了 Redirect 方法任何在頁中顯式設置的響應正文內容都將被忽略。然而,此方法不向客戶端發送該頁設置的其他 HTTP 標題,將產生一個將重定向 URL 作為鏈接包含的自動響應正文。Redirect 方法發送下列顯式標題,其中 URL 是傳遞給該方法的值。如:
< % Response.redirect("www.jb51.com") %>
5、Write
Write 方法是我們平時最常用的方法之一,它是將指定的字符串寫到當前的 HTTP 輸出。
三、集合
Response 對象只有一個集合 --Cookie
Cookies 集合設置 cookie 的值。若指定的 cookie 不存在,則創建它。若存在,則設置新的值並且將舊值刪去。
語法
Response.Cookies(cookie)[(key)|.attribute]=value
這裡的 cookie 是指定 cookie 的名稱。而如果指定了 key,則該 cookie 就是一個字典。attribute 指定 cookie 自身的有關信息。attribute 參數可以是下列之一 :
Domain 若被指定,則 cookie 將被發送到對該域的請求中去。
Expires 指定 cookie 的過期日期。為了在會話結束後將 cookie 存儲在客戶端磁盤上,必須設置該日期。若此項屬性的設置未超過當前日期,則在任務結束後 cookie 將到期。
HasKeys 指定 cookie 是否包含關鍵字。
Path 若被指定,則 cookie 將只發送到對該路徑的請求中。如果未設置該屬性,則使用應用程序的路徑。
至此,我們已經學習的 Response 對象的所有屬性、方法和集合的理論知識,下面作者將給大家演示一段簡單的程序,通過實踐讓大家加深理解。先將以下程序剪貼到記事簿中,並保存為 asp7.asp。( 注意將 < 和 % 之間的空格去掉 !!!)
< % Dim user Dim flag Dim pwd Dim say Response.buffer=true ' 開啟緩沖頁面功能 Response.ContentType="text/HTML" Response.Charset="gb2312" user=Request.Form("username") pwd=Request.Form("password") say=Request.QueryString("say") %> < form method="POST" action="asp7.asp"> < p> 用戶名 :< input type="text" name="username" size="12">< br> 口 令 :< input type="password" name="password" size="12">< br> < input type="submit" value=" 提交 " name="B1">< input type="reset" value=" 取消 " name="B2">< /p>< /form> < % If say=1 then Response.Write " 歡迎書生大駕光臨 !" End If If say > 1 then Response.Write " 歡迎再次光臨書生的 ASP 網站 !" End If If user="Adm" and pwd="shusheng" Then Response.Expires=1 ' 設置該頁面在浏覽器的緩沖中存儲 1 分鐘後過期。 flag=1 ElseIf user="guest" and pwd="guest" Then Response.Expires=0 ' 使緩存的頁面立即過期。 Response.Clear ' 清空存儲在緩存中的頁面 flag=2 ElseIf user="vip" and pwd="vip" Then Response.Write " 歡迎 VIP 光臨書生的 ASP 網站 " flag=3 Else flag=0 Response.End ' 立即停止腳本處理,並將緩存中的頁面輸出 End If Response.write "< p>< a href='asp7b.asp?flag="&flag&"'> 動態網站設計十八般武藝 --ASP 篇 (7) 實踐練習 < /a>&l; /p>" ' 將變量 flag 的值傳送給 asp7b.asp %> < p> 動態網站設計十八般武藝 --ASP 篇 (7) 實踐練習 < /p> 再將以下程序保存為 asp7b.asp。 < % Dim saysay=Request.QueryString("flag") Select case say case "1" Response.Redirect "asp7.asp?say=1" case "2" Response.Redirect "asp7.asp?say=2" case "3" Response.Redirect "asp7.asp?say=3" case "0" Response.Redirect "asp7.asp?say=0" End Select %>
將這兩個程序放在有執行權限的 WEB 虛擬目錄下,並以 http 方式訪問 asp7.asp。在這兩個程序中我們充分運用了至今為止所學過的兩個 ASP 內建對象 :Request 和 Response。當你第一次訪問 asp7.asp 文件時,頁面上出現一個 Form 並提示輸入用戶名和口令,如果你輸入用戶名 :Adm、口令 :shusheng, 則會出現如下頁面 :
<img src='http://arch.pconline.com.cn/pcedu/empolder/wz/asp/10111/pic/2001124_asp_13.gif'>
這是為什麼呢?因為我們設置了頁面緩存,當使用 guest 登陸時,判斷程序自動清空其之前所有存儲在緩存中的頁面,而僅將其後腳本程序執行的結果顯示出來。
那為什麼第一次登陸asp7.asp 頁面時僅僅只顯示一個 Form 對話框呢?因為此時程序判斷到用戶既非 Adm, 也不是 guest 和 vip,所以執行 Response.End, 立即將存儲在緩存中的 Form 顯示出來,並停止其後的一切腳本處理,包括純 HTML 代碼的顯示。
無論你是用 Adm 還是 guest 或 vip 登陸該頁面你都可以看到一個超鏈,該超鏈指向文件 asp7b.asp,當我們點擊該超鏈時,asp7.asp 將變量 flag 的值作為參數發送給 asp7b.asp, 而後者則根據該參數的值來做出判斷,並依據不同情況使用 Response.Redirect 再強行返回 asp7.asp, 並也將一個變量 say 的值作為參數發送給 asp7.asp。如此一來,asp7.asp 又會根據此參數來做出不同的反應。
大家現在都看到了我們僅僅用了兩個很簡單的程序,就可以做到對同一個頁面的多種不同顯示結果,這正是 ASP 的魅力所在,各位可以以此示范程序為基礎,來進行一些改動,以熟練掌握我們所學的這兩個內建對象。