top
Loading...
ASP篇(七)

作 者 : 天驕創作室書生

在上一篇中作者給大家詳細介紹了 ASP 內建對象之一 Request 的使用方法,相信各位通過一系列的實踐已經能夠熟練掌握,本篇將繼續給大家介紹 ASP 的另一個內建對象 Response。

最近,有很多朋友來“妹兒”催我加快 ASP 篇一文的寫作速度,并急切地詢問哪里有關于 ASP 的教材。我深深地被大家的學習熱情所打動,因此決定將自己平時所搜集的一些 ASP 信息資料拿出來和大家共享,也希望所有的朋友能慷慨地將自己搜集的有關 ASP 的資料告訴作者,謝謝。由于目前國內有關 ASP 的中文教材鳳毛麟角,而專門針對 ASP 網站開發的中文教材作者更是聞所未聞(可能是作者孤陋寡聞),只是最近聽說出了一本清華大學出版社出版的關于 MS InterDev 的傻瓜書,其中有 ASP 的教學,和一本 Active Server Page 2.0 的中文手冊,因此目前作者還是主要通過國外網站來獲取 ASP 的有關信息和資料,這也是作者寫本文的一個主要原因。下面我就將 bookmark 中的一些較經典的 ASP 站點羅列出來:

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 將只發送到對該路徑的請求中。如果未設置該屬性,則使用應用程序的路徑。

至此,我們已經學習的 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>< /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 代碼的顯示。

無論你是用 Adm 還是 guest 或 vip 登陸該頁面你都可以看到一個超鏈,該超鏈指向文件 asp7b.asp,當我們點擊該超鏈時,asp7.asp 將變量 flag 的值作為參數發送給 asp7b.asp, 而后者則根據該參數的值來做出判斷,并依據不同情況使用 Response.Redirect 再強行返回 asp7.asp, 并也將一個變量 say 的值作為參數發送給 asp7.asp。如此一來,asp7.asp 又會根據此參數來做出不同的反應。

大家現在都看到了我們僅僅用了兩個很簡單的程序,就可以做到對同一個頁面的多種不同顯示結果,這正是 ASP 的魅力所在,各位可以以此示范程序為基礎,來進行一些改動,以熟練掌握我們所學的這兩個內建對象。今天的課程就到此為止了,在結尾我還要說明兩件事。第一,很多朋友來信詢問哪里可以看到 ASP 篇的前幾篇文章,請大家點擊 此處 便可以找到。第二,一些朋友反映文中的 ASP 程序不能運行,這主要是因為 Chinabyte 的頁面都是用數據庫生成的,它限定在文章中不能使用帶 HTML 或 ASP 格式的代碼,所以在所有 < 符號后都加了空格,各位只要將 < 后的空格去掉就可以運行程序了,切記。下一篇我們將繼續學習另一個 ASP 內建對象,敬請關注。

(待續未完)
作者:http://www.zhujiangroad.com
來源:http://www.zhujiangroad.com
北斗有巢氏 有巢氏北斗