ASP動態(tài)網(wǎng)站制作基礎(chǔ)知識學(xué)習(xí)_第1頁
ASP動態(tài)網(wǎng)站制作基礎(chǔ)知識學(xué)習(xí)_第2頁
ASP動態(tài)網(wǎng)站制作基礎(chǔ)知識學(xué)習(xí)_第3頁
ASP動態(tài)網(wǎng)站制作基礎(chǔ)知識學(xué)習(xí)_第4頁
ASP動態(tài)網(wǎng)站制作基礎(chǔ)知識學(xué)習(xí)_第5頁
已閱讀5頁,還剩99頁未讀, 繼續(xù)免費閱讀

下載本文檔

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

文檔簡介

目錄一、關(guān)于ASP二、ASP的新功能三、創(chuàng)立ASP頁四、使用腳本語言五、使用變量和常量六、使用集合七、ASP內(nèi)建對象八、向瀏覽器發(fā)送內(nèi)容九、包含文件十、訪問數(shù)據(jù)庫十一、調(diào)試ASP腳本十二、維護(hù)ASP應(yīng)用程序的平安一、關(guān)于ASPActiveServerPages〔ASP〕是效勞器端腳本編寫環(huán)境,使用它可以創(chuàng)立和運行動態(tài)、交互的Web效勞器應(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ù),或用顧客的姓名個人化HTML文件,或根據(jù)瀏覽器的不同使用不同的特性,您會發(fā)現(xiàn)ASP提供了一個出色的解決方案。以前,要想從HTML表格中收集數(shù)據(jù),就不得不學(xué)習(xí)一門編程語言來創(chuàng)立一個CGI應(yīng)用程序?,F(xiàn)在,您只要將一些簡單的指令嵌入到您的HTML文件中,就可以從表格中收集數(shù)據(jù)并進(jìn)行分析。您再不必學(xué)習(xí)完整的編程語言或者單獨編譯程序來創(chuàng)立交互頁。隨著不斷掌握使用ASP和腳本語言的技巧,您可以創(chuàng)立更復(fù)雜的腳本。對于ASP,您可以便捷地使用ActiveX組件來執(zhí)行復(fù)雜的任務(wù),比方連接數(shù)據(jù)庫以存儲和檢索信息。對ASP腳本的逐步介紹,請參閱ASP教程。然后您可以再回到這些主題中了解關(guān)于編寫ASP腳本的詳細(xì)信息。有經(jīng)驗的腳本編寫人員如果您已經(jīng)掌握一門腳本語言,如VBScript、JavaScript或PERL,而且您已經(jīng)了解使用ASP的方法。只要安裝了符合ActiveX腳本標(biāo)準(zhǔn)的相應(yīng)腳本引擎,就可以在ASP頁中使用任何一種腳本語言。ASP帶有MicrosoftVisualBasicScriptingEdition〔VBScript〕和MicrosoftJScript的腳本引擎,這樣您可以立即開始編輯腳本。PERL、REXX和Python的ActiveX腳本引擎可以從第三方開發(fā)人員處獲得。Web開發(fā)人員如果您已經(jīng)掌握了一門編程語言,如VisualBasic,您將發(fā)現(xiàn)ASP是快速創(chuàng)立Web應(yīng)用程序的一個非常靈活的方法。通過向HTML中添加腳本命令,您能夠創(chuàng)立應(yīng)用程序的HTML接口。通過創(chuàng)立自己的ActiveX組件,可以將應(yīng)用程序中的商業(yè)邏輯封裝到能夠從腳本、其他組件或從其他程序中調(diào)用的模塊。使用ASP進(jìn)行計算的Web可轉(zhuǎn)化為有形的利益,它使Web供給商能夠提供交互的商業(yè)應(yīng)用而不僅僅是發(fā)布內(nèi)容。例如,旅行社能夠比公布航空時刻表做得更多;用ASP腳本可以讓客戶觀察現(xiàn)有的航班、比擬費用并預(yù)定座位。包含在WindowsNTOptionpack中的MicrosoftTransactionServer〔MTS〕可以降低在效勞器上構(gòu)造程序的復(fù)雜性和費用。MTS可以解決開發(fā)那些保密性強(qiáng)的、可分級的以及可靠的Web應(yīng)用程序的復(fù)雜性問題。ActiveServerPages模型瀏覽器從Web效勞器上請求.asp文件時,ASP腳本開始運行。然后Web效勞器調(diào)用ASP,ASP全面讀取請求的文件,執(zhí)行所有腳本命令,并將Web頁傳送給瀏覽器。由于腳本在效勞器上而不是在客戶端運行,傳送到瀏覽器上的Web頁是在Web效勞器上生成的。所以不必?fù)?dān)憂瀏覽器能否處理腳本:Web效勞器已經(jīng)完成了所有腳本的處理,并將標(biāo)準(zhǔn)的HTML傳輸?shù)綖g覽器。由于只有腳本的結(jié)果返回到瀏覽器,所以效勞器端腳本不易復(fù)制。用戶看不到創(chuàng)立他們正在瀏覽的頁的腳本命令。二、ASP的新功能ActiveServerPages在功能方面有所增強(qiáng),更易于開發(fā)應(yīng)用程序。Microsoft腳本調(diào)試程序。您可以使用腳本調(diào)試程序調(diào)試.asp文件。請參閱調(diào)試ASP腳本。事務(wù)性腳本。ASP頁和頁中使用的對象可以運行于事務(wù)環(huán)境之下。在頁上的全部工作只有兩種結(jié)果:提交或終止。事務(wù)可以保護(hù)應(yīng)用程序免于因失敗而導(dǎo)致數(shù)據(jù)喪失。請參閱創(chuàng)立事務(wù)性腳本。管理工具。許多應(yīng)用程序設(shè)置可在Internet效勞管理器上進(jìn)行,這是InternetInformationServer和PersonalWebServer〔在WindowsNTWorkstation上〕的管理工具。請參閱配置ASP應(yīng)用程序。隔離ASP應(yīng)用程序。您可以隔離ASP應(yīng)用程序以便它們能在Web效勞器上獨立的內(nèi)存空間內(nèi)運行。萬一某個應(yīng)用程序失敗時,可以保護(hù)其他應(yīng)用程序和Web效勞器。它也使您可以在不停止Web效勞器的情況下,停止一個應(yīng)用程序或從內(nèi)存中卸載其組件。請參閱隔離應(yīng)用程序.文件上載。瀏覽器可以通過PostingAcceptor應(yīng)用程序?qū)⑽募陷d到Web效勞器??梢跃帉慉SP腳本來發(fā)送帶有從PostingAcceptor傳來的信息的email,如每一個上載文件的位置和名稱。請參閱PostingAccepter文檔〔在MicrosoftSiteServerExpress的目錄表中〕。新的ASP組件。ASP提供了新的根底組件。有關(guān)概述請參閱ActiveX組件。應(yīng)用程序根目錄的改變。ASP應(yīng)用程序的根目錄在您的Web站點上可以是物理目錄。以前,根目錄必須映射為虛擬目錄?,F(xiàn)在可以用Internet效勞管理器指示ASP應(yīng)用程序的根目錄。請參閱創(chuàng)立應(yīng)用程序。必須將.asp文件置于應(yīng)用程序樹中,Web效勞器才能檢測文件的改變并且自動重裝它們。支持InternetExplorer4.0通道和Web預(yù)測。當(dāng)ASP要發(fā)送包含通道定義命令的文件時,它會自動告訴InternetExplorer4.0。使用ASP很容易就能生成通道定義(.cdf)文件。支持1.1協(xié)議。InternetInformationServer和PersonalWebServer支持1.1協(xié)議。在響應(yīng)支持1.1的瀏覽器〔例如InternetExplorer4.0〕時,這一支持可使ASP利用新協(xié)議的高效率。例如,當(dāng)向瀏覽器返回頁的時候,ASP使用大塊轉(zhuǎn)換編碼以提高網(wǎng)絡(luò)效率。三、創(chuàng)立ASP頁ActiveServerPages〔ASP〕文件是以.asp為擴(kuò)展名的文本文件,這個文本文件可以包括以下局部的任意組合:文本HTML標(biāo)記ASP腳本命令創(chuàng)立.asp文件非常容易。如果要在HTML文件中添加腳本,只需將該文件的擴(kuò)展名.htm或.html替換為.asp就可以了。要使.asp文件可用于Web用戶,請將這個新文件保存在Web站點上的目錄中〔請確定啟用了該目錄的腳本和執(zhí)行權(quán)限〕。使用瀏覽器查看該文件時,可以看到ASP處理并返回了HTML頁?,F(xiàn)在可以在.asp文件中添加腳本命令了。注意因為.asp文件需要額外的處理,請不要將所有的HTML頁都轉(zhuǎn)換為ASP頁。應(yīng)該只將包含腳本命令的文件轉(zhuǎn)換為.asp文件。.asp和.htm文件可以放置在相同的目錄中。使用任何的文本編輯器都可以創(chuàng)立.asp文件。使用那些帶有ASP增強(qiáng)支持的編輯器將更能提高效率,如MicrosoftVisualInterDev。如果您從未使用過HTML,請考慮先使用MicrosoftFrontPage。使用FrontPage創(chuàng)立文檔和格式化文本就象使用文字處理工具一樣簡單。接下來還可以使用InsertScript命令在FrontPage創(chuàng)立的HTML頁中參加簡單的ASP命令。參加Script命令腳本是一系列的命令和指令。與HTML標(biāo)簽不同,script命令指示W(wǎng)eb效勞器執(zhí)行操作,而HTML標(biāo)簽只是簡單地格式化文本或讀取圖形、視頻及音頻文件。Script命令可以在變量中存儲用戶名,在返回到瀏覽器的頁中顯示用戶名或?qū)⒂脩裘鎯υ跀?shù)據(jù)庫中。腳本命令通過定界符與文本區(qū)別開來。定界符是字符或一串字符,它標(biāo)志單元開始或結(jié)束。HTML使用定界符棗小于號〔<〕和大于號〔>〕括入HTML標(biāo)簽。ASP使用定界符<%和%>括入腳本命令。您可以在定界符中括入任何命令,只要這些命令對正在使用的腳本語言有效。下面的例子展示了包含腳本命令的簡單的HTML頁:<HTML><BODY>Thispagewaslastrefreshedon<%=Now%>.</BODY></HTML>VBScript函數(shù)Now返回當(dāng)前的日期和時間。Web效勞器處理該頁時,會使用當(dāng)前的日期和時間替換<%=Now%>并且將該頁返回到瀏覽器:Thispagewaslastrefreshedon8/1/972:20:00PM.定界符括入的命令被稱為主腳本命令。這些命令被主腳本語言處理。在腳本定界符中使用的任何命令都必須對主腳本語言有效。默認(rèn)情況下,主腳本語言是VBScript。要設(shè)置另一種語言。請參閱使用腳本語言。如果您已經(jīng)熟悉了客戶端腳本編寫〔編寫在瀏覽器上運行的腳本〕,請注意不要用HTML<SCRIPT>元素括入表達(dá)式。在編寫效勞器端腳本時,只用<SCRIPT>元素在主腳本語言外的其他語言中定義過程。關(guān)于詳細(xì)信息,請參閱使用腳本語言。合成HTML和腳本命令在ASP定界符中可以包含任何在主腳本語言中合法的語句、表達(dá)式、過程或操作符。在VBScript和其他腳本語言中,語句是語法完整的單元,該單元表達(dá)某項活動、聲明或定義。下面的條件語句If...Then...Else是一條常見的VBScript語句。<%IfTime>=#12:00:00AM#AndTime<#12:00:00PM#ThenGreeting="GoodMorning!"ElseGreeting="Hello!"EndIf%><%=Greeting%>這條語句將值"GoodMorning!"或值"Hello!"存儲在變量greeting中。<%=Greeting%>命令將當(dāng)前的變量值發(fā)送到瀏覽器中。這樣,在〔Web效勞器所在時區(qū)的〕正午12點前瀏覽該腳本的用戶將看到:GoodMorning!在正午12點或以后瀏覽此腳本的用戶將看到:Hello!在語句的不同局部之間可以參加HTML文本。例如,下面的腳本在If...Then...Else語句中參加了HTML,產(chǎn)生了與上面腳本同樣的結(jié)果:<%IfTime>=#12:00:00AM#AndTime<#12:00:00PM#Then%>GoodMorning!<%Else%>Hello!<%EndIf%>如果條件為真,也就是說,如果時間為午夜、午夜以后或者中午以前,那么Web效勞器將跟隨條件〔"GoodMorning"〕的HTML發(fā)送到瀏覽器;否那么,將跟隨Else的HTML〔"Hello"〕發(fā)送到瀏覽器。這種混合HTML和腳本命令的方式可以方便地將If...Then...Else語句變換為幾行HTML文本。如果要在Web頁上顯示多處問候,前一個例子更為有用。只需要設(shè)置一次變量,就可以重復(fù)顯示。最好從腳本命令中將HTML文本返回到瀏覽器,而不用腳本命令散布HTML文本。要將文本返回到瀏覽器,請使用ASP的內(nèi)建對象Response。下面的例子可以產(chǎn)生與前一個腳本同樣的結(jié)果:<%IfTime>=#12:00:00AM#AndTime<#12:00:00PM#ThenResponse.Write"GoodMorning!"ElseResponse.Write"Hello!"EndIf%>Response.Write將跟隨的文本發(fā)送到瀏覽器。要動態(tài)構(gòu)造返回瀏覽器的文本,請在語句中使用Response.Write。例如,可能要構(gòu)造包含一些變量值的字符串。在使用組件和對象以及向瀏覽器傳送內(nèi)容中將了解到更多有關(guān)Response對象和一般對象的信息?,F(xiàn)在,先了解將腳本命令插入到HTML頁中的幾種方法。在ASP定界符中可以包含用默認(rèn)主腳本語言編寫的過程。詳細(xì)信息,請參閱使用腳本語言。如果正在使用JScript命令,可以插入花括號指示語句塊直接進(jìn)入ASP命令,而不用考慮它是否夾雜著HTML標(biāo)簽和文本。例如:<%if(screenresolution=="low"){%>Thisisthetextversionofapage.<%}else{%>Thisisthemultimediaversionofapage.<%}%>使用ASP指令A(yù)SP提供了您使用的腳本語言以外的指令。這是一些輸出指令和處理指令。ASP的輸出指令<%=expression%>顯示表達(dá)式的值。這個輸出指令等同于使用Response.Write顯示信息。例如,輸出表達(dá)式<%=sport%>將文字climbing〔變量當(dāng)前的值〕傳送到瀏覽器。ASP處理指令<%@keyword%>為ASP提供處理.asp文件所需的信息。例如,下面的指令將VBScript設(shè)為該頁的主腳本語言:<%@LANGUAGE=VBScript%>處理指令必須出現(xiàn)在.asp文件的第一行。不要將處理指令放在包含#include語句的文件中。必須在at標(biāo)記〔@〕和關(guān)鍵字之間參加一個空格。處理指令有以下關(guān)鍵字:LANGUAGE關(guān)鍵字設(shè)置頁的腳本語言;請參閱使用腳本語言。CODEPAGE關(guān)鍵字設(shè)置頁的代碼頁〔字符編碼〕;請參閱使用國際站點。LCID關(guān)鍵字設(shè)置頁的現(xiàn)場標(biāo)識符;請參閱使用國際站點。TRANSACTION關(guān)鍵字指定將在事務(wù)處理環(huán)境下運行的頁;請參閱創(chuàng)立事務(wù)處理腳本。ENABLESESSIONSTATE關(guān)鍵字指定ASP頁是否使用會話狀態(tài);請參閱管理會話??梢栽趩蝹€指令中包含多個關(guān)鍵字;關(guān)鍵字/值對之間必須由空格分開。不要在等號〔=〕左右參加空格。下面的例子中設(shè)置了腳本語言和代碼頁:<%@LANGUAGE=JScriptCODEPAGE=932%>在腳本中的空白字符如果您的主腳本語言是VBScript或者JScript,ASP從指令中刪除空白字符。使用其他腳本語言時,ASP保存空白字符,這樣那些需要使用位置和縮進(jìn)的語言,如Python就可以被正確解釋了??瞻鬃址崭?、制表符、回車和換行符。使用VBScript和JScript時,在翻開定界符之后和關(guān)閉定界符之前使用空白字符更容易閱讀命令。下面的命令都是合法的:<%Color="Green"%><%Color="Green"%><%Color="Green"%>ASP將一個語句的關(guān)閉定界符與下一個語句的翻開定界符之間的空白字符刪除。要保存兩個語句間的空白字符,比方在句子中顯示變量值的時候,請使用HTML不間斷空符〔 〕。例如:<%'Definetwovariableswithstringvalues.Hello="Hello"World="World"%><P>Myresponseistosay"<%=Hello%> <%=World%>."</P>四、使用腳本語言腳本語言是介于HTML和Java、C++和VisualBasic之類的編程語言之間的語言。HTML通常用于格式化文本和鏈接網(wǎng)頁。編程語言通常用于向計算機(jī)發(fā)送一系列復(fù)雜指令。腳本語言也可用來向計算機(jī)發(fā)送指令,但它們的語法和規(guī)那么沒有可編譯的編程語言那樣嚴(yán)格和復(fù)雜。腳本語言主要用于格式化文本和使用以編程語言編寫的已編譯好的組件。ActiveServerPages使Web開發(fā)商用多種腳本語言編寫完整的過程成為可能。事實上,在單個.asp文件內(nèi)部就可以使用多種腳本語言。另外,由于腳本是在效勞器端讀取和處理的,所以請求.asp文件的客戶端瀏覽器并不需要支持腳本。您可以使用任意一種其相應(yīng)的腳本引擎已安裝在Web效勞器上的腳本語言。腳本引擎是處理用某種語言書寫的命令的程序。ActiveServerPages帶有兩個腳本引擎:MicrosoftVisualBasicScriptingEdition(VBScript)和MicrosoftJScript。您也可以安裝和使用其他的腳本語言引擎,例如REXX和Perl。如果您已經(jīng)是VisualBasic程序員,就可以馬上使用VBScript,它是VisualBasic的子集。如果您是Java、C或C++程序員,您會發(fā)現(xiàn)JScript語法對您來說是熟悉的,雖然JScript與Java或C并沒有聯(lián)系。如果您熟悉其他腳本語言,例如REXX或Perl,您可獲取和安裝相應(yīng)的腳本引擎,這樣就可以使用您熟悉的腳本語言了。ActiveServerPages是ActiveX腳本的宿主。要使用一種語言,必須安裝腳本引擎,該引擎必須遵循ActiveX腳本標(biāo)準(zhǔn)并作為一個COM〔組件對象模型〕對象駐留在Web效勞器上。設(shè)置主腳本語言ASP主腳本語言是用來處理在分界符<%和%>內(nèi)部的命令的語言。默認(rèn)時,主腳本語言是VBScript。您可以將任何一種具有腳本引擎的腳本語言作為主腳本語言。您可以逐頁設(shè)置主腳本語言,也可以在ASP應(yīng)用程序中設(shè)置所有頁的主腳本語言。為某頁設(shè)置語言要設(shè)置單個頁的主腳本語言,可將<%@LANGUAGE%>指令添加到.asp文件的開頭。該指令的語法是:<%@LANGUAGE=ScriptingLanguage%>其中ScriptingLanguage就是您所設(shè)置的頁的主腳本語言。如果對某頁進(jìn)行了設(shè)置,那么該頁將忽略在應(yīng)用程序中對所有頁的全局設(shè)置。請遵循使用ASP指令的指導(dǎo)。詳細(xì)信息,請參閱“創(chuàng)立ASP頁〞。注意要將不支持Object.Method語法的語言作為主腳本語言使用,必須先創(chuàng)立LanguageEngines注冊表鍵。詳細(xì)信息,請參閱注冊表。為應(yīng)用程序設(shè)置語言在應(yīng)用程序中,如要為所有頁設(shè)置主腳本語言,可在Internet效勞管理器的“App選項"選項卡上設(shè)置"默認(rèn)的ASP語言"屬性。詳細(xì)信息,請參閱配置ASP應(yīng)用程序。在效勞器上使用VBScript和JScript在效勞端通過ASP使用VBScript時,兩個VBScript特征將失效。由于ActiveServerPages腳本是在效勞器端執(zhí)行的,表示用戶接口的元素的VBScript語句InputBox和MsgBox將不被支持。另外,在效勞器端的腳本中,請不要使用VBScript函數(shù)CreateObject和GetObject。而要使用Server.CreateObject,這樣ASP就可以跟蹤對象實例了。用CreateObject或GetObject創(chuàng)立的對象不能訪問ASP內(nèi)建對象,也不能參與事務(wù)處理。該規(guī)那么的一個例外是如果您使用的是Admin對象和Javamonikers。詳細(xì)信息,請參閱IISAdmin對象和創(chuàng)立Java類的實例。關(guān)于所有VBScript和JScript的操作符、函數(shù)、語句、對象、屬性及方法的列表及詳細(xì)說明,請參閱VBScript語言參考和JScript語言參考。包含注釋由于ASP腳本是在效勞器端處理的,所以即使客戶端的瀏覽器不支持腳本語言,也不必通過包含進(jìn)HTML注釋標(biāo)記來隱藏腳本,但客戶端的腳本那么通常需要這樣處理。在內(nèi)容送到瀏覽器之前,所有ASP命令都已被處理好了。您可用HTML注釋將注釋加進(jìn)HTML頁。注釋將返回給瀏覽器,假設(shè)用戶瀏覽HTML源文件,就可以看見。VBScript注釋VBScript支持撇號型注釋。與HTML注釋不同,當(dāng)處理腳本時,它們將被刪除,而不是被送到瀏覽器。<%'Thislineandthefollowingtwoarecomments.'ThePrintTablefunctionprintsall'theelementsinanarray.CallPrintTable(myarray())%>輸出表達(dá)式不能包括注釋。例如,下面的第一行將正常運行,而第二行那么不能,因為它是以<%=開頭的。<%i=i+1'thisincrementsi.Thisscriptwillwork.%><%=name'thisprintsthevariablename.Thisscriptwillfail.%>JScript注釋JScript支持//注釋符。每一個注釋行中都必須使用該注釋符。<%CallPrintDate%><SCRIPTLANGUAGE=JScriptRUNAT=Server>//ThisisadefinitionfortheprocedurePrintDate.functionPrintDate(){varxx=newDate()//Thislinesendsthecurrentdatetothebrowser,//translatedtoastring.Response.Write(x.toString())}</SCRIPT>大小寫敏感性VBScript不區(qū)分大小寫。例如,您可以用Request或request來引用ASPRequest對象。不區(qū)分大小寫的后果是您不能用大小寫來區(qū)分變量名。例如,您不能創(chuàng)立兩個名為Color和color的單獨變量。JScript區(qū)分大小寫。要在腳本中使用JScript關(guān)鍵字,就必須按參考頁中所示的大小寫來書寫。例如,用date來代替Date將導(dǎo)致錯誤。在JScript中,對象名必須大寫;方法名和屬性名可大寫也可小寫。本文所示的ASP內(nèi)建對象的情況將在JScript命令中正常工作。五、使用變量和常量變量是計算機(jī)內(nèi)存中已命名的存儲位置,其中包含了數(shù)字或字符串等數(shù)據(jù)。變量包含的信息被稱為變量的值。變量使用用戶便于理解腳本操作的名稱為用戶提供了一種存儲、檢索和操作數(shù)據(jù)的途徑。聲明和命名變量命名和聲明變量應(yīng)遵循腳本語言的規(guī)那么及指導(dǎo)。即使在使用變量前不需要去聲明變量,也應(yīng)養(yǎng)成在編程時聲明變量的良好習(xí)慣,因為這樣有助于防止錯誤發(fā)生。聲明一個變量意味著告訴腳本引擎,有一個特定名稱的變量,這樣就可以在腳本中引用該變量。VBScriptVBScript并不需要聲明變量,但在使用所有變量前聲明它們是一種好的腳本書寫習(xí)慣。要在VBScript中聲明變量,請用Dim、Public或Private語句。例如:<%DimUserName%>可以在需要顯式聲明變量的.asp文件中用VBScriptOptionExplicit語句。OptionExplicit必須在任何一個ASP指令之后及任何一個HTML文本或腳本命令之前出現(xiàn)。該語句僅影響用VBScript書寫的ASP命令,而不會影響JScript命令。關(guān)于這些命令的詳細(xì)信息,請參閱VBScript語言參考。JScriptMicrosoftJScript僅當(dāng)變量為本地過程變量時才需聲明,但在使用所有變量前聲明它們是一種好的腳本書寫習(xí)慣。要聲明一個變量,請使用var語句。例如:<%varUserName;%>有關(guān)var語句的詳細(xì)信息,請參閱JScript語言參考。變量作用域變量的作用域即生命期,決定哪些腳本命令可訪問變量。在過程內(nèi)部聲明的變量具有局部作用域。每執(zhí)行一次過程,變量就被創(chuàng)立然后消亡。而過程外部的任何命令都不能訪問它。在過程外部聲明的變量具有全局作用域,其值能被ASP頁上的任何腳本命令訪問和修改。聲明變量時,局部變量和全局變量可以有相同的名稱。而改變其中一個的值并不會改變另一個的值。如果沒有聲明變量,那么可能不小心會改變一個全局變量的值。例如,以下腳本命令返回值1,雖然有兩個名為Y變量:<%DimYY=1CallSetLocalVariableResponse.WriteYSubSetLocalVariableDimYY=2EndSub%>由于變量沒有顯式聲明,以下的腳本命令將返回2。當(dāng)過程調(diào)用將Y設(shè)置為2時,腳本引擎認(rèn)為該過程是要修改全局變量:<%Y=1CallSetLocalVariableResponse.WriteYSubSetLocalVariableY=2EndSub%>養(yǎng)成顯式聲明所有變量的編程習(xí)慣可以防止許多問題。尤其在當(dāng)您用#include語句將文件包含進(jìn)ASP主頁時,就顯得更為重要。一個獨立文件中被包含的腳本是被當(dāng)作整個包含它的文件的一局部來處理的。用不同的名稱來命名主腳本和被包含腳本中用到的變量,這容易被遺忘,除非聲明變量。為變量賦予會話或應(yīng)用程序作用域全局變量僅在單個ASP頁中可用,要使它在單個ASP頁之外可用,就必須為變量賦予會話或應(yīng)用程序作用域。會話作用域變量對一個用戶所請求的ASP應(yīng)用程序中的所有頁都是可用的。應(yīng)用程序作用域變量也如此。對單個用戶來說,會話變量是存儲信息的最正確途徑,例如,首選項、用戶名或用戶標(biāo)識。對于一個特殊應(yīng)用程序的所有用戶,應(yīng)用程序作用域是存儲信息的最正確途徑,例如,應(yīng)用程序特定的問候語或應(yīng)用程序所需的初始值。ASP提供兩個內(nèi)建對象來讓您存儲變量:Session對象和Application對象。您也可以創(chuàng)立具有會話或應(yīng)用程序作用域的對象實例。詳細(xì)信息,請參閱設(shè)置對象作用域。會話作用域要為變量賦予會話作用域,將該變量存儲到Session對象中即可,方法是為該對象的已命名條目指派一個值。例如,以下命令將兩個新的變量存儲到Session對象中。<%Session(\"FirstName\")=\"Jeff\"Session(\"LastName\")=\"Smith\"%>要Session對象中檢索信息,可以用輸出指令(<%=)或Response.Write訪問已命名的條目。以下例如用輸出指令顯示Session(\"FirstName\")的當(dāng)前值:Welcome<%=Session(\"FirstName\")%>可在Session對象中存儲用戶首選項,然后就可以訪問這些首選項,從而決定將哪一頁返回給用戶。例如,您可以允許用戶在應(yīng)用程序的第一頁指定純文本內(nèi)容,然后將這一選擇應(yīng)用到用戶在該應(yīng)用程序中訪問的所有后續(xù)頁。<%IfSession(\"ScreenResolution\")=\"Low\"Then%>Thisisthetextversionofthepage.<%Else%>Thisisthemultimediaversionofthepage.<%EndIf%>應(yīng)用程序作用域要為變量賦予應(yīng)用程序作用域,將該變量存儲到Application對象中即可,方法是為該對象的已命名條目指派一個值。例如,以下命令將一個應(yīng)用程序特定的問候語存儲到Application對象中:<%Application(\"Greeting\")=\"WelcometoExplorationAir\"%>要從Application對象中檢索信息,可以使用ASP輸出指令(<%=)或Response.Write從該應(yīng)用程序的任意后續(xù)頁中訪問已命名條目。以下例如用輸出指令顯示Application(\"Greeting\")的值:<%=Application(\"Greeting\")%>使用常量常量是用來代替一個數(shù)或字符串的名稱。一些隨ASP提供的根本組件,例如ActiveXDataObjects(ADO),定義了您在腳本中可以使用的常量。組件可在一個組件類型庫中聲明常量,組件類型庫是一個包含ActiveX組件所支持的對象和類型的信息的文件。一旦在Global.asa文件中聲明了一個類型庫,您就可以在該應(yīng)用程序的任意頁中使用已定義的常量??稍贕lobal.asa中用<METADATA>標(biāo)記為應(yīng)用程序聲明類型庫。例如,要聲明ADO類型庫,可用以下語句:<!--METADATATYPE=\"typelib\"FILE=\"c:\\programfiles\\commonfiles\\system\\ado\\msado15.dll\"-->這樣,您就可以在與Global.asa文件相同的應(yīng)用程序的中使用ADO常量。在下面的例如中,adOpenKeyset和adLockOptimistic是ADO常量:\'CreateandOpenRecordsetObjectSetRsCustomerList=Server.CreateObject(\"ADODB.Recordset\")RsCustomerList.ActiveConnection=OBJdbConnectionRsCustomerList.CursorType=adOpenKeysetRsCustomerList.LockType=adLockOptimistic有關(guān)<METADATA>標(biāo)記的參考信息,請參閱TypeLibrary聲明。在以前版本的ASP中,一些組件在文件中提供常量定義,每個使用那些組件的ASP文件必須包含該文件。用#include指令來包含常量定義的用法仍被支持,但使用類型庫通常更方便并且能使腳本更易于升級。在以后版本的ASP中,組件可能將不再提供常量定義文件。您可以定義自己的常量。在VBScript中,用Const語句,在JScript中,用var語句。如果在多個ASP頁中使用常量,可在獨立的文件中放置常量,然后將其包含進(jìn)每一個使用該常量的ASP文件中去。六、使用集合大多數(shù)ASP內(nèi)建對象支持集合。集合是存儲字符串、數(shù)字、對象和其他值的地方。除了在存儲或取出工程時集合會自動擴(kuò)展與搜索外,集合與數(shù)組非常相近。與數(shù)組不同的是,集合被修改后,工程的位置將會移動??梢酝ㄟ^集合中工程的名稱、索引或者通過在集合的所有工程中遍歷訪問工程。通過名稱和索引訪問工程通過使用工程名稱可以訪問集合中的具體工程。例如,Contents集合擁有在Session對象中保存的所有變量。同樣也擁有由Server.CreateObject創(chuàng)立的所有對象。假設(shè)在Session對象中存儲了以下用戶信息:<%Session.Contents(\"FirstName\")=\"Sam\"Session.Contents(\"LastName\")=\"Woo\"Session.Contents(\"Age\")=29%>可以使用在集合中存儲工程時關(guān)聯(lián)的名稱訪問工程。例如,下面的表達(dá)式返回字符串“Sam\":<%=Session.Contents(\"FirstName\")%>通過使用與工程關(guān)聯(lián)的索引或號碼也可以訪問工程。例如,下面的表達(dá)式檢索存儲在Session對象的第二個存儲槽中的信息并且返回\"Woo\":<%=Session.Contents(2)%>ASP集合從1開始編號。當(dāng)在集合中增加或刪除工程時,與工程關(guān)聯(lián)的索引將會改變。所以不能認(rèn)為工程的索引始終不變。正如將在下面的主題中說明的那樣,利用索引的訪問一般用來遍歷集合,或訪問只讀集合中的工程。通過使用速記的名稱可以訪問工程。ASP以特定的順序搜索與對象關(guān)聯(lián)的集合。如果在對象的集合中特定名稱的工程只出現(xiàn)一次的話,可以消除該集合的名稱:<%=Session(\"FirstName\")%>訪問存儲在Application或Session對象中的工程時,消除集合名稱一般是平安的。但是,對于Request對象,最好指定集合名稱,因為該集合很可能包含重復(fù)的名稱。遍歷集合在集合的所有工程中遍歷可以了解集合中存儲的工程或修改工程。遍歷集合時,必須提供集合名稱。例如,可以使用VBScript中的For...Each語句訪問存儲在Session對象中的工程:<%\'Declareacountervariable.DimItem\'Foreachiteminthecollection,displayitsvalue.ForEachIteminSession.ContentsResponse.WriteSession.Contents(Item)&\"<BR>\"Next%>可以使用VBScript中的For...Next語句遍歷集合。例如,要列出上例中存儲在Session中的三個工程,可以使用以下語句。<%\'Declareacountervariable.DimItem\'Repeattheloopuntilthevalueofcounterisequalto3.ForItem=1to3Response.WriteSession.Contents(Item)&\"<BR>\"Next%>因為一般不知道存儲在集合中的工程個數(shù),ASP支持集合的Count屬性,這個屬性返回集合中的工程數(shù)??梢允笴ount屬性指定計數(shù)器的終值。<%\'Declareacountervariable.DimItem\'Repeatthisloopuntilthecounterequalsthenumberofitems\'inthecollection.ts(Item)&\"<BR>\"Next%>可以在腳本中使用for語句在集合中循環(huán)。在JScript的for語句中使用Count屬性時,為了收到更大的效果,應(yīng)該將Count值分配給本地變量并使用該變量設(shè)置計數(shù)器終值。這樣,腳本引擎就不需要每次循環(huán)都查尋Count的值。下面的例子展示了這個技巧:<%varitem,numitems;numitems=Session.Contents.Count;for(item=1;item<=numitems;item++){Response.Write(Session.Contents(item)+\"<BR>\")}%>MicrosoftJScript3.0引入了Enumerator對象。可以使用該對象遍歷ASP集合。atEnd方法指出了集合中是否還存在工程。moveNext方法移動到集合中的下一個工程。<%//CreateanEnumeratorobjectvarmycoll=newEnumerator(Session.Contents);//Iteratethroughthecollectionanddisplayeachitemwhile(!mycoll.atEnd()){varx=mycoll.item();Response.Write(Session.Contents(x)+\"<BR>\");mycoll.moveNext();}%>遍歷帶子關(guān)鍵字(Subkeys)的集合腳本在單一cookie中嵌入相關(guān)值以減少在瀏覽器和Web效勞器之間傳送的cookie數(shù)目。因此Request和Response對象的Cookies集合能夠在單一工程中擁有多個值。這些子工程或子關(guān)鍵字可以被單個訪問。只有Request.Cookies和Response.Cookies集合支持子關(guān)鍵字(Subkeys)。Request.Cookies只支持讀操作;Response.Cookies只支持寫操作??梢粤信eRequest.Cookie集合中所有的cookie以及Cookie中所有的子關(guān)鍵字(Subkeys)。但是,如果在沒有子關(guān)鍵字(Subkeys)的Cookie上遍歷子關(guān)鍵字,將不會產(chǎn)生任何結(jié)果。通過使用.HasKeys語法首先檢查cookie是否含有子關(guān)鍵字(Subkeys),就可以防止這種情況。下面的這個例子展示了這個技巧。<%\'DeclarecountervariablesDimCookie,Subkey\'Displaytheentirecookiecollection.Response.WriteCookie&\"<BR>\"IfRequest.Cookies(Cookie).HasKeysThen\'DisplaythesubkeysForEachSubkeyinRequest.Cookies(Cookie)Response.WriteSubkey&\"=\"&Request.Cookies(Cookie)(Subkey)&\"<BR>\"NextElseResponse.Write\"Nosubkeysinthiscookie<BR>\"EndIfNext%>遍歷對象集合Session和Application集合可以保存數(shù)量變量或者對象實例。Contents集合擁有數(shù)量變量和通過調(diào)用Server.CreateObject生成的對象實例。StaticObjects集合擁有在Global.asa文件中使用HTML<OBJECT>元素創(chuàng)立的對象。在遍歷包含對象的集合時,可以訪問對象的標(biāo)識符或?qū)ο蟮姆椒ê蛯傩?。例如,假設(shè)應(yīng)用程序使用一些對象創(chuàng)立用戶帳號,而且每個對象有初始化方法,可以遍歷StaticObjects集合來調(diào)用每個初始化方法:<%sSession.StaticObjects(Object).InitializeUserNext%>ASP集合有何不同之處?盡管在本主題中討論的ASP集合與VisualBasic的Collection對象非常相似,但還是有些不同。ASP集合支持Count屬性和Item方法,但不支持Add和Remove方法。設(shè)置對象作用域?qū)ο蟮淖饔糜驔Q定哪些腳本可以使用該對象。默認(rèn)情況下,當(dāng)您創(chuàng)立對象實例時,該對象具有頁作用域。同一ASP頁中的任何腳本命令都能使用該頁作用域的對象;當(dāng)ASP頁送回客戶端時,該對象即被釋放。對大多數(shù)對象來說,推薦的作用域是頁作用域。您可以改變一個對象的作用域,使其可被其他頁的腳本使用。本主題將解釋如何使用頁作用域的對象以及如何改變對象的作用域。使用頁作用域?qū)ο笤贏SP頁上用Server.CreateObject創(chuàng)立的對象在該頁的生存期內(nèi)一直存在。該對象對該頁的任何腳本命令都是可訪問的,當(dāng)ASP處理完該頁時,該對象即被釋放。因此,對象具有該頁的作用域或生命周期。在用VisualBasic或VBScript編程時,要注意在ASP處理完該頁之前不要釋放對象。例如,以下語句經(jīng)常用于通過將對象變量賦以Nothing值來釋放對象:SetmyObj=Nothing如果您在ASP頁中包含了該語句,那么任何使用myObj的企圖都將會返回一個預(yù)期的錯誤代碼。但在內(nèi)部,即使在對象釋放以后,ASP仍保存對它的引用。當(dāng)您在腳本中不能使用對象時,對象的資源直到ASP處理完頁之后才釋放。同樣,如果您通過創(chuàng)立另一個對象實例并將其賦給已使用過的對象變量來釋放該對象時,ASP將保存對原對象實例的引用。對大多數(shù)腳本來說,創(chuàng)立多個對象可能不會產(chǎn)生問題,但如果對象使用共享資源,比方數(shù)據(jù)庫連接,就有可能出現(xiàn)問題。由于對象有頁作用域,所以不要依靠手工釋放的對象。例如,以下的循環(huán)創(chuàng)立1001個Connection對象,它將能翻開大多數(shù)的連接甚至于一個大型的SQLserver:<%ForI=0to1000SetConn.Open\"connectionstring\"Next%>總的來說,應(yīng)該盡量防止在一個循環(huán)內(nèi)部創(chuàng)立對象。如果無法防止,您應(yīng)該手工釋放被對象使用過的資源。如果Connection對象僅被創(chuàng)立一次,且數(shù)據(jù)資源的物理連接在每個循環(huán)中被翻開然后關(guān)閉,那么上例將會正常運行:<%SetForI=0to1000Conn.Open\"connectionstring\"Conn.CloseNext%>為對象賦予會話作用域在應(yīng)用程序中,對于每個新會話,都會創(chuàng)立session-scope對象,并且在會話結(jié)束后會將其釋放。因此,每個活動的會話都有一個對象。會話作用域用于從多個腳本中調(diào)用的對象,但只影響一個用戶會話。您可以只在需要時才為對象賦予會話作用域。如果確實需要使用會話作用域,那么就必須了解提供對象的組件的線程模型,因為它影響性能和對象的平安環(huán)境。詳細(xì)信息,請參閱本主題的“高級信息:性能問題〞。要為對象賦予會話作用域,請將對象存儲在ASPSession內(nèi)建對象中,您既可以在Global.asa文件中使用<OBJECT>標(biāo)記,也可以在ASP頁上使用Server.CreateObject方法創(chuàng)立具有會話作用域的對象實例。在Global.asa文件中,您可用擴(kuò)展了RUNAT屬性〔必須設(shè)置為Sever〕和SCOPE屬性〔必須設(shè)置為Session〕的<OBJECT>標(biāo)記。以下例如創(chuàng)立一個AdRotator對象的會話作用域?qū)嵗?lt;OBJECTRUNAT=ServerSCOPE=SessionID=MyAdPROGID=\"MSWC.Adrotator\"></OBJECT>一旦您在Session對象中存儲了對象,您就可以從應(yīng)用程序的任何頁中訪問該對象。下面的語句使用上例中由<OBJECT>標(biāo)記創(chuàng)立的對象實例:<%=MyAd.GetAdvertisement(\"addata.txt\")%>在ASP頁上,您也可以使用Server.CreateObject方法將對象存儲在Session內(nèi)建對象中。以下例如在Session對象中存儲AdRotator對象的一個實例。<%SetSession(\"MyAd\")=Server.CreateObject(\"MSWC.Adrotator\")%>要顯示廣告,您首先應(yīng)該獲取存儲在Session對象中的AdRotator對象的實例,然后才能調(diào)用方法來顯示對象:<%SetMyAd=Session(\"MyAd\")%><%=MyAd.GetAdvertisement(\"addata.txt\")%>在用<OBJECT>標(biāo)記聲明的對象被某個.asp文件中的腳本命令引用之前,ASP并不創(chuàng)立其實例。Server.CreateObject方法那么立即創(chuàng)立該對象實例。因此,對會話作用域?qū)ο髞碚f,使用<OBJECT>標(biāo)記要比Server.CreateObject屬性更好。為對象賦予應(yīng)用程序作用域application-scope對象是在應(yīng)用程序啟動時就創(chuàng)立的對象的單個實例。該對象由所有客戶端請求共享。僅在極少數(shù)情況下,您才需要為對象賦予應(yīng)用程序作用域。一些實用程序?qū)ο?,例如計?shù)器等,可能需要應(yīng)用程序作用域。但一般來說,您可用在下一節(jié)中建議的替代方案。另外,線程模型會影響性能和對象平安環(huán)境〔請參閱本主題的“高級信息:性能問題〞〕。要為對象賦予應(yīng)用程序作用域并將其存儲在ASPApplication內(nèi)建對象中,既可以使用Global.asa文件中的<OBJECT>標(biāo)記,也可以使用ASP頁上的Server.CreateObject方法創(chuàng)立應(yīng)用程序作用域的對象實例。在Global.asa文件中,您可用擴(kuò)展了RUNAT屬性〔必須設(shè)置為Sever〕和SCOPE屬性〔必須設(shè)置為Session〕的<OBJECT>標(biāo)記。在ASP頁中,您可以使用Server.CreateObject將對象實例存儲在Application內(nèi)建對象中。關(guān)于使用<OBJECT>標(biāo)記和Server.CreateObject的例如,請參閱上一節(jié)"為對象賦予會話作用域"。會話和應(yīng)用程序作用域的替代方案僅當(dāng)需要時,才能為對象賦予會話或應(yīng)用程序作用域。因為在會話或應(yīng)用程序結(jié)束運行之前,這些對象會一直保存。它們會占用內(nèi)存或數(shù)據(jù)庫連接等資源,這些資源可能會在其他方面更有用。另外,組件的線程模型會影響您從中所創(chuàng)立的對象的性能,尤其是那些具有會話或應(yīng)用程序作用域的對象。在很多情況下,比創(chuàng)立應(yīng)用程序或會話作用域?qū)ο蟾玫姆椒ň褪抢脮捇驊?yīng)用程序作用域變量,將信息傳遞給在網(wǎng)頁一級創(chuàng)立的對象。例如,不要為ADOConnection對象賦予會話或應(yīng)用程序作用域,因為它創(chuàng)立的連接會在相當(dāng)長的一段時間一直保持翻開而此時腳本已不再使用ODBC連接共享。但您可以將ODBC連接字符串存儲在Session或Application內(nèi)建對象中,并在網(wǎng)頁上從創(chuàng)立的Connection對象實例中獲取該字符串。通過這種方式,您可以存儲在會話或應(yīng)用程序名稱空間中頻繁使用的信息,但只有在需要時才創(chuàng)立用該信息的對象。關(guān)于作用域變量的詳細(xì)信息,請參閱“使用變量和常量〞。用戶自定義的JScript對象您可以通過定義一個創(chuàng)立和初始化新對象的屬性和方法的構(gòu)造函數(shù)來創(chuàng)立自己的JScript對象。當(dāng)腳本用new操作符來調(diào)用構(gòu)造函數(shù)時,就會創(chuàng)立該對象的實例。ASP腳本支持用戶自定義的對象,當(dāng)具有頁作用域時,后者正常運行。但如果為用戶自定義的JScript對象賦予應(yīng)用程序或會話作用域,將可能影響該對象的功能。特別是,假設(shè)一個對象具有會話或應(yīng)用程序作用域,那么其他頁的腳本可以獲取該對象的屬性,但是卻不能調(diào)用其方法。高級信息:性能問題組件的線程模型可能會影響Web站點的性能,一般來說,帶有Both標(biāo)記的對象是推薦在所有的ASP腳本中使用的對象,尤其是在Session和Application對象中。不推薦使用單線程對象,因為您可能不會始終控制所用對象的線程模型,所以,以下的指導(dǎo)可幫助您獲得最正確性能:頁作用域?qū)ο?。帶有Both或Apartment標(biāo)記的對象將給予您最正確的性能。應(yīng)用程序作用域?qū)ο?。一般來說,應(yīng)防止在Application對象中放置對象。如果確需使用應(yīng)用程序作用域?qū)ο?,您會從結(jié)合了FreeThreadedMarshaler的帶有Both標(biāo)記的對象中獲得最正確性能。您既可以用<OBJECT>標(biāo)記也可以用Server.CreateObject方法在Application對象中存儲帶有Single、Free或Both標(biāo)記的對象。您必須用單元線程對象來使用<OBJECT>標(biāo)記。會話作用域?qū)ο?。帶有Both標(biāo)記的對象將為您提供最正確性能。用單線程或單元線程對象會導(dǎo)致Web效勞器將會話鎖定在一個線程上。自由線程對象不會鎖定會話,但運行速度不高。在Session對象中,您可以用<OBJECT>標(biāo)記或Server.CreateObject方法存儲對象。如果您已安裝了SDK文檔,請參閱"創(chuàng)立ASP組件〞,您將會獲得有關(guān)線程模型及其隱含的組件性能的詳細(xì)信息?!苍赪indows95及其后續(xù)版本中SDK文檔不可用?!称?、ASP內(nèi)建對象ActiveServerPages提供內(nèi)建對象,這些對象使用戶更容易收集通過瀏覽器請求發(fā)送的信息、響應(yīng)瀏覽器以及存儲用戶信息〔如用戶首選項〕。本文簡要說明每一個對象。有關(guān)每個對象的詳細(xì)信息,請參閱內(nèi)建對象參考。Application對象可以使用Application對象使給定應(yīng)用程序的所有用戶共享信息。Request對象可以使用Request對象訪問任何用請求傳遞的信息,包括從HTML表格用POST方法或GET方法傳遞的參數(shù)、cookie和用戶認(rèn)證。Request對象使您能夠訪問發(fā)送給效勞器的二進(jìn)制數(shù)據(jù),如上載的文件。Response對象可以使用Response對象控制發(fā)送給用戶的信息。包括直接發(fā)送信息給瀏覽器、重定向瀏覽器到另一個URL或設(shè)置cookie的值。Server對象Server對象提供對效勞器上的方法和屬性進(jìn)行的訪問。最常用的方法是創(chuàng)立ActiveX組件的實例(Server.CreateObject)。其他方法用于將URL或HTML編碼成字符串,將虛擬路徑映射到物理路徑以及設(shè)置腳本的超時期限。Session對象可以使用Session對象存儲特定的用戶會話所需的信息。當(dāng)用戶在應(yīng)用程序的頁之間跳轉(zhuǎn)時,存儲在Session對象中的變量不會去除;而用戶在應(yīng)用程序中訪問頁時,這些變量始終存在。也可以使用Session方法顯式地結(jié)束一個會話和設(shè)置空閑會話的超時期限。ObjectContext對象可以使用ObjectContext對象提交或撤消由ASP腳本初始化的事務(wù)。====================================Application對象集合:ContentsStaticObjects方法:LockUnlock事件:Application_OnEndApplication_OnStartObjectContext對象方法:SetAbortSetComplete事件:OnTransactionAbortOnTransactionCommitRequest對象集合:ClientCertificateCookiesFormQueryStringServerVariables屬性:TotalBytes方法:BinaryReadResponse對象集合:Cookies屬性:BufferCacheControlCharsetContentTypeExpiresExpiresAsoluteIsClientConnectedPICSStatus方法:AddHeaderAppendToLogBinaryWriteClearEndFlushRedirectWriteServer對象屬性:ScriptTimeout方法:CreateObjectHTMLEncodeMapPathURLEncodeSession對象集合:ContentsStaticObjects屬性:CodePageLCIDSessionIDTimeout方法:Abandon事件:Session_OnEndSession_OnStartActiveX組件本局部概述了ActiveServerPages〔ASP〕中的ActiveX組件。有關(guān)這些組件的完整介紹及其對象、屬性和方法的列表,請參閱可安裝的ASP組件。ActiveX組件作為基于Web的應(yīng)用程序局部在Web效勞器上運行。組件提供了應(yīng)用程序的主要功能〔如訪問數(shù)據(jù)庫〕,這樣就不必創(chuàng)立或重新創(chuàng)立執(zhí)行這些任務(wù)的代碼。數(shù)據(jù)庫訪問可以使用DatabaseAccess組件在應(yīng)用程序中訪問數(shù)據(jù)庫。然后可以顯示表的整個內(nèi)容、允許用戶構(gòu)造查詢以及在Web頁執(zhí)行其他一些數(shù)據(jù)庫查詢。AdRotator可以使用AdRotator組件來交替顯示圖像,并提供從顯示的圖形到另一個URL的鏈接。在文本文件中保存廣告列表;AdRotator組件依照在數(shù)據(jù)文件中的指令來顯示它們。ContentRotatorContentRotator組件在Web頁上自動循環(huán)HTML內(nèi)容字符串。每次用戶請求Web頁時,ContentRotator組件基于ContentSchedule文件中指定的信息顯示新的HTML內(nèi)容字符串。由于內(nèi)容字符串可以包含HTML標(biāo)記,就可以顯示HTML能夠表示的任何內(nèi)容類型:文本、圖形或超文本鏈接。例如,可以使用該組件在每日牌價或超文本鏈接中循環(huán),或者在每次翻開Web頁時,改變文本和背景的顏色。BrowserCapabilities通過使用BrowserCapabilities組件,可以基于瀏覽器的功能剪裁發(fā)送到該瀏覽器的內(nèi)容。FileAccessFileAccess組件提供可用于在計算機(jī)文件系統(tǒng)中檢索和修改文件的對象。ContentLinkingContentLinking組件使在應(yīng)用程序中提供.asp文件的邏輯導(dǎo)航變得簡單易行。不用在許多.asp文件中維護(hù)URL引用,而只需在易于編輯的文本文件中指定.asp文件的次序組織。CollaborationDataObjectsforWindowsNTServerCollaborationDataObjectsforNTS組件提供Web應(yīng)用程序所使用的郵件對象。這個庫使您能夠簡單快捷地在應(yīng)用程序上添加收發(fā)郵件的功能。您可以創(chuàng)立可編程郵件對象,然后利用它們的屬性和方法來滿足應(yīng)用程序的需要。MyInfo、Status、System和ToolsMyInfo、Status、System和Tools組件為在Macintosh上和在運行MicrosoftWindows的計算機(jī)上開發(fā)的應(yīng)用程序提供兼容性。MyInfo組件跟蹤Web站點所有者的個人信息,如經(jīng)營Web站點的組織名稱和地址及Web站點的設(shè)置,還有Web站點是否有g(shù)uestbook。Status組件跟蹤Web站點的信息,如訪問者的數(shù)量以及連接的個數(shù)。System組件創(chuàng)立包含效勞器狀態(tài)信息的status對象。當(dāng)前該效勞器狀態(tài)只在PersonalWebServerforMacintosh上可用。Tools組件提供了生成隨機(jī)數(shù)、檢查文件是否存在或處理HTML表格的方法。PageCounterPageCounter組件統(tǒng)計并顯示W(wǎng)eb頁被請求的次數(shù)。以一定的時間間隔,將捕獲的數(shù)字寫入到文本文件中,這樣效勞器關(guān)閉后,數(shù)據(jù)也不會喪失。PermissionCheckerPermissionChecker組件測試Web用戶對某文件或某頁的訪問權(quán)??梢允褂肞ermissionChecker組件為不同類型的用戶定制基于ASP的頁。例如,如果Web頁包含超文本鏈接,就可以使用PermissionChecker組件測試用戶對相應(yīng)Web頁的訪問權(quán)限并忽略用戶無權(quán)訪問的頁或使這些鏈接失效。八、向瀏覽器發(fā)送內(nèi)容在處理ASP腳本時,任何沒有包含在ASP定界符或<SCRIPT>標(biāo)記中的文本或圖形都將被簡單地返回給瀏覽器??梢酝ㄟ^使用Response對象顯示地把內(nèi)容發(fā)送給瀏覽器。發(fā)送內(nèi)容要將內(nèi)容從ASP定界符內(nèi)部或過程發(fā)送給瀏覽器,可以使用Response對象的Write方。例如,下面的語句可以根據(jù)用戶是否訪問過此頁而發(fā)送不同的問候語:<%IfFirstTime=TrueThenResponse.Write\"<H3ALIGN=CENTER>WelcometotheOverviewPage</H3>\"ElseResponse.Write\"<H3ALIGN=CENTER>WelcomeBacktotheOverviewPage</H3>\"EndIf%>在過程外部,不必使用Response.Write將內(nèi)容送回用戶。不在腳本定界符內(nèi)部的內(nèi)容被直接發(fā)送給瀏覽器,瀏覽器將其格式化和顯示。例如,下面的腳本過程與上面的腳本輸出相同:<H3ALIGN=CENTER><%IfFirstTimeThen%>WelcometotheOverviewPage.<%Else%>WelcomeBacktotheOverviewPage.<%EndIf%></H3>當(dāng)您只需要將輸出返回一次或很方便地向現(xiàn)有HTML文本中參加語句時,可使用混合腳本命令和HTML。當(dāng)您不想用定界符分隔一條語句或當(dāng)您想創(chuàng)立返回給瀏覽器的字符串時,可使用Response.Write。例如,可構(gòu)建一個文本的字符串,用從一個HTML表送回的值創(chuàng)立表格的一行:Response.Write\"<TR><TD>\"&Request.Form(\"FirstName\")_&\"</TD><TD>\"&Request.Form(\"LastName\")&\"</TD></TR>\"Request.Form返回從HTML表格〔參閱使用HTML表格〕發(fā)送的值。(&)字符是VBScript字符串連接字符。設(shè)置內(nèi)容的類型當(dāng)Web效勞器將文件返回給瀏覽器時,會同時告訴瀏覽器文件中包含的內(nèi)容的類型。這使瀏覽器能夠決定是否它能自己顯示文件或必須調(diào)用另一個應(yīng)用程序。例如,如果網(wǎng)絡(luò)效勞器返回MicrosoftExcel表格,那么瀏覽器必須調(diào)用MicrosoftExcel的副本顯示此頁。Web效勞器通過將文件的擴(kuò)展名映射到MIME類型表來識別文件類型??梢允褂肦esponse對象的ContentType屬性為發(fā)送給用戶的內(nèi)容設(shè)置內(nèi)容類型字符串。例如,下面的命令為通道定義設(shè)置內(nèi)容類型:<%Response.ContentType=\"application/x-cdf\"%>有關(guān)通道的詳細(xì)信息,請參閱本主題中的“創(chuàng)立動態(tài)通道〞。其他的通用內(nèi)容類型是text/plain〔用于作為文本內(nèi)容返回而不是已解釋的HTML語句〕、text/gif〔用于GIF圖像〕和video/quicktime〔用于AppleQuickTime格式的電影〕。一套標(biāo)準(zhǔn)的MIME類型已經(jīng)定義,另外,Web效勞器或Web瀏覽器都支持MIME類型。要想查看您的MicrosoftWeb效勞器支持哪些內(nèi)容類型,可使用Internet效勞管理器翻開您的Web站點的屬性頁,單擊"標(biāo)題"選項卡,然后單擊"文件類型"選項卡。重定向瀏覽器用Redirect方法可將瀏覽器重定向到另一個URL,而不是將內(nèi)容發(fā)送給用戶。例如,如果您想確認(rèn)用戶是否已從主頁進(jìn)入了您的應(yīng)用程序,以便能收到一個客戶ID,那么可以檢驗他們是否有客戶ID號;如果沒有,就可以將其重定向到主頁。<%IfSession(\"CustomerID\")=0ThenResponse.Redirect\"homepage.asp\"EndIf%>除非緩沖區(qū)已經(jīng)翻開,否那么,在任何內(nèi)容或標(biāo)題返回給瀏覽器之前,您必須重定向瀏覽器。將Response.Redirect語句放在頁的頂部和<HTML>標(biāo)記之前可確保沒有任何內(nèi)容返回給瀏覽器。如果在返回給瀏覽器的內(nèi)容或標(biāo)題后使用Response.Redirect,將看到一個錯誤信息。如果在頁的中間使用Response.Redirect,請將其與Response.Buffer屬性一起使用,下面的局部將進(jìn)行解釋。緩沖內(nèi)容默認(rèn)情況下,Web效勞器返回HTML和在處理ASP頁時的腳本處理結(jié)果。但是,您可以設(shè)置Response對象的Buffer屬性以便在向用戶發(fā)送任何內(nèi)容之前,先處理頁上的所有的效勞器腳本命令??梢允褂镁彌_技術(shù)來確定在頁處理過程中的某個點,而您并不想將該點之前的內(nèi)容發(fā)送給用戶。也可以用Response對象的Redirect方法將用戶重定向到另一頁,或者用Response對象的Clear方法去除緩沖區(qū)并將不同的內(nèi)容發(fā)送給用戶。下面的例子使用了以上兩種方法。<%\'Turnonbuffering.Thisstatementmustappearbeforethe<HTML>tag.Response.Buffer=True%><html><body>%>IfRequest(\"FName\")=\"\"ThenResponse.Redirect\"/samples/test.html\"ElseResponse.WriteRequest(\"FName\")EndIf%></body></html>也可以使用Response.Buffer防止Web效勞器在腳本修改標(biāo)題之前將其返回。有些屬性和方法,例如Response.Expires和Response.Redirect可修改標(biāo)題。當(dāng)在腳本中設(shè)置Buffer屬性并且沒有調(diào)用Flush方法時,效勞器將保持用戶發(fā)出的Keep-Alive請求。養(yǎng)成這樣的腳本編寫習(xí)慣有益于提高效勞器的性能,因為,效勞器不必為每一個用戶請求創(chuàng)立新的連接〔假定效勞器、用戶和任何代理效勞器都支持Keep-Alive要求〕。但是,這種方法的一個潛在的不利因素是:在用戶處理完當(dāng)前的ASP文件的所有的腳本之前,緩沖區(qū)不顯示任何響應(yīng)給用戶。對于較長的和較復(fù)雜的腳本,用戶可能要被迫等待很長一段時間才能看到這一頁。默認(rèn)情況下,緩沖區(qū)對于ASP應(yīng)用程序是關(guān)閉的??梢允褂肐nternet效勞管理器為整個ASP應(yīng)用程序翻開緩沖區(qū)。詳細(xì)信息,請參閱配置ASP應(yīng)用程序。允許代理效勞器緩存頁通過代理效勞器,應(yīng)用程序可以發(fā)送頁給用戶。代理效勞器代替用戶瀏覽器從Web站點請求網(wǎng)頁。代理效勞器緩存HTML頁以便相同頁的重復(fù)請求能夠快速有效地返回給瀏覽器。代理效勞器執(zhí)行請求并緩存網(wǎng)頁,并減輕網(wǎng)絡(luò)和Web效勞器的負(fù)荷。盡管緩存對HTML頁都能很好運行,但對包含動態(tài)生成信息的ASP頁那么不盡人意。例如,報告股市行情或顯示大量業(yè)務(wù)的存貨清單需要提供即時信息。一小時前的信息對目前來講是很不準(zhǔn)確的。如果應(yīng)用程序返回個人的信息,例如,自定義的主頁,希望用戶不能看到另一個用戶的個人信息。默認(rèn)情況下,ASP命令代理效勞器自己不能緩存ASP頁〔盡管緩存圖像、位圖、小型應(yīng)用程序,和其他緩存頁上的參考項〕??梢允褂肦esponse.CacheControl屬性設(shè)置緩存控制標(biāo)題字段允許緩存某一頁。Response.CacheControl的默認(rèn)值是字符串"Private\",它防止代理效勞器緩存此頁。要允許緩存,可將緩存控制標(biāo)題字段設(shè)置為Public:<%Response.CacheControl=\"Public\"%>因為在任何頁的內(nèi)容被發(fā)送之前,標(biāo)題必須被送給瀏覽器或代理效勞器,所以,可在任何HTML標(biāo)記之前設(shè)置Response.CacheControl屬性或使用Response.Buffer緩存此頁。緩存控制標(biāo)題字段是1.1規(guī)格的一局部。在只支持1.0的代理效勞器上不能緩存ASP頁,因為沒有到期的標(biāo)題字段發(fā)送。防止瀏覽器緩存頁每一個瀏覽器版本都有它自己的規(guī)格來規(guī)定是否緩存頁。要防止瀏覽器緩存ASP頁,可使用Response.Expires設(shè)置到期標(biāo)題:<%Response.Expires=0%>值為0強(qiáng)迫緩存頁到期。因為在任何頁被發(fā)送之前,標(biāo)題必須被送給瀏覽器,所以可通過將Response.Expires屬性放在HTML標(biāo)記之前或使用Response.Buffer緩存該頁。創(chuàng)立動態(tài)通道InternetExplorer4.0有一個新的特性,Web規(guī)劃人員可以使用該屬性將帶有公用主題的Web頁并入一個通道。在瀏覽器中,通道被顯示在通道標(biāo)題欄上;用戶通過單擊圖標(biāo)訪問通道。通道在后臺自動更新;用戶不必訪問站點就可以在自己的瀏覽器上下載最新的頁。通道為用戶提供了一條瀏覽一組相關(guān)的Web頁的快速而直接的通路,并且這些Web頁是自動更新的。使用ASP,可以編寫腳本來收集用戶的首選項,然后動態(tài)地創(chuàng)立通道。通道定義文件(.cdf)建立了通道內(nèi)容的組織和順序。在.cdf文件中的命令使用與HTML標(biāo)記相同的語法,以便于掌握和從腳本中生成。在編寫ASP腳本來創(chuàng)立通道定義文件時,腳本用.cdx擴(kuò)展名。當(dāng)ASP讀取一個以.cdx為擴(kuò)展名的文件時,將自動發(fā)送application/x-cdf內(nèi)容類型,它告訴瀏覽器用通道定義來解釋字節(jié)。如果不使用.cdx作擴(kuò)展名,那么腳本必須用Response.ContentType手工將內(nèi)容類型設(shè)置為application/x-cdf。下面是一個有關(guān)如何使用通道的例如。下面的HTML表格要求用戶選擇通道。提交時,該表風(fēng)格用.cdx文件的腳本去創(chuàng)立通道的定義。<P>Choosethechannelsyouwant.</P><FORMMETHOD=\"POST\"ACTION=\"chan.cdx\"><P><INPUTTYPE=CHECKBOXNAME=Movies>Movies<P><INPUTTYPE=CHECKBOXNAME=Sports>Sports<P><INPUTTYPE=\"SUBMIT\"VALUE=\"SUBMIT\"></FORM>Chan.cdx中的腳本根據(jù)與請求一起提交的表格的值創(chuàng)立

溫馨提示

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

評論

0/150

提交評論