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