asp基礎(chǔ)實(shí)用資料.doc_第1頁
asp基礎(chǔ)實(shí)用資料.doc_第2頁
asp基礎(chǔ)實(shí)用資料.doc_第3頁
asp基礎(chǔ)實(shí)用資料.doc_第4頁
asp基礎(chǔ)實(shí)用資料.doc_第5頁
已閱讀5頁,還剩50頁未讀 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)

文檔簡介

目 錄一、關(guān)于ASP二、ASP的新功能三、創(chuàng)建ASP頁四、使用腳本語言五、使用變量和常量六、使用集合七、ASP內(nèi)建對象八、向?yàn)g覽器發(fā)送內(nèi)容九、包含文件十、訪問數(shù)據(jù)庫十一、調(diào)試ASP腳本十二、維護(hù)ASP應(yīng)用程序的安全一、關(guān)于ASPActive Server Pages(ASP)是服務(wù)器端腳本編寫環(huán)境,使用它可以創(chuàng)建和運(yùn)行動(dòng)態(tài)、交互的Web服務(wù)器應(yīng)用程序。使用ASP可以組合HTML頁、腳本命令和ActiveX組件以創(chuàng)建交互的Web頁和基于Web的功能強(qiáng)大的應(yīng)用程序。ASP應(yīng)用程序很容易開發(fā)和修改。HTML編寫人員如果您是位HTML編寫人員,您將發(fā)現(xiàn)ASP腳本提供了創(chuàng)建交互頁的簡便方法。如果您曾想從HTML表格中收集數(shù)據(jù),或用顧客的姓名個(gè)人化HTML文件,或根據(jù)瀏覽器的不同使用不同的特性,您會(huì)發(fā)現(xiàn)ASP提供了一個(gè)出色的解決方案。以前,要想從HTML表格中收集數(shù)據(jù),就不得不學(xué)習(xí)一門編程語言來創(chuàng)建一個(gè)CGI應(yīng)用程序?,F(xiàn)在,您只要將一些簡單的指令嵌入到您的HTML文件中,就可以從表格中收集數(shù)據(jù)并進(jìn)行分析。您再不必學(xué)習(xí)完整的編程語言或者單獨(dú)編譯程序來創(chuàng)建交互頁。 隨著不斷掌握使用ASP和腳本語言的技巧,您可以創(chuàng)建更復(fù)雜的腳本。對于ASP,您可以便捷地使用ActiveX組件來執(zhí)行復(fù)雜的任務(wù),比如連接數(shù)據(jù)庫以存儲(chǔ)和檢索信息。對ASP腳本的逐步介紹,請參閱ASP教程。然后您可以再回到這些主題中了解關(guān)于編寫ASP腳本的詳細(xì)信息。有經(jīng)驗(yàn)的腳本編寫人員 如果您已經(jīng)掌握一門腳本語言,如 VBScript、JavaScript或PERL,而且您已經(jīng)了解使用ASP的方法。只要安裝了符合ActiveX腳本標(biāo)準(zhǔn)的相應(yīng)腳本引擎,就可以在ASP頁中使用任何一種腳本語言。ASP帶有Microsoft Visual Basic Scripting Edition(VBScript)和Microsoft JScript的腳本引擎,這樣您可以立即開始編輯腳本。PERL、REXX和Python 的ActiveX腳本引擎可以從第三方開發(fā)人員處獲得。Web開發(fā)人員如果您已經(jīng)掌握了一門編程語言,如Visual Basic,您將發(fā)現(xiàn)ASP是快速創(chuàng)建Web應(yīng)用程序的一個(gè)非常靈活的方法。通過向HTML中添加腳本命令,您能夠創(chuàng)建應(yīng)用程序的HTML接口。通過創(chuàng)建自己的ActiveX組件,可以將應(yīng)用程序中的商業(yè)邏輯封裝到能夠從腳本、其他組件或從其他程序中調(diào)用的模塊。使用ASP進(jìn)行計(jì)算的Web可轉(zhuǎn)化為有形的利益,它使Web供應(yīng)商能夠提供交互的商業(yè)應(yīng)用而不僅僅是發(fā)布內(nèi)容。例如,旅行社能夠比公布航空時(shí)刻表做得更多;用ASP腳本可以讓客戶察看現(xiàn)有的航班、比較費(fèi)用并預(yù)定座位。 包含在Windows NT Option pack中的Microsoft Transaction Server(MTS)可以降低在服務(wù)器上構(gòu)造程序的復(fù)雜性和費(fèi)用。MTS可以解決開發(fā)那些保密性強(qiáng)的、可分級的以及可靠的Web應(yīng)用程序的復(fù)雜性問題。 Active Server Pages模型瀏覽器從Web服務(wù)器上請求.asp文件時(shí),ASP腳本開始運(yùn)行。然后Web服務(wù)器調(diào)用ASP,ASP全面讀取請求的文件,執(zhí)行所有腳本命令,并將Web頁傳送給瀏覽器。由于腳本在服務(wù)器上而不是在客戶端運(yùn)行,傳送到瀏覽器上的Web頁是在Web服務(wù)器上生成的。所以不必?fù)?dān)心瀏覽器能否處理腳本:Web服務(wù)器已經(jīng)完成了所有腳本的處理,并將標(biāo)準(zhǔn)的HTML傳輸?shù)綖g覽器。由于只有腳本的結(jié)果返回到瀏覽器,所以服務(wù)器端腳本不易復(fù)制。用戶看不到創(chuàng)建他們正在瀏覽的頁的腳本命令。二、ASP的新功能ActiveServerPages在功能方面有所增強(qiáng),更易于開發(fā)應(yīng)用程序。Microsoft腳本調(diào)試程序。您可以使用腳本調(diào)試程序調(diào)試.asp文件。請參閱調(diào)試ASP腳本。事務(wù)性腳本。ASP頁和頁中使用的對象可以運(yùn)行于事務(wù)環(huán)境之下。在頁上的全部工作只有兩種結(jié)果:提交或終止。事務(wù)可以保護(hù)應(yīng)用程序免于因失敗而導(dǎo)致數(shù)據(jù)丟失。請參閱創(chuàng)建事務(wù)性腳本。管理工具。許多應(yīng)用程序設(shè)置可在Internet服務(wù)管理器上進(jìn)行,這是Internet Information Server和Personal Web Server(在WindowsNT Workstation上)的管理工具。請參閱配置ASP應(yīng)用程序。隔離ASP應(yīng)用程序。您可以隔離ASP應(yīng)用程序以便它們能在Web服務(wù)器上獨(dú)立的內(nèi)存空間內(nèi)運(yùn)行。萬一某個(gè)應(yīng)用程序失敗時(shí),可以保護(hù)其他應(yīng)用程序和Web服務(wù)器。它也使您可以在不停止Web服務(wù)器的情況下,停止一個(gè)應(yīng)用程序或從內(nèi)存中卸載其組件。請參閱隔離應(yīng)用程序.文件上載。瀏覽器可以通過Posting Acceptor應(yīng)用程序?qū)⑽募陷d到Web服務(wù)器。可以編寫ASP腳本來發(fā)送帶有從Posting Acceptor傳來的信息的email,如每一個(gè)上載文件的位置和名稱。請參閱Posting Accepter文檔(在Microsoft Site Server Express的目錄表中)。新的ASP組件。ASP提供了新的基礎(chǔ)組件。有關(guān)概述請參閱ActiveX組件。應(yīng)用程序根目錄的改變。ASP應(yīng)用程序的根目錄在您的Web站點(diǎn)上可以是物理目錄。以前,根目錄必須映射為虛擬目錄?,F(xiàn)在可以用Internet服務(wù)管理器指示ASP應(yīng)用程序的根目錄。請參閱創(chuàng)建應(yīng)用程序。必須將.asp文件置于應(yīng)用程序樹中,Web服務(wù)器才能檢測文件的改變并且自動(dòng)重裝它們。支持Internet Explorer4.0通道和Web預(yù)測。當(dāng)ASP要發(fā)送包含通道定義命令的文件時(shí),它會(huì)自動(dòng)告訴Internet Explorer4.0。使用ASP很容易就能生成通道定義(.cdf)文件。支持HTTP1.1協(xié)議。Internet Information Server和Personal Web Server支持HTTP1.1協(xié)議。在響應(yīng)支持HTTP1.1的瀏覽器(例如Internet Explorer4.0)時(shí),這一支持可使ASP利用新協(xié)議的高效率。例如,當(dāng)向?yàn)g覽器返回頁的時(shí)候,ASP使用大塊轉(zhuǎn)換編碼以提高網(wǎng)絡(luò)效率。三、創(chuàng)建ASP頁Active Server Pages(ASP)文件是以.asp為擴(kuò)展名的文本文件,這個(gè)文本文件可以包括下列部分的任意組合:文本HTML標(biāo)記ASP腳本命令創(chuàng)建.asp文件非常容易。如果要在HTML文件中添加腳本,只需將該文件的擴(kuò)展名.htm或.html替換為.asp就可以了。要使.asp文件可用于Web用戶,請將這個(gè)新文件保存在Web站點(diǎn)上的目錄中(請確定啟用了該目錄的腳本和執(zhí)行權(quán)限)。使用瀏覽器查看該文件時(shí),可以看到ASP處理并返回了HTML頁?,F(xiàn)在可以在.asp文件中添加腳本命令了。注意因?yàn)?asp文件需要額外的處理,請不要將所有的HTML頁都轉(zhuǎn)換為ASP頁。應(yīng)該只將包含腳本命令的文件轉(zhuǎn)換為.asp文件。.asp和.htm文件可以放置在相同的目錄中。使用任何的文本編輯器都可以創(chuàng)建.asp文件。使用那些帶有ASP增強(qiáng)支持的編輯器將更能提高效率,如MicrosoftVisual InterDev。如果您從未使用過HTML,請考慮先使用Microsoft FrontPage。使用FrontPage創(chuàng)建文檔和格式化文本就象使用文字處理工具一樣簡單。接下來還可以使用Insert Script命令在FrontPage創(chuàng)建的HTML頁中加入簡單的ASP命令。加入Script命令腳本是一系列的命令和指令。與HTML標(biāo)簽不同,script命令指示W(wǎng)eb服務(wù)器執(zhí)行操作,而HTML標(biāo)簽只是簡單地格式化文本或讀取圖形、視頻及音頻文件。Script 命令可以在變量中存儲(chǔ)用戶名,在返回到瀏覽器的頁中顯示用戶名或?qū)⒂脩裘鎯?chǔ)在數(shù)據(jù)庫中。腳本命令通過定界符與文本區(qū)別開來。定界符是字符或一串字符,它標(biāo)志單元開始或結(jié)束。HTML使用定界符棗小于號(hào)()括入HTML標(biāo)簽。 ASP使用定界符 括入腳本命令。您可以在定界符中括入任何命令,只要這些命令對正在使用的腳本語言有效。下面的例子展示了包含腳本命令的簡單的HTML頁:This page was last refreshed on .VBScript函數(shù)Now返回當(dāng)前的日期和時(shí)間。Web服務(wù)器處理該頁時(shí),會(huì)使用當(dāng)前的日期和時(shí)間替換并且將該頁返回到瀏覽器:This page was last refreshed on 8/1/97 2:20:00 PM.定界符括入的命令被稱為主腳本命令。這些命令被主腳本語言處理。在腳本定界符中使用的任何命令都必須對主腳本語言有效。默認(rèn)情況下,主腳本語言是VBScript。要設(shè)置另一種語言。請參閱使用腳本語言。如果您已經(jīng)熟悉了客戶端腳本編寫(編寫在瀏覽器上運(yùn)行的腳本),請注意不要用HTML元素括入表達(dá)式。在編寫服務(wù)器端腳本時(shí),只用元素在主腳本語言外的其他語言中定義過程。關(guān)于詳細(xì)信息,請參閱使用腳本語言。合成HTML和腳本命令在ASP定界符中可以包含任何在主腳本語言中合法的語句、表達(dá)式、過程或操作符。在 VBScript 和其他腳本語言中,語句是語法完整的單元,該單元表達(dá)某項(xiàng)活動(dòng)、聲明或定義。下面的條件語句 If.Then.Else 是一條常見的VBScript語句。= #12:00:00 AM# And Time 這條語句將值Good Morning!或值Hello!存儲(chǔ)在變量greeting中。命令將當(dāng)前的變量值發(fā)送到瀏覽器中。這樣,在(Web服務(wù)器所在時(shí)區(qū)的)正午12點(diǎn)前瀏覽該腳本的用戶將看到:Good Morning!在正午12點(diǎn)或以后瀏覽此腳本的用戶將看到:Hello!在語句的不同部分之間可以加入HTML文本。例如,下面的腳本在If.Then.Else語句中加入了HTML,產(chǎn)生了與上面腳本同樣的結(jié)果:= #12:00:00 AM# And Time Good Morning!Hello!如果條件為真,也就是說,如果時(shí)間為午夜、午夜以后或者中午以前,那么Web服務(wù)器將跟隨條件(Good Morning)的HTML發(fā)送到瀏覽器;否則,將跟隨Else的HTML(Hello)發(fā)送到瀏覽器。這種混合HTML和腳本命令的方式可以方便地將 If.Then.Else語句變換為幾行HTML文本。如果要在Web頁上顯示多處問候,前一個(gè)例子更為有用。只需要設(shè)置一次變量,就可以重復(fù)顯示。最好從腳本命令中將HTML文本返回到瀏覽器,而不用腳本命令散布HTML文本。要將文本返回到瀏覽器,請使用ASP的內(nèi)建對象Response。下面的例子可以產(chǎn)生與前一個(gè)腳本同樣的結(jié)果:= #12:00:00 AM# And Time Response.Write將跟隨的文本發(fā)送到瀏覽器。要?jiǎng)討B(tài)構(gòu)造返回瀏覽器的文本,請?jiān)谡Z句中使用Response.Write。例如,可能要構(gòu)造包含一些變量值的字符串。在使用組件和對象以及向?yàn)g覽器傳送內(nèi)容中將了解到更多有關(guān)Response對象和一般對象的信息。現(xiàn)在,先了解將腳本命令插入到HTML頁中的幾種方法。在ASP定界符中可以包含用默認(rèn)主腳本語言編寫的過程。詳細(xì)信息,請參閱使用腳本語言。如果正在使用JScript命令,可以插入花括號(hào)指示語句塊直接進(jìn)入ASP命令,而不用考慮它是否夾雜著HTML標(biāo)簽和文本。例如:This is the text version of a page.This is the multimedia version of a page.使用ASP指令 ASP提供了您使用的腳本語言以外的指令。這是一些輸出指令和處理指令。ASP的輸出指令顯示表達(dá)式的值。這個(gè)輸出指令等同于使用Response.Write顯示信息。例如,輸出表達(dá)式 將文字climbing(變量當(dāng)前的值)傳送到瀏覽器。ASP處理指令 為ASP提供處理 .asp 文件所需的信息。例如,下面的指令將VBScript設(shè)為該頁的主腳本語言: 處理指令必須出現(xiàn)在.asp文件的第一行。不要將處理指令放在包含#include語句的文件中。必須在at標(biāo)記()和關(guān)鍵字之間加入一個(gè)空格。處理指令有下列關(guān)鍵字: LANGUAGE 關(guān)鍵字設(shè)置頁的腳本語言;請參閱使用腳本語言。 CODEPAGE 關(guān)鍵字設(shè)置頁的代碼頁(字符編碼);請參閱使用國際站點(diǎn)。 LCID 關(guān)鍵字設(shè)置頁的現(xiàn)場標(biāo)識(shí)符;請參閱使用國際站點(diǎn)。 TRANSACTION 關(guān)鍵字指定將在事務(wù)處理環(huán)境下運(yùn)行的頁;請參閱創(chuàng)建事務(wù)處理腳本。 ENABLESESSIONSTATE 關(guān)鍵字指定ASP頁是否使用會(huì)話狀態(tài);請參閱管理會(huì)話。 可以在單個(gè)指令中包含多個(gè)關(guān)鍵字;關(guān)鍵字/值對之間必須由空格分開。不要在等號(hào)(=)左右加入空格。下面的例子中設(shè)置了腳本語言和代碼頁:在腳本中的空白字符如果您的主腳本語言是VBScript或者JScript,ASP從指令中刪除空白字符。使用其他腳本語言時(shí),ASP保留空白字符,這樣那些需要使用位置和縮進(jìn)的語言,如Python就可以被正確解釋了??瞻鬃址崭瘛⒅票矸?、回車和換行符。使用VBScript和JScript時(shí),在打開定界符之后和關(guān)閉定界符之前使用空白字符更容易閱讀命令。下面的命令都是合法的:ASP將一個(gè)語句的關(guān)閉定界符與下一個(gè)語句的打開定界符之間的空白字符刪除。要保留兩個(gè)語句間的空白字符,比如在句子中顯示變量值的時(shí)候,請使用HTML不間斷空符( )。例如:My response is to say  . 四、使用腳本語言腳本語言是介于HTML和Java、C+和Visual Basic之類的編程語言之間的語言。HTML通常用于格式化文本和鏈接網(wǎng)頁。編程語言通常用于向計(jì)算機(jī)發(fā)送一系列復(fù)雜指令。腳本語言也可用來向計(jì)算機(jī)發(fā)送指令,但它們的語法和規(guī)則沒有可編譯的編程語言那樣嚴(yán)格和復(fù)雜。腳本語言主要用于格式化文本和使用以編程語言編寫的已編譯好的組件。Active Server Pages使Web開發(fā)商用多種腳本語言編寫完整的過程成為可能。事實(shí)上,在單個(gè).asp文件內(nèi)部就可以使用多種腳本語言。另外,由于腳本是在服務(wù)器端讀取和處理的,所以請求.asp文件的客戶端瀏覽器并不需要支持腳本。您可以使用任意一種其相應(yīng)的腳本引擎已安裝在Web服務(wù)器上的腳本語言。腳本引擎是處理用某種語言書寫的命令的程序。Active Server Pages帶有兩個(gè)腳本引擎:Microsoft Visual Basic Scripting Edition(VBScript)和Microsoft JScript。您也可以安裝和使用其他的腳本語言引擎,例如 REXX和Perl。如果您已經(jīng)是Visual Basic程序員,就可以馬上使用VBScript,它是Visual Basic的子集。如果您是Java、C或C+程序員,您會(huì)發(fā)現(xiàn)JScript語法對您來說是熟悉的,雖然JScript與Java或C并沒有聯(lián)系。如果您熟悉其他腳本語言,例如REXX或Perl,您可獲取和安裝相應(yīng)的腳本引擎,這樣就可以使用您熟悉的腳本語言了。Active Server Pages是ActiveX腳本的宿主。要使用一種語言,必須安裝腳本引擎,該引擎必須遵循ActiveX腳本標(biāo)準(zhǔn)并作為一個(gè)COM(組件對象模型)對象駐留在Web服務(wù)器上。設(shè)置主腳本語言ASP主腳本語言是用來處理在分界符 內(nèi)部的命令的語言。默認(rèn)時(shí),主腳本語言是VBScript。您可以將任何一種具有腳本引擎的腳本語言作為主腳本語言。您可以逐頁設(shè)置主腳本語言,也可以在ASP應(yīng)用程序中設(shè)置所有頁的主腳本語言。為某頁設(shè)置語言要設(shè)置單個(gè)頁的主腳本語言,可將指令添加到.asp文件的開頭。該指令的語法是:其中Scripting Language就是您所設(shè)置的頁的主腳本語言。如果對某頁進(jìn)行了設(shè)置,那么該頁將忽略在應(yīng)用程序中對所有頁的全局設(shè)置。請遵循使用ASP指令的指導(dǎo)。詳細(xì)信息,請參閱“創(chuàng)建ASP頁”。注意要將不支持Object.Method語法的語言作為主腳本語言使用,必須先創(chuàng)建Language Engines注冊表鍵。詳細(xì)信息,請參閱注冊表。為應(yīng)用程序設(shè)置語言在應(yīng)用程序中,如要為所有頁設(shè)置主腳本語言,可在Internet服務(wù)管理器的“App 選項(xiàng)選項(xiàng)卡上設(shè)置默認(rèn)的ASP語言屬性。詳細(xì)信息,請參閱配置ASP應(yīng)用程序。在服務(wù)器上使用VBScript和JScript在服務(wù)端通過ASP使用VBScript時(shí),兩個(gè)VBScript特征將失效。由于Active Server Pages腳本是在服務(wù)器端執(zhí)行的,表示用戶接口的元素的VBScript語句InputBox和MsgBox將不被支持。另外,在服務(wù)器端的腳本中,請不要使用VBScript函數(shù)CreateObject和GetObject。而要使用Server.CreateObject,這樣ASP就可以跟蹤對象實(shí)例了。用CreateObject或GetObject創(chuàng)建的對象不能訪問ASP內(nèi)建對象,也不能參與事務(wù)處理。該規(guī)則的一個(gè)例外是如果您使用的是Admin對象和Java monikers。詳細(xì)信息,請參閱IIS Admin對象和創(chuàng)建Java類的實(shí)例。關(guān)于所有VBScript和JScript的操作符、函數(shù)、語句、對象、屬性及方法的列表及詳細(xì)說明,請參閱VBScript語言參考 和JScript語言參考。包含注釋由于ASP腳本是在服務(wù)器端處理的,所以即使客戶端的瀏覽器不支持腳本語言,也不必通過包含進(jìn)HTML注釋標(biāo)記來隱藏腳本,但客戶端的腳本則通常需要這樣處理。在內(nèi)容送到瀏覽器之前,所有ASP命令都已被處理好了。您可用HTML注釋將注釋加進(jìn)HTML頁。注釋將返回給瀏覽器,若用戶瀏覽HTML源文件,就可以看見。VBScript注釋VBScript支持撇號(hào)型注釋。與HTML注釋不同,當(dāng)處理腳本時(shí),它們將被刪除,而不是被送到瀏覽器。 輸出表達(dá)式不能包括注釋。例如,下面的第一行將正常運(yùn)行,而第二行則不能,因?yàn)樗且?%= 開頭的。 JScript注釋JScript支持/注釋符。每一個(gè)注釋行中都必須使用該注釋符。 / This is a definition for the procedure PrintDate. function PrintDate() var xx = new Date() / This line sends the current date to the browser, / translated to a string.Response.Write(x.toString() 大小寫敏感性VBScript不區(qū)分大小寫。例如,您可以用Request或request來引用ASP Request對象。不區(qū)分大小寫的后果是您不能用大小寫來區(qū)分變量名。例如,您不能創(chuàng)建兩個(gè)名為Color和color的單獨(dú)變量。JScript區(qū)分大小寫。要在腳本中使用JScript關(guān)鍵字,就必須按參考頁中所示的大小寫來書寫。例如,用date來代替Date將導(dǎo)致錯(cuò)誤。在JScript中,對象名必須大寫;方法名和屬性名可大寫也可小寫。本文所示的ASP內(nèi)建對象的情況將在JScript命令中正常工作。五、使用變量和常量變量是計(jì)算機(jī)內(nèi)存中已命名的存儲(chǔ)位置,其中包含了數(shù)字或字符串等數(shù)據(jù)。變量包含的信息被稱為變量的值。變量使用用戶便于理解腳本操作的名稱為用戶提供了一種存儲(chǔ)、檢索和操作數(shù)據(jù)的途徑。聲明和命名變量命名和聲明變量應(yīng)遵循腳本語言的規(guī)則及指導(dǎo)。即使在使用變量前不需要去聲明變量,也應(yīng)養(yǎng)成在編程時(shí)聲明變量的良好習(xí)慣,因?yàn)檫@樣有助于防止錯(cuò)誤發(fā)生。聲明一個(gè)變量意味著告訴腳本引擎,有一個(gè)特定名稱的變量,這樣就可以在腳本中引用該變量。VBScriptVBScript并不需要聲明變量,但在使用所有變量前聲明它們是一種好的腳本書寫習(xí)慣。要在VBScript中聲明變量,請用 Dim、Public或Private語句。例如:可以在需要顯式聲明變量的.asp文件中用VBScript Option Explicit語句。Option Explicit必須在任何一個(gè)ASP指令之后及任何一個(gè)HTML文本或腳本命令之前出現(xiàn)。該語句僅影響用VBScript書寫的ASP命令,而不會(huì)影響JScript命令。關(guān)于這些命令的詳細(xì)信息,請參閱VBScript語言參考。JScriptMicrosoft JScript僅當(dāng)變量為本地過程變量時(shí)才需聲明,但在使用所有變量前聲明它們是一種好的腳本書寫習(xí)慣。要聲明一個(gè)變量,請使用var語句。例如:有關(guān)var語句的詳細(xì)信息,請參閱JScript語言參考。變量作用域變量的作用域即生命期,決定哪些腳本命令可訪問變量。在過程內(nèi)部聲明的變量具有局部作用域。每執(zhí)行一次過程,變量就被創(chuàng)建然后消亡。而過程外部的任何命令都不能訪問它。在過程外部聲明的變量具有全局作用域,其值能被ASP頁上的任何腳本命令訪問和修改。聲明變量時(shí),局部變量和全局變量可以有相同的名稱。而改變其中一個(gè)的值并不會(huì)改變另一個(gè)的值。如果沒有聲明變量,則可能不小心會(huì)改變一個(gè)全局變量的值。例如,以下腳本命令返回值1,雖然有兩個(gè)名為Y變量: 由于變量沒有顯式聲明,以下的腳本命令將返回2。當(dāng)過程調(diào)用將Y設(shè)置為2時(shí),腳本引擎認(rèn)為該過程是要修改全局變量:養(yǎng)成顯式聲明所有變量的編程習(xí)慣可以避免許多問題。尤其在當(dāng)您用#include語句將文件包含進(jìn)ASP主頁時(shí),就顯得更為重要。一個(gè)獨(dú)立文件中被包含的腳本是被當(dāng)作整個(gè)包含它的文件的一部分來處理的。用不同的名稱來命名主腳本和被包含腳本中用到的變量,這容易被遺忘,除非聲明變量。為變量賦予會(huì)話或應(yīng)用程序作用域全局變量僅在單個(gè)ASP頁中可用,要使它在單個(gè)ASP頁之外可用,就必須為變量賦予會(huì)話或應(yīng)用程序作用域。會(huì)話作用域變量對一個(gè)用戶所請求的ASP應(yīng)用程序中的所有頁都是可用的。應(yīng)用程序作用域變量也如此。對單個(gè)用戶來說,會(huì)話變量是存儲(chǔ)信息的最佳途徑,例如,首選項(xiàng)、用戶名或用戶標(biāo)識(shí)。對于一個(gè)特殊應(yīng)用程序的所有用戶,應(yīng)用程序作用域是存儲(chǔ)信息的最佳途徑,例如,應(yīng)用程序特定的問候語或應(yīng)用程序所需的初始值。ASP提供兩個(gè)內(nèi)建對象來讓您存儲(chǔ)變量:Session對象和Application對象。您也可以創(chuàng)建具有會(huì)話或應(yīng)用程序作用域的對象實(shí)例。詳細(xì)信息,請參閱設(shè)置對象作用域。會(huì)話作用域要為變量賦予會(huì)話作用域,將該變量存儲(chǔ)到Session對象中即可,方法是為該對象的已命名條目指派一個(gè)值。例如,以下命令將兩個(gè)新的變量存儲(chǔ)到Session對象中。要Session對象中檢索信息,可以用輸出指令(%=)或Response.Write訪問已命名的條目。以下示例用輸出指令顯示 Session(FirstName) 的當(dāng)前值:Welcome 可在Session對象中存儲(chǔ)用戶首選項(xiàng),然后就可以訪問這些首選項(xiàng),從而決定將哪一頁返回給用戶。例如,您可以允許用戶在應(yīng)用程序的第一頁指定純文本內(nèi)容,然后將這一選擇應(yīng)用到用戶在該應(yīng)用程序中訪問的所有后續(xù)頁。 This is the text version of the page. This is the multimedia version of the page.應(yīng)用程序作用域要為變量賦予應(yīng)用程序作用域,將該變量存儲(chǔ)到Application對象中即可,方法是為該對象的已命名條目指派一個(gè)值。例如,以下命令將一個(gè)應(yīng)用程序特定的問候語存儲(chǔ)到Application對象中:要從Application對象中檢索信息,可以使用ASP輸出指令(%=)或Response.Write從該應(yīng)用程序的任意后續(xù)頁中訪問已命名條目。以下示例用輸出指令顯示Application(Greeting)的值:使用常量常量是用來代替一個(gè)數(shù)或字符串的名稱。一些隨ASP提供的基本組件,例如ActiveX Data Objects(ADO),定義了您在腳本中可以使用的常量。組件可在一個(gè)組件類型庫中聲明常量,組件類型庫是一個(gè)包含ActiveX組件所支持的對象和類型的信息的文件。一旦在Global.asa文件中聲明了一個(gè)類型庫,您就可以在該應(yīng)用程序的任意頁中使用已定義的常量??稍贕lobal.asa中用標(biāo)記為應(yīng)用程序聲明類型庫。例如,要聲明ADO類型庫,可用以下語句:這樣,您就可以在與Global.asa文件相同的應(yīng)用程序的中使用ADO常量。在下面的示例中,adOpenKeyset和adLockOptimistic是ADO常量:Create and Open Recordset ObjectSet RsCustomerList = Server.CreateObject(ADODB.Recordset)RsCustomerList.ActiveConnection = OBJdbConnectionRsCustomerList.CursorType = adOpenKeysetRsCustomerList.LockType = adLockOptimistic有關(guān)標(biāo)記的參考信息,請參閱TypeLibrary聲明。在以前版本的ASP中,一些組件在文件中提供常量定義,每個(gè)使用那些組件的ASP文件必須包含該文件。用#include指令來包含常量定義的用法仍被支持,但使用類型庫通常更方便并且能使腳本更易于升級。在以后版本的ASP中,組件可能將不再提供常量定義文件。您可以定義自己的常量。在VBScript中,用Const語句,在JScript中,用var語句。如果在多個(gè)ASP頁中使用常量,可在獨(dú)立的文件中放置常量,然后將其包含進(jìn)每一個(gè)使用該常量的ASP文件中去。六、使用集合大多數(shù)ASP內(nèi)建對象支持集合。集合是存儲(chǔ)字符串、數(shù)字、對象和其他值的地方。除了在存儲(chǔ)或取出項(xiàng)目時(shí)集合會(huì)自動(dòng)擴(kuò)展與搜索外,集合與數(shù)組非常相近。與數(shù)組不同的是,集合被修改后,項(xiàng)目的位置將會(huì)移動(dòng)??梢酝ㄟ^集合中項(xiàng)目的名稱、索引或者通過在集合的所有項(xiàng)目中遍歷訪問項(xiàng)目。通過名稱和索引訪問項(xiàng)目通過使用項(xiàng)目名稱可以訪問集合中的具體項(xiàng)目。例如,Contents集合擁有在Session對象中保存的所有變量。同樣也擁有由Server.CreateObject創(chuàng)建的所有對象。假設(shè)在Session對象中存儲(chǔ)了下列用戶信息:可以使用在集合中存儲(chǔ)項(xiàng)目時(shí)關(guān)聯(lián)的名稱訪問項(xiàng)目。例如,下面的表達(dá)式返回字符串“Sam:通過使用與項(xiàng)目關(guān)聯(lián)的索引或號(hào)碼也可以訪問項(xiàng)目。例如,下面的表達(dá)式檢索存儲(chǔ)在Session對象的第二個(gè)存儲(chǔ)槽中的信息并且返回Woo:ASP集合從1開始編號(hào)。當(dāng)在集合中增加或刪除項(xiàng)目時(shí),與項(xiàng)目關(guān)聯(lián)的索引將會(huì)改變。所以不能認(rèn)為項(xiàng)目的索引始終不變。正如將在下面的主題中說明的那樣,利用索引的訪問一般用來遍歷集合,或訪問只讀集合中的項(xiàng)目。通過使用速記的名稱可以訪問項(xiàng)目。ASP以特定的順序搜索與對象關(guān)聯(lián)的集合。如果在對象的集合中特定名稱的項(xiàng)目只出現(xiàn)一次的話,可以消除該集合的名稱:訪問存儲(chǔ)在Application或Session對象中的項(xiàng)目時(shí),消除集合名稱一般是安全的。但是,對于Request對象,最好指定集合名稱,因?yàn)樵摷虾芸赡馨貜?fù)的名稱。遍歷集合在集合的所有項(xiàng)目中遍歷可以了解集合中存儲(chǔ)的項(xiàng)目或修改項(xiàng)目。遍歷集合時(shí),必須提供集合名稱。例如,可以使用VBScript中的For.Each語句訪問存儲(chǔ)在Session對象中的項(xiàng)目:% Declare a counter variable.Dim Item For each item in the collection, display its value.For Each Item in Session.Contents Response.Write Session.Contents(Item) & Next%可以使用VBScript中的For.Next語句遍歷集合。例如,要列出上例中存儲(chǔ)在Session中的三個(gè)項(xiàng)目,可以使用下列語句。% Declare a counter variable.Dim ItemRepeat the loop until the value of counter is equal to 3.For Item = 1 to 3Response.Write Session.Contents(Item) & Next%因?yàn)橐话悴恢来鎯?chǔ)在集合中的項(xiàng)目個(gè)數(shù),ASP支持集合的Count屬性,這個(gè)屬性返回集合中的項(xiàng)目數(shù)??梢允笴ount屬性指定計(jì)數(shù)器的終值。% Declare a counter variable.Dim ItemRepeat this loop until the counter equals the number of itemsin the collection.For Item = 1 to Session.Contents.CountResponse.Write Session.Contents(Item) & Next%可以在腳本中使用for語句在集合中循環(huán)。在JScript的for語句中使用Count屬性時(shí),為了收到更大的效果,應(yīng)該將Count值分配給本地變量并使用該變量設(shè)置計(jì)數(shù)器終值。這樣,腳本引擎就不需要每次循環(huán)都查尋Count的值。下面的例子展示了這個(gè)技巧:% var item, numitems;numitems = Session.Contents.Count;for(item = 1; item = numitems; item+) Response.Write(Session.Contents(item) + )%Microsoft JScript 3.0引入了Enumerator對象??梢允褂迷搶ο蟊闅vASP集合。atEnd方法指出了集合中是否還存在項(xiàng)目。moveNext方法移動(dòng)到集合中的下一個(gè)項(xiàng)目。%/ Create an Enumerator objectvar mycoll = new Enumerator(Session.Contents);/Iterate through the collection and display each itemwhile (!mycoll.atEnd() var x = mycoll.item();Response.Write(Session.Contents(x) + );mycoll.moveNext();%遍歷帶子關(guān)鍵字(Subkeys)的集合腳本在單一cookie中嵌入相關(guān)值以減少在瀏覽器和Web服務(wù)器之間傳送的cookie數(shù)目。因此Request和Response對象的Cookies集合能夠在單一項(xiàng)目中擁有多個(gè)值。這些子項(xiàng)目或子關(guān)鍵字可以被單個(gè)訪問。只有Request.Cookies和 Response.Cookies集合支持子關(guān)鍵字(Subkeys)。Request.Cookies只支持讀操作;Response.Cookies只支持寫操作??梢粤信eRequest.Cookie集合中所有的cookie以及Cookie中所有的子關(guān)鍵字(Subkeys)。但是,如果在沒有子關(guān)鍵字(Subkeys)的Cookie上遍歷子關(guān)鍵字,將不會(huì)產(chǎn)生任何結(jié)果。通過使用.HasKeys語法首先檢查cookie是否含有子關(guān)鍵字 (Subkeys),就可以避免這種情況。下面的這個(gè)例子展示了這個(gè)技巧。% Declare counter variablesDim Cookie, SubkeyDisplay the entire cookie collection.For Each Cookie in Request.CookiesResponse.Write Cookie & If Request.Cookies(Cookie).HasKeys ThenDisplay the subkeysFor Each Subkey in Request.Cookies(Cookie)Response.Write Subkey & = & Request.Cookies(Cookie)(Subkey) & NextElseResponse.Write No subkeys in this cookie End IfNext %遍歷對象集合Session和Application集合可以保存數(shù)量變量或者對象實(shí)例。Contents集合擁有數(shù)量變量和通過調(diào)用Server.CreateObject生成的對象實(shí)例。StaticObjects集合擁有在Global.asa文件中使用HTML 元素創(chuàng)建的對象。在遍歷包含對象的集合時(shí),可以訪問對象的標(biāo)識(shí)符或?qū)ο蟮姆椒ê蛯傩?。例如,假設(shè)應(yīng)用程序使用一些對象創(chuàng)建用戶帳號(hào),而且每個(gè)對象有初始化方法,可以遍歷StaticObjects集合來調(diào)用每個(gè)初始化方法:ASP集合有何不同之處?盡管在本主題中討論的ASP集合與Visual Basic的Collection對象非常相似,但還是有些不同。ASP集合支持Count屬性和Item方法,但不支持Add和Remove方法。設(shè)置對象作用域?qū)ο蟮淖饔糜驔Q定哪些腳本可以使用該對象。默認(rèn)情況下,當(dāng)您創(chuàng)建對象實(shí)例時(shí),該對象具有頁作用域。同一ASP頁中的任何腳本命令都能使用該頁作用域的對象;當(dāng)ASP頁送回客戶端時(shí),該對象即被釋放。對大多數(shù)對象來說,推薦的作用域是頁作用域。您可以改變一個(gè)對象的作用域,使其可被其他頁的腳本使用。本主題將解釋如何使用頁作用域的對象以及如何改變對象的作用域。使用頁作用域?qū)ο笤贏SP頁上用Server.CreateObject創(chuàng)建的對象在該頁的生存期內(nèi)一直存在。該對象對該頁的任何腳本命令都是可訪問的,當(dāng)ASP處理完該頁時(shí),該對象即被釋放。因此,對象具有該頁的作用域或生命周期。 在用Visual Basic或VBScript編程時(shí),要注意在ASP處理完該頁之前不要釋放對象。例如,以下語句經(jīng)常用于通過將對象變量賦以Nothing值來釋放對象:Set myObj = Nothing如果您在ASP頁中包含了該語句,那么任何使用myObj的企圖都將會(huì)返回一個(gè)預(yù)期的錯(cuò)誤代碼。但在內(nèi)部,即使在對象釋放以后,ASP仍保留對它的引用。當(dāng)您在腳本中不能使用對象時(shí),對象的資源直到ASP處理完頁之后才釋放。同樣,如果您通過創(chuàng)建另一個(gè)對象實(shí)例并將其賦給已使用過的對象變量來釋放該對象時(shí),ASP 將保留對原對象實(shí)例的引用。對大多數(shù)腳本來說,創(chuàng)建多個(gè)對象可能不會(huì)產(chǎn)生問題,但如果對象使用共享資源,比如數(shù)據(jù)庫連接,就有可能出現(xiàn)問題。由于對象有頁作用域,所以不要依靠手工釋放的對象。例如,以下的循環(huán)創(chuàng)建1001個(gè)Connection對象,它將能打開大多數(shù)的連接甚至于一個(gè)大型的SQL server:總的來說,應(yīng)該盡量避免在一個(gè)循環(huán)內(nèi)部創(chuàng)建對象。如果無法避免,您應(yīng)該手工釋放被對象使用過的資源。如果Connection對象僅被創(chuàng)建一次,且數(shù)據(jù)資源的物理連接在每個(gè)循環(huán)中被打開然后關(guān)閉,那么上例將會(huì)正常運(yùn)行:為對象賦予會(huì)話作用域在應(yīng)用程序中,對于每個(gè)新會(huì)話,都會(huì)創(chuàng)建session-scope對象,并且在會(huì)話結(jié)束后會(huì)將其釋放。因此,每個(gè)活動(dòng)的會(huì)話都有一個(gè)對象。會(huì)話作用域用于從多個(gè)腳本中調(diào)用的對象,但只影響一個(gè)用戶會(huì)話。您可以只在需要時(shí)才為對象賦予會(huì)話作用域。如果確實(shí)需要使用會(huì)話作用域,那么就必須了解提供對象的組件的線

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲(chǔ)空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
  • 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論