轉轉: ASP 內建對象Request和Respones
最後更新:2017-02-28
來源:互聯網
上載者:User
request|對象 ASP 內建對象Request和Respones
Web源於靜態文本,現在很多網站幾乎還是採用這種方式。靜態文本的缺點就是維護難(檔案數目多)、查詢難、修改難。雖然可以採用FrontPage對網站進行管理,但這隻是其中的一個辦法。現在,很多的網站都會在後台採用資料庫,動態產生超文本。這樣 要改變式樣,只需修改幾個檔案;要變更內容,只需對資料庫進行操作即可,而且易於保持一致性;而對於全文檢索索引等查詢應用,這種方式的優越性更為突出。(經常說的“動態”也包括圖片的動態顯示,如動態GIF、Java Applet等,本文所指為資料的動態性)
通用網關介面CGI(Common Gateway Interface)和網路伺服器應用程式介面ISAPI(Internet Server Application Programming Interface)與其他相關技術的出現,使我們能夠方便地與Web Server進行溝通,從而象一些計數器、留言版等CGI程 式相繼出現並蔚然成風。
但這些CGI程式都有一個很大的缺點,就是CGI(可用VB、Java、Perl、C或Dephi等編寫)與html只能分開編寫、分開運行,要將兩者融合在一起並不 容易,從而導致維護與編寫都相當困難。因此,一些廠商後來都推出了自己的Script語言,來增強網頁開發的功能。其中Netscape推出了JavaScript(for client端和for Server端兩種);微軟則推出了VBScript和Asp(Asp的文法與VB的文法類似)兩種,也用於伺服器端和用戶端程式的編寫。對於專業開發人員而言,用戶端程式的最重要的一點是通用性,而伺服器端的則強調功能和效率。對於Client端程式的開發,JavaScript無疑是最佳的,因為當今兩大主流瀏覽器IE和Netscape都宣稱支援該標準;而VBScript則只有IE才能支援。但令我們苦惱的是對某些JavaScript的標記,IE或IE的某些版本並不一定會支援,這必導致我們不得不把一部分程式移到伺服器端去執行,因為伺服器端的程式會先解釋產生html(或含ActiveX)文本,再送到用戶端,故不存在相容問題。
livewire(JavaScript for Server端的編譯器)和Asp一樣,都是一些手稿語言(手稿是指類似client端的JavaScript一樣的、可嵌套在html文本裡面、只需用標記標明是由伺服器執行的程式段),也就是類似C/C++一樣的物件導向的語言。livewire的檔案尾碼名還是html,asp的檔案尾碼名則是asp,因為asp的檔案在客戶讀取它的時候,伺服器才進行解釋,而livewire的檔案則必須預先進行編譯(每次修改後,都要重新編譯)。asp有相應的輔助開發工具(InterDev),可代為產生一些控制項。當然,這些並不重要,關鍵是你採用的是Netscape Web Server還是微軟的IIS。但就一般而言,因為IIS是捆綁在NT上的,故採用IIS的使用者會偏多一些。
自從Netscape公司推出了livewire和微軟推出了Active Server Page以後,程式員編寫網上程式就方便和容易了很多。但這種Script類的語言有一個共同的缺點,那就是由於是解釋執行的,故速度不會太快。最近,微軟建議採用三層模型,中介層可以不用asp,而直接採用VB6.0產生的ActiveX控制項,因為是編譯執行的,故速度較快,不過這是後話。
一、Asp的基本對象
Asp(Active Server Page)是一種類似於VB的物件導向的程式語言。在這裡並不想詳述對象等一些基本概念,而是直接介紹其語言特性,以便開發人員能夠熟練地對asp程式進行修改和編製(因為很多人都只是直接利用開發工具如InterDev來產生asp程式)。
首先,Asp程式的存檔名稱肯定是“asp”;其次,在asp程式裡面,伺服器端的Script要放在字串中間,例如。如果你想在一個Asp檔案中調用另一個Asp檔案,則可在Asp中加上下面的聲明: < ! -- #INCLUDE VIRTUAL|FILE="***.asp" -- >,這有些象C語言中的#include。其中,Virtual表示虛擬檔案路徑,File表示真實檔案路徑。
Asp有五個主要的內建對象:Request、Response、Server、Session、Application,下面將分別舉例對其進行說明。
1、Request
Asp依然遵從流行的、利用用戶端的Form進行資料交換的方法。Asp內建的request對象擁有五個擷取用戶端資料的方法(QueryString/Form/Cookies/ServerVariables/ClientCertificate)。
文法:request.方法名稱("參數")|request("參數")
如果採用後者,系統會自動選擇相應的方法。
Form
這裡再重新強調Form的一些屬性:
Enctype=資料傳送的MIME形態
Method=傳送資料的方式Get/Post
Onrest=按下rest鍵調用的程式
Onsubmit=按下sumit鍵調用程式
Target=輸出內容的frame視窗>
使用Form傳送資訊一般有三種方式:由html網頁內的Form傳資訊給其他Asp;由Asp內的Form傳資訊給另外一個Asp;Asp內的資訊傳送給自身。
文法:Request.Form(參數)[(索引)]
其中參數表示Form中元素的名稱,索引表示相同名稱元素的順序號。
例:
可迴圈讀取名稱為user的元素,其中Count是Form的系統屬性,用於計算同名元素的個數,如果該元素不存在,則其值為零。如果沒有指明要讀取第幾個同名元素,則系統會把全部同名元素的值都讀取出來,並用“,”作間隔。
例:Request.form("user")=abc,bcd,cde
2、QueryString
文法:Request.QueryString(參數)[(索引)]
除了用Form傳輸資料外,還可通過在超連結後接“?”的方式傳輸資訊,如:,這時可通過Request.QueryString("user")讀取傳輸的資訊;如果出現多個重名的參數,如:,則第一次
Resquest.QueryString("user")=abc,第二次
Resquest.QueryString("user")=bcd,第三次
Resquest.QueryString("user")=cde。
3、ServerVariables
文法:ServerVariables(參數名稱)
我們知道Web/Browse的傳輸協議是http,http的前序會有一些用戶端的資訊,如
客戶IP地址、瀏覽器的語言系統等。這時可通過Request.ServerVariables("***")擷取相關資訊,如Request.ServerVariables("Accept_Language")可擷取用戶端瀏覽器 的語系。其他系統參數見下表:
SERVER_NAME server的機器名稱或IP地址。
SERVER_PORT server正在啟動並執行連接埠號碼
REQUEST_METHOD 發出request的方法(GET/POST/HEAD
SCRIPT_NAME 程式被調用的路徑,如:cgi-bin/a.pl。
REMOTE_HOST 發出request請求的遠端機器(client)的名稱。
REMOTE_ADDR 發出request請求的遠端機器(client)的IP地址。
REMOTE_IDENT 發出request的使用者名稱(如是撥接,則為使用者ID),當NCSA IdentityCheck為enabled,而且client機器支援RFC 931時,該變數有效。
CONTENT_TYPE 資料的MIME類型,如:“text/html”。
HTTP_ACCEPT client可以接受的MIME類型列表。
HTTP_USER_AGENT client發出request的瀏覽器類型。
HTTP_REFERER 在讀取CGI程式之前,client所指的文本URL。
4、Cookies
在用戶端,Cookies記錄了用戶端瀏覽器很多的資訊,我們可通過Request.Cookies("名稱")命令擷取它的值,也可通過Response.Cookies("名稱")="值"在用戶端記錄一些資訊,以便控制訪問者。設定多重Cookies的方法為Response.Cookies("名稱")("名稱")="值"。
5、Cache
我們可以在瀏覽器上設定從Cache中抽取已經訪問過的頁面的資訊,同樣,在Asp程式中也可進行類似的設定。其中Response.Clear為清空用戶端的記憶體。Response.Buffer=True設定可從Cache中讀取資料(預設時為False)。
6、ClientCertificate
ClientCertificate用於擷取用戶端瀏覽器的身份確認資訊(符合X.509標準),但用戶端瀏覽器必須支援SSL3.0或PCT1協議。這裡需做兩步工作,第一步:web server必須啟動使用者端認證選項;第二步:對用戶端瀏覽器進行相應設定,這樣,該方法才會生效,否則,傳回empty值。
2、Response
當要從伺服器傳送資料到用戶端時,可通過下面的方法:
1)Response.Write直接輸出資訊,如Response.write ""。
2)Response.Redirect引導用戶端到另一個url位置,如Response.Redirect "http://zyr.yeah.net",但這裡有一個問題需要注意,就是該語句一定要放在標記前執行,也就是說在伺服器未向用戶端送出html文本前序前就要被執行,否則會出現傳輸錯誤資訊。
3)Response.ContentType控制輸出的檔案類型,伺服器送給用戶端的資料包類型可以是text/html文本,也可以是gif/jpeg圖形檔案,所以每次傳輸前,我們都必須告知用戶端將要傳輸的檔案類型,一般預設情況下為“Text/Html”類型。
4)Response.Cookies 用於設定Cookies的值,文法為:Response.cookies(變數名稱)[(key)|屬性]=寫入的資訊。(key的用法前面已作說明,這裡不在敘述)cookies系統預設有五個屬性,包括Expires(時間)、Domain(網域名稱)、Path(路徑)、Secure(安全性)、Haskeys(判斷cookies下是否還有其它cookies文本)。
5)Response.Buffer用於確定是否把資訊傳輸到緩衝區。因為有時候我們希望把部分中間資訊送到緩衝區,然後繼續工作。當所有處理工作都完成後,才把資訊輸出到用戶端。但當在處理過程中Flush或End方法被調用,則緩衝區內容將被輸出。
Response的其它屬性:
Expires:設定網頁保留在用戶端瀏覽器的時間長度。
ExpiresAbsolute:設定網頁保留在用戶端瀏覽器的日期與時間。
Response的其它方法:
AddHeader:設定HTML檔案的HTTP前序。
AppendToLog:在Web Server記錄檔案末尾,添加字串。
Clear:清除在緩衝區中的HTML輸出資料。
End:停止處理asp檔案,並回傳當時狀態。
Flush:立刻送出緩衝區的HTML資料。