在上一篇中作者給大家詳細介紹了 ASP 內建對象之一 Request 的使用方法,相信各位通過一系列的實踐已經能夠熟練掌握,本篇將繼續給大家介紹 ASP 的另一個內建對象 Response。
最近,有很多朋友來“妹兒”催我加快 A SP 篇 一文的寫作速度,並急切地詢問哪裡有關於 A SP 的 教材。我深深地被大家的學習熱情所打動,因此決定將自己平時所搜集的一些 A SP 信 息資料拿出來和大家共用,也希望所有的朋友能慷慨地將自己搜集的有關 A SP 的 資料告訴作者,謝謝。由於目前國內有關 A SP 的 中文教材鳳毛麟角,而專門針對 A SP 網 站開發的中文教材作者更是聞所未聞(可能是作者孤陋寡聞),只是最近聽說出了一本清華大學出版社出版的關於 M S InterDev 的 傻瓜書,其中有 A SP 的 教學,和一本 A ctive Server Page 2.0 的 中文手冊,因此目前作者還是主要通過國外網站來擷取 A SP 的 有關資訊和資料,這也是作者寫本文的一個主要原因。下面我就將 b ookmark 中 的一些較經典的 A SP 站 點羅列出來:
1、http://www.activeserverpage.com/ 這是作者訪問最頻繁的 ASP 網站,也是世界上最大最全的關於 ASP 的網站之一,它裡面不但有最新的 ASP 文獻資料,免費組件,還有一本完整的 ASP 入門教材,它更是 ASP 網站的中樞網站,通過它你可以到達無數的 ASP 相關網站。
2、http://www.asphole.com/ 這本是一個針對 ASP 漏洞而建立的網站,但是它卻無疑是一個完備的 ASP 資訊網站,它非但提供了 ASP 的文章,及組件還提供詳盡透徹的聯結地址。
3、http://www.15seconds.com/faq 和 http://www.15seconds.com/search 這是一個作者所看到的最大的網上 ASP 交流網站,它擁有 ASP 解疑的答案,ASP 郵件清單資訊,ASP 技巧,你可能需要需要幾個月的時間才能讀完這些資訊。而在 http://www.15seconds.com/AllComponents.asp 你可以讀到最新的 ActiveX 組件和大量免費組件的詳細介紹,並附有非常實用的文檔與例子。
4、http://www.microsoft.com/workshop/server/asp/aspfeat.asp 大家都知道 Active Server Page 是微軟提出的一套基於 NT IIS 的 WEB 伺服器端環境,那麼這個由微軟自己建立的 ASP 技術說明網站,大家當然是不可不看的。
5、http://www.serverobjects.com/ 在這裡你可以獲得無數實用的 ActiveX 組件 , 並下載它們的試用版,只可惜其中的大部分極好的組件都是要 Money 的。
6、http://www.cyscape.com/asp/browscap/ 大家還記得作者在 ASP2 一文中介紹的那個用來辨別用戶端瀏覽器版本的 Browser Capabilitie 組件嗎?在這個網站你可以獲得最新的 BROWSCAP.INI 檔案,它擁有每一個 ASP 安裝時微軟沒有提供的瀏覽器的資訊,這樣你在 ASP 中判斷客戶瀏覽器是就能夠萬無一失了。
7、http://www.microsoft.com/data/ado/ ASP 最強大且便捷的功能莫過於同資料庫的串連,通過 ASP 內建的 ActiveX 組件,我們可以輕而易舉將 WEB 與所有和 ODBC 相容的資料庫連接起來,在這個微軟的網站上你可以擷取很多實用的 ADO 資料。
8、http://www.cobb.com/m_sbn4/ 一個不錯的 ASP 論壇,你可以在那裡貼你的問題,讀取別人的問題和解答。 下面,我們開始學習 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.chinabyte.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 將只發送到對該路徑的請求中。如果未設定該屬性,則使用應用程式的路徑。
至此,我們已經學習的 R esponse 對 象的所有屬性、方法和集合的理論知識,下面作者將給大家示範一段簡單的程式,通過實踐讓大家加深理解。先將以下程式剪貼到記事簿中,並儲存為 a sp7.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>< /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, 則會出現如下頁面 :
如果你輸入使用者名稱 :guest、口令 :guest, 則僅出現如下頁面 :
這是為什麼呢?因為我們設定了頁面緩衝,當使用 guest 登陸時,判斷程式自動清空其之前所有儲存在緩衝中的頁面,而僅將其後指令碼程式執行的結果顯示出來。
那為什麼第一次登陸 asp7.asp 頁面時僅僅只顯示一個 Form 對話方塊呢?因為此時程式判斷到使用者既非 Adm, 也不是 guest 和 vip,所以執行 Response.End, 立即將儲存在緩衝中的 Form 顯示出來,並停止其後的一切指令碼處理,包括純 HTML 程式碼的顯示。
無論你是用 A dm 還 是 g uest 或 v ip 登 陸該頁面你都可以看到一個超鏈,該超鏈指向檔案 a sp7b.asp , 當我們點擊該超鏈時, a sp7.asp 將 變數 f lag 的 值作為參數發送給 a sp7b.asp, 而 後者則根據該參數的值來做出判斷,並依據不同情況使用 Response.Redirect 再 強行返回 a sp7.asp, 並 也將一個變數 s ay 的 值作為參數發送給 a sp7.asp 。 如此一來, a sp7.asp 又 會根據此參數來做出不同的反應。
大家現在都看到了我們僅僅用了兩個很簡單的程式,就可以做到對同一個頁面的多種不同顯示結果,這正是 ASP 的魅力所在,各位可以以此示範程式為基礎,來進行一些改動,以熟練掌握我們所學的這兩個內建對象。今天的課程就到此為止了,在結尾我還要說明兩件事。第一,很多朋友來信詢問哪裡可以看到 ASP 篇的前幾篇文章,請大家點擊 此處便可以找到。第二,一些朋友反映文中的 ASP 程式不能運行,這主要是因為 Chinabyte 的頁面都是用資料庫產生的,它限定在文章中不能使用帶 HTML 或 ASP 格式的代碼,所以在所有 < 符號後都加了空格,各位只要將 < 後的空格去掉就可以運行程式了,切記。下一篇我們將繼續學習另一個 ASP 內建對象,敬請關注。