版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認(rèn)領(lǐng)
文檔簡介
授課教師:孫文軍E-MAIL:動態(tài)網(wǎng)頁(ACTIVESERVERPAGES)本課程的地位ASP是計算機專業(yè)非常重要的一門專業(yè)課,它的前期課程主要有靜態(tài)網(wǎng)頁設(shè)計、VBScript腳本語言、JavaScript腳本語言、Potoshop、Flash等。學(xué)好這門課,可以加深對程序設(shè)計和數(shù)據(jù)庫應(yīng)用的理解。本課程的教學(xué)目標(biāo)1溫習(xí)ASP的框架語言——HTML,能熟練編寫一些靜態(tài)頁面。至少掌握一門腳本語言,并會運用該腳本語言對ASP頁面進行必要的控制和一些動態(tài)效果。3熟練運用ASP的一些基本部件和ACTIVEX控件進行文件處理和數(shù)據(jù)庫開發(fā)。通過學(xué)習(xí)(上機練習(xí))做出貼近現(xiàn)實的網(wǎng)站,已達(dá)到培養(yǎng)學(xué)生的實際動手能力和團隊協(xié)作精神。第一講
緒論
一、靜態(tài)與動態(tài)的區(qū)別所謂“靜態(tài)”指的就是網(wǎng)站的網(wǎng)頁內(nèi)容“固定不變”,當(dāng)用戶瀏覽器通過互聯(lián)網(wǎng)的HTTP(HypertextTransportProtocol)協(xié)議向WEB服務(wù)器請求提供網(wǎng)頁內(nèi)容時,服務(wù)器僅僅是將原已設(shè)計好的靜態(tài)HTML文檔傳送給用戶瀏覽器。其頁面的內(nèi)容使用的僅僅是標(biāo)準(zhǔn)的HTML代碼,最多再加上流行的GIF89A格式的動態(tài)圖片,比如產(chǎn)生幾只小狗小貓跑來跑去的動畫效果。若網(wǎng)站維護者要更新網(wǎng)頁的內(nèi)容,就必須手動地來更新其所有的HTML文檔。
“靜態(tài)”網(wǎng)站的致命弱點就是不易維護,為了不斷更新網(wǎng)頁內(nèi)容,你必須不斷地重復(fù)制作HTML文檔,隨著網(wǎng)站內(nèi)容和信息量的日益擴增,你就會感到工作量大得出乎想象。所謂“動態(tài)”,并不是指那幾個放在網(wǎng)頁上的GIF動態(tài)圖片,在這里筆者為動態(tài)頁面的概念制定了以下幾條規(guī)則:
1、“交互性”即網(wǎng)頁會根據(jù)用戶的要求和選擇而動態(tài)改變和響應(yīng),將瀏覽器作為客戶端界面,這將是今后WEB發(fā)展的大事所趨。
2、“自動更新”即無須手動地更新HTML文檔,便會自動生成新的頁面,可以大大節(jié)省工作量。
3、“因時因人而變”,即當(dāng)不同的時間、不同的人訪問同一網(wǎng)址時會產(chǎn)生不同的頁面。
二、幾種常用的“動態(tài)”網(wǎng)站設(shè)計法:1、CGI(CommonGatewayInterface)通用網(wǎng)關(guān)接口的傳統(tǒng)方式,當(dāng)用戶在瀏覽器端填好表單(form)要求輸入的資料,提出HTTP請求后,WEB服務(wù)器端將執(zhí)行一個表單所設(shè)定的可執(zhí)行的CGI應(yīng)用程序,CGI程序分析表單(form)中所輸入的資料,存取WEB數(shù)據(jù)庫,將查詢執(zhí)行的結(jié)果以HTML的格式返回給瀏覽器。使用CGI方式存取WEB數(shù)據(jù)庫,有很多的缺點,譬如不易開發(fā)、變更修改成本高、功能有限、不易偵錯、執(zhí)行速度慢等,而且由于并非整合于HTML文檔之中,因此必須使用與HTML完全不同的設(shè)計過程來設(shè)計一個可執(zhí)行的應(yīng)用程序。
2、IDC(InternetDatabaseConnector)互聯(lián)網(wǎng)數(shù)據(jù)庫連接頭是WindowsNTServer內(nèi)含InternetInformationServer3、ActiveXDataObject(ADO)是WEB數(shù)據(jù)庫應(yīng)用的最佳選擇。
ActiveXDataObject(簡稱ADO)究竟是什么呢?ActiveXDataObject的技術(shù),讓您可以與ActiveServerPages(簡稱ASP)結(jié)合以建立提供數(shù)據(jù)資訊的網(wǎng)頁內(nèi)容,只需在網(wǎng)頁面中執(zhí)行StructuredQueryLanguage(結(jié)構(gòu)化查詢語言,簡稱SQL)指令,讓用戶在瀏覽器界面中輸入、更新、和刪除WEB服務(wù)器上的數(shù)據(jù)資料。當(dāng)用戶端的瀏覽器填好表單所要求輸入的資料并按下“Submit”按鈕后,經(jīng)過互聯(lián)網(wǎng)、內(nèi)聯(lián)網(wǎng)傳送HTTP請求到WEB服務(wù)器,該請求在WEB服務(wù)器執(zhí)行一個表單所指定的ActiveServerPages程序(后綴名為.ASP的文檔)。一個.ASP文檔是一個純文字檔,包括:HTML標(biāo)記(tags)、VBScript或JScript語言的程序代碼、ASP語法、和結(jié)構(gòu)化查詢語言SQL指令。IIS3.0/4.0WEB服務(wù)器執(zhí)行.ASP文檔,通過ODBC驅(qū)動程式,連接到支持ODBC的數(shù)據(jù)庫上,執(zhí)行ASP文檔所指定的SQL指令,最后將執(zhí)行的結(jié)果以HTML的格式傳送給用戶瀏覽器。ADO具有容易使用、開發(fā)執(zhí)行快速、消耗系統(tǒng)資源較少,和占用磁盤空間小等優(yōu)點。
以上就是目前設(shè)計商業(yè)網(wǎng)站常用的“動態(tài)”技術(shù),從長遠(yuǎn)來看ADO和ASP的結(jié)合也勢必成為今后一段時間內(nèi)“動態(tài)”WEB的核心技術(shù)。第二講ASP簡介
上一章簡要介紹了建立動態(tài)網(wǎng)站的一些方法和制作工具,本章將以如何建立基于IIS的ASP動態(tài)網(wǎng)站為中心向大家一步一步地揭示動態(tài)商業(yè)網(wǎng)站設(shè)計的真正奧秘。MicrosoftActiveServerPages即我們所稱的ASP,其實是一套微軟開發(fā)的服務(wù)器端腳本環(huán)境,ASP內(nèi)含于IIS3.0和4.0之中,通過ASP我們可以結(jié)合HTML網(wǎng)頁、ASP指令和ActiveX元件建立動態(tài)、交互且高效的WEB服務(wù)器應(yīng)用程序。有了ASP你就不必?fù)?dān)心客戶的瀏覽器是否能運行你所編寫的代碼,因為所有的程序4.與瀏覽器無關(guān)(BrowserIndependence),用戶端只要使用可執(zhí)行HTML碼的瀏覽器,即可瀏覽ActiveServerPages所設(shè)計的網(wǎng)頁內(nèi)容。ActiveServerPages所使用的腳本語言(VBScript、Jscript)均在WEB服務(wù)器端執(zhí)行,用戶端的瀏覽器不需要能夠執(zhí)行這些腳本語言。
5.ActiveServerPages能與任何ActiveXscripting語言相容。除了可使用VBScript或JScript語言來設(shè)計外,還通過plug-in的方式,使用由第三方所提供的其他腳本語言,譬如REXX、Perl、Tcl等。腳本引擎是處理腳本程序的COM(ComponentObjectModel)物件。
6.ActiveServerPages的源程序,不會被傳到客戶瀏覽器,因而可以避免所寫的源程序被他人剽竊,也提高了程序的安全性。
7.可使用服務(wù)器端的腳本來產(chǎn)生客戶端的腳本。
8.物件導(dǎo)向(Object-oriented)。
9.ActiveXServerComponents(ActiveX服務(wù)器元件)具有無限可擴充性??梢允褂肰isualBasic、Java、VisualC++、COBOL等編程語言來編寫你所需要的ActiveXServerComponent。
運行ASP所需的環(huán)境:
·MicrosoftInternetInformationServerversion3.0/4.0onWindowsNTServer
·MicrosoftPeerWebServicesVersion3.0onWindowsNTWorkstation
·MicrosoftPersonalWebServeronWindows95/98
與一般的程序不同,.asp程序無須編譯,ASP程序的控制部份,是使用VBScript、JScript等腳本語言來設(shè)計的,當(dāng)執(zhí)行ASP程序時,腳本程序?qū)⒁徽酌畎l(fā)送給腳本解釋器(即腳本引擎),由腳本解釋器進行翻譯并將其轉(zhuǎn)換成服務(wù)器所能執(zhí)行的命令。當(dāng)然,同其他編程語言一樣,ASP程序的編寫也遵循一定的規(guī)則,如果你想使用你所喜愛的腳本語言編寫ASP程序,那么你的服務(wù)器上必須要有能解釋這種腳本語言的腳本解釋器。當(dāng)你安裝ASP時,系統(tǒng)提供了兩種腳本語言:VBsrcipt和JScript,而VBscript則被作為系統(tǒng)默認(rèn)的腳本語言。ASP本身并不是一種腳本語言,它只是提供了一種使鑲嵌在HTML頁面中的腳本程序得以運行的環(huán)境。但是,要學(xué)好ASP又必須掌握它的語法和規(guī)則?,F(xiàn)在就讓我們開始一步一步地認(rèn)識并學(xué)習(xí)ActiveServerPages。
如前所述ASP所提供的腳本運行環(huán)境可支持多種腳本語言,譬如:JScript、REXX、PERL等等,這無疑給ASP程序設(shè)計者提供了廣泛的發(fā)揮余地。ASP的出現(xiàn)使得廣大WEB設(shè)計者不必在為客戶瀏覽器是否支持而擔(dān)心,實際上就算你在同一個.asp文件中使用不同的腳本語言,你都無須為此擔(dān)憂,因為所有的一切都將在服務(wù)器端進行,客戶瀏覽器得到的只是一個程序執(zhí)行的結(jié)果,而你也只需在.asp中聲明使用不同的腳本語言即可。下面是一個典型的在同一.asp文件中使用兩種腳本語言的例子:
<HTML>
<BODY>
<TABLE>
<%CallCallme%>
</TABLE>
<%CallViewDate%>
</BODY>
</HTML>
<SCRIPTLANGUAGE=VBScriptRUNAT=Server>
SubCallme
Response.Write"<TR><TD>Call</TD><TD>Me</TD></TR>"
EndSub
</SCRIPT>
<SCRIPTLANGUAGE=JScriptRUNAT=Server>
functionViewDate()
{
varx
x=newDate()
Response.Write(x.toString())
}
</SCRIPT>
“<%%>”其實是標(biāo)準(zhǔn)的ASP定界符,而“<SCRIPT></SCRIPT>”之間的就是腳本語言。ASP不同于腳本語言,它有自己特定的語法,所有的ASP命令都必須包含在<%和%>之內(nèi),如:<%test="English"%>,ASP通過包含在<%和%>中的表達(dá)式將執(zhí)行結(jié)果輸出到<html>
<body>
<FONTCOLOR="Green">
<%IfTime<#12:00:00#AndTime>=#00:00:00#Then%>
早上好,今天天氣不賴啊!
<%ElseIfTime<#19:00:00#AndTime>=#12:00:00#Then%>
下午好!
<%Else%>
哈嘍!今晚你有沒有去IRC聊天!
<%EndIf%>
</body>
</html>第三講ASP基礎(chǔ)本篇將繼續(xù)介紹一些用ASP編寫的WEB動態(tài)功能。由于WEB瀏覽器標(biāo)準(zhǔn)的不一致從而使得如何能夠讓自己制作的網(wǎng)站去適應(yīng)各種不同的瀏覽器成為了廣大網(wǎng)站設(shè)計者最為頭疼的事,在如今的形勢之下,我們不肯也不可能去拋棄Netscape或IE中的任何一種客戶群,但我們有時候又不得不去考慮客戶端瀏覽器的實際瀏覽效果,過去我們常用JavaScript編寫一段程序來辨別客戶端使用的不同的瀏覽器,那么今天就讓我們來看看如何使用ASP更為便捷且精確地達(dá)到這一目的。以下代碼保存為browser.asp。<%@LANGUAGE=VBScript%>
<HTML>
<HEAD>
<TITLE>用ASP提供的瀏覽器性能組件來辨別客戶瀏覽器</TITLE>
</HEAD>
<BODYBGCOLOR="White"topmargin="10"leftmargin="10">
<fontsize="4"face="Arial,Helvetica"><b>用ASP提供的瀏覽器性能組件來辨<br>別客戶瀏覽器</b></font><br>
<tr>
<td>MajorVersion</td>
<td><%=bc.Majorver%></Td><tr>
<td>MinorVersion</td>
<td><%=bc.Minorver%></Td>
<tr>
<td>FrameSupport</td>
<td><%=bc.Frames%></Td>
<tr>
<td>TableSupport</td>
<td><%=bc.Tables%></Td>
<tr>
<td>CookieSupport</td>
<td><%=bc.Cookies%></Td>
<tr>
<td>BackgroundSoundSupport</td>
<td><%=bc.BackgroundSounds%></Td>
<tr>
<td>VBScriptSupport</td>
<td><%=bc.VBScript%></Td>
<tr>
<td>JavaScriptSupport</td>
<td><%=bc.JavaScript%></Td>
</table>
</BODY>
</HTML>
在本例中我們用到了一個ASP提供的ActiveX組件--"BrowserCapabilities"。ActiveX組件作為基于Web的應(yīng)用程序部分在Web服務(wù)器上運行,組件提供了應(yīng)用程序的主要功能(如訪問、修改數(shù)據(jù)庫等),這樣WEB設(shè)計者們就不必創(chuàng)建或重新創(chuàng)建執(zhí)行這些任務(wù)的代碼,從而提高了工作的效率,有關(guān)ActiveX組件將在今后詳細(xì)討論。在你的瀏覽器中刷新browser.asp,程序?qū)⒆詣颖鎰e瀏覽器的屬性并動態(tài)顯示不同的信息。不難發(fā)現(xiàn)在整個browser.asp文件中幾乎沒有用到任何復(fù)雜的編程,就輕而易舉的達(dá)到了動態(tài)鑒別客戶瀏覽器并動態(tài)產(chǎn)生響應(yīng)事件的效果。事實上,這個程序的關(guān)鍵就在于前文提到的ActiveX組件--"BrowserCapabilities",它的作用類似于一個Function,只需簡單地在程序中調(diào)用該組件即能達(dá)到你所希望的效果。
第四講ASP腳本基礎(chǔ)1.變量、進程的概念所謂變量是計算機內(nèi)存中已命名的存儲位置,其中包含了數(shù)字或字符串等數(shù)據(jù),它使用戶便于理解腳本操作的名稱,為用戶提供了一種存儲、檢索和操作數(shù)據(jù)的途徑。程序是由一個或多個進程組成的,在VBScript中,進程就是“指令塊”,通常意義上的進程,如Sub,只是為了簡單的數(shù)據(jù)處理。
在VBScript中,嚴(yán)格的來講變量是不用聲明的,
如:<%Mystring="Thisismystring"%>
然而,即使在使用變量前不需要去聲明變量,也應(yīng)養(yǎng)成在編程時聲明變量的良好習(xí)慣,因為這樣有助于防止錯誤發(fā)生。聲明一個變量意味著告訴腳本引擎,有一個特定名稱的變量,這樣就可以在腳本中引用該變量。在VBScript中聲明一個變量可以使用“Dim”語句,如下:
<scriptlanguage="VBScript">
<!--
OptionExplicit'要求在腳本中聲明所有的變量
DimMystring
Mystring="Thisismystring"
-->
</script>
變量的作用域即生命期,決定哪些腳本命令可訪問變量。在過程內(nèi)部聲明的變量具有局部作用域。每執(zhí)行一次過程,變量就被創(chuàng)建然后消亡。而過程外部的任何命令都不能訪問它。在過程外部聲明的變量具有全局作用域,其值能被ASP頁上的任何腳本命令訪問和修改。聲明變量時,局部變量和全局變量可以有相同的名稱。而改變其中一個的值并不會改變另一個的值。如果沒有聲明變量,則可能不小心會改變一個全局變量的值。例如,以下腳本命令返回值1,雖然有兩個名為Y變量:
<%
DimYY=1CallSetLocalVariableResponse.WriteY
SubSetLocalVariable
DimY
Y=2EndSub%>
由于變量沒有顯式聲明,以下的腳本命令將返回2。當(dāng)過程調(diào)用將Y設(shè)置為2時,腳本引擎認(rèn)為該過程是要修改全局變量:
<%
Y=1CallSetLocalVariableResponse.WriteY
SubSetLocalVariable
Y=2
EndSub%>
然而,全局變量僅在單個ASP頁中可用,要使它在單個ASP頁之外可用,就必須為變量賦予會話或應(yīng)用程序作用域。會話作用域變量對一個用戶所請求的ASP應(yīng)用程序中的所有頁都是可用的。應(yīng)用程序作用域變量也如此。對單個用戶來說,會話變量是存儲信息的最佳途徑,例如,用戶首選項、用戶名或用戶的標(biāo)識。對于一個特殊應(yīng)用程序的所有用戶,應(yīng)用程序作用域是存儲信息的最佳途徑,例如,應(yīng)用程序特定的問候語或應(yīng)用程序所需的初始值。ASP提供兩個內(nèi)建對象來讓您存儲變量:Session對象和Application對象,這將在今后的ASP內(nèi)建對象中著重討論。
常量是用來代替一個數(shù)或字符串的名稱,它在整個腳本中保持不變。您可以使用Const語句在VBScript中創(chuàng)建用戶自定義常數(shù)。使用Const語句可以創(chuàng)建名稱具有一定含義的字符串型或數(shù)值型常數(shù),并給它們賦原義值。例如:。
如:<%Constmystring="這是一個常量"%>
<%Constmyage=100%>
請注意字符串文字包含在兩個引號("")之間。這是區(qū)分字符串型常數(shù)和數(shù)值型常數(shù)的最明顯的方法。日期文字和時間文字包含在兩個井號(#)之間。例如:
<%ConstCutoffDate=#6-1-97#%>
過程是一組能執(zhí)行指定任務(wù)且具有返回值的腳本命令。您可以定義自己的過程,然后在腳本中反復(fù)調(diào)用它們。您可以將過程定義放在調(diào)用過程的.asp文件中,也可以將通用過程放在一個共享的.asp文件中,然后用SSI#include指令將其包含進其他調(diào)用其過程的.asp文件中。您還可選擇另一種方法,即把這些功能打包在ActiveX組件中。過程定義可出現(xiàn)在<SCRIPT>和</SCRIPT>標(biāo)記內(nèi)部且必須遵循聲明腳本語言的規(guī)則。如果過程所用的語言與主腳本語言不同,則要使用<SCRIPT>元素。主腳本語言中的過程用腳本分界符(<%和%>)分隔。用HTML<SCRIPT>標(biāo)記時,必須使用兩個屬性來保證服務(wù)器端能夠處理腳本。使用<SCRIPT>標(biāo)記的語法如下:
<SCRIPTRUNAT=SERVERLANGUAGE=JSCRIPT>
proceduredefinition
</SCRIPT>
這里的RUNAT=SERVER屬性通知Web服務(wù)器在服務(wù)器上處理腳本。若不設(shè)置該屬性,腳本將由客戶端瀏覽器處理。LANGUAGE屬性決定此腳本塊所用的腳本語言。您可以指定任何一種具有腳本引擎的語言。請使用VBSCRIPT指定VBScript;用JSCRIPT指定JScript。若不設(shè)置LANGUAGE屬性,將用主腳本語言解釋此腳本塊。
在VBScript中,過程被分為兩類:Sub過程和Function過程。Sub過程是包含在Sub和EndSub語句之間的一組VBScript語句,執(zhí)行操作但不返回值。Sub過程可以使用參數(shù)(由調(diào)用過程傳遞的常數(shù)、變量或表達(dá)式)。如果Sub過程無任何參數(shù),則Sub語句必須包含空括號()。
Function過程是包含在Function和EndFunction語句之間的一組VBScript語句。Function過程與Sub過程類似,但是Function過程可以返回值。Function過程可以使用參數(shù)(由調(diào)用過程傳遞的常數(shù)、變量或表達(dá)式)。如果Function過程無任何參數(shù),則Function語句必須包含空括號()。Function過程通過函數(shù)名返回一個值,這個值是在過程的語句中賦給函數(shù)名的。Function返回值的數(shù)據(jù)類型總是Variant。在下面的示例中Sub過程使用兩個固有的(或內(nèi)置的)VBScript函數(shù),即MsgBox和InputBox,來提示用戶輸入信息。然后顯示根據(jù)這些信息計算的結(jié)果。計算由使用VBScript創(chuàng)建的Function過程完成,Celsius函數(shù)將華氏度換算為攝氏度。Sub過程ConvertTemp調(diào)用此函數(shù)時,包含參數(shù)值的變量被傳遞給函數(shù)。換算結(jié)果返回到調(diào)用過程并顯示在消息框中。
SubConvertTemp()
temp=InputBox("請輸入華氏溫度。",1)
MsgBox"溫度為"&Celsius(temp)&"攝氏度。"
EndSub
FunctionCelsius(fDegrees)
Celsius=(fDegrees-32)*5/9
EndFunction
給過程傳遞數(shù)據(jù)的途徑是使用參數(shù)。參數(shù)被作為要傳遞給過程的數(shù)據(jù)的占位符。參數(shù)名可以是任何有效的變量名。使用Sub語句或Function語句創(chuàng)建過程時,過程名之后必須緊跟括號。括號中包含所有參數(shù),參數(shù)間用逗號分隔。例如,在下面的示例中,fDegrees是傳遞給Celsius函數(shù)的值的占位符:
FunctionCelsius(fDegrees)
Celsius=(fDegrees-32)*5/9
EndFunction
要從過程獲取數(shù)據(jù),必須使用Function過程。請記住,F(xiàn)unction過程可以返回值;Sub過程不返回值。
以上給大家簡要介紹了VBScript。由于ASP本身并不是一種編程語言,因此在大家編寫ASP應(yīng)用程序的過程中,必須借助腳本語言來實現(xiàn)許多特殊的功能,所以靈活熟練地掌握腳本語言對一個使用ASP編寫WEB應(yīng)用程序的程序員來說是至關(guān)重要的。無論是一個有豐富編程經(jīng)驗的高手還是一個初學(xué)者,只要現(xiàn)在希望通過ASP編寫WEB應(yīng)用程序,必須掌握至少一門腳本語言(如VBScript)。第五講腳本變量、函數(shù)、過程和條件語句函數(shù)和過程一樣都是命名了的代碼塊,但它們卻有很大的區(qū)別,過程完成程序任務(wù),函數(shù)則返回值。我們可以這樣理解,過程象一個完整的句子,而函數(shù)則象一個單詞。舉個例子,當(dāng)你想獲取某個數(shù)的平方根,你只要將該數(shù)傳給VBScript的Sqr()函數(shù),此函數(shù)會立即返回該數(shù)的平方根。如:
A=sqr(9)
則A=3。如果不熟悉VBScrip,就不會知道VBScrip本身提供了一個用來取得日期之間的差或和的函數(shù)DateSerial,它的語法如下:
DateSerial(year,month,day)
如果你要指定一個日期,例如:1998年11月10日,那么DateSerial函數(shù)中每個參數(shù)的取值范圍都應(yīng)該是可接受的,即日的取值應(yīng)在1和31之間,月的取值應(yīng)在1和12之間。但是,也可以使用表示某日之前或之后的年、月、日數(shù)目的數(shù)值表達(dá)式為每個參數(shù)指定相對日期。以下樣例中使用了數(shù)值表達(dá)式代替絕對日期。在這里,DateSerial函數(shù)返回1998年11月10日之前二十年(1990-20)零兩個月(11-2)又一天(10-1)的日期:即1978年9月9日。程序如下:
Datep=DateSerial(1998-20,11-2,10-1)
對于year參數(shù),若取值范圍是從0到99,則被解釋為1900到1999年。對于此范圍之外的year參數(shù),則使用四位數(shù)字表示年份(例如1800年)。當(dāng)任何一個參數(shù)的取值超出可接受的范圍時,則會適當(dāng)?shù)剡M位到下一個較大的時間單位。例如,如果指定了35天,則這個天數(shù)將被解釋成一個月加上多出來的日數(shù),多出來的日數(shù)取決于其年份和月份。但是如果參數(shù)值超出-32,768到32,767的范圍,或者由三個參數(shù)指定(無論是直接還是通過表達(dá)式指定)的日期超出了可以接受的日期范圍,就會發(fā)生錯誤。VBScript的基本語法。
在程序中控制程序流程的語句主要可以分為條件語句和循環(huán)語句,在VBScript中可使用以下條件語句:If...Then...Else語句
SelectCase語句
If...Then...Else語句用于計算條件是否為True或False,并且根據(jù)計算結(jié)果指定要運行的語句。通常,條件是使用比較運算符對值或變量進行比較的表達(dá)式,If...Then...Else語句可以按照需要進行嵌套。
創(chuàng)建兩個范例文件:if1.asp和if2.asp
if1.asp<html>
<head>
<TITLE>if1.asp</TITLE>
</head><bodybgcolor="#FFFFFF">
<formaction="if2.asp"method=get>
YourFirstName<INPUTNAME="FirstName"MaxLength=20><p>
YourLastName<INPUTNAME="LastName"MaxLength=20><p>
<INPUTTYPE=submit><INPUTTYPE=reset>
</form>
</body>
</html>
if2.asp<html>
<head>
<TITLE>ifrespond.asp</TITLE>
</head>
<%fname=request.querystring("Firstname")
lname=request.querystring("Lastname")
Iffname="George"andlname="Washington"then%>
Hi.Youmustbethefirstpresident!
<%else%>
Hi!NicetoMeetYou
<%endif%>
</body>
</html>
asp1.asp產(chǎn)生一個文本輸入框,要求用戶輸入姓、名,如下圖:
asp2.asp則是用IF語句判斷用戶輸入的姓名是否為“GeorgeWashington”,并做出相應(yīng)的反饋。在此使用了一個ASP的內(nèi)建對象request,通過使用request對象可以訪問任何用HTTP請求傳遞的信息,包括從HTML表格中用POST方法或GET方法傳遞的參數(shù)、cookie和用戶認(rèn)證。而QueryString集合檢索HTTP查詢字符串中變量的值,HTTP查詢字符串由問號(?)后的值指定。如:
生成值為“Firstname=George&Lastname=Washington”的變量名字符串。關(guān)于ASP對象將在以后的講述。
If...Then...Else語句的一種變形允許您從多個條件中選擇,即添加ElseIf子句以擴充If...Then...Else語句的功能,使可以控制基于多種可能的程序流程。
將asp2.asp的程序部分?jǐn)U充如下:<%
fname=lcase(request.querystring("Firstname"))
lname=lcase(request.querystring("Lastname"))
Iffname="george"andlname="washington"then%>
Hi.Youmustbethefirstpresident!<p>
<%elseIffname="ronald"andlname="reagan"then%>
Hi.Youmustbetheactorpresident!<p>
<%elseIffname="jimmy"andlname="carter"then%>
Hi.Youmustbethepeanutfarmerpresident!<p>
<%elseIffname="naoko"orfname="charles"then%>
Hi.Yournameremindsmeofsomeone,butIamnotsurewho!<p>
<%else%>
Hi!NicetoMeetYou
<%endif%>
可以添加任意多個ElseIf子句以提供多種選擇。但使用多個ElseIf子句經(jīng)常會使程序變得很累贅。在多個條件中進行選擇的更好方法是使用SelectCase語句。
SelectCase結(jié)構(gòu)提供了If...Then...ElseIf結(jié)構(gòu)的一個變通形式,可以從多個語句塊中選擇執(zhí)行其中的一個。SelectCase語句提供的功能與If...Then...Else語句類似,但是可以使代碼更加簡練易讀。SelectCase結(jié)構(gòu)在其開始處使用一個只計算一次的簡單測試表達(dá)式。表達(dá)式的結(jié)果將與結(jié)構(gòu)中每個Case的值比較。如果匹配,則執(zhí)行與該Case關(guān)聯(lián)的語句塊,可以用SelectCase語句來寫asp2.asp文件:
<%
fname=lcase(request.querystring("Firstname"))
lname=lcase(request.querystring("Lastname"))
name=fname+lname
Selectcasename
case"georgewashington"
response.write"Hi.Youmustbethefirstpresident!<p>"
case"ronaldreagan"
response.write"Hi.Youmustbetheactorpresident!<p>"
case"jimmycarter"
response.write"Hi.Youmustbethepeanutfarmerpresident!<p>"
case"naokocharles"
response.write"Hi.Yournameremindsmeofsomeone,butIamnotsurewho!<p>"
caseelse
response.write"Hi!NicetoMeetYou"
EndSelect%>
注意SelectCase結(jié)構(gòu)只計算開始處的一個表達(dá)式,并且只計算一次,而If...Then...ElseIf結(jié)構(gòu)計算每個ElseIf語句的表達(dá)式,這些表達(dá)式可以各不相同。因此僅當(dāng)每個ElseIf語句計算的表達(dá)式都相同時,才可以使用SelectCase結(jié)構(gòu)代替If...Then...ElseIf結(jié)構(gòu)。SelectCase語句也是可以是嵌套的,每一層嵌套的SelectCase語句必須有與之匹配的EndSelect語句。
第六講ASP腳本循環(huán)語句循環(huán)語句的作用就是重復(fù)執(zhí)行程序代碼,循環(huán)可分為三類:一類在條件變?yōu)椤凹佟敝爸貜?fù)執(zhí)行語句,一類在條件變?yōu)椤罢妗敝爸貜?fù)執(zhí)行語句,另一類按照指定的次數(shù)重復(fù)執(zhí)行語句。在VBScript中可使用下列循環(huán)語句:
Do...Loop:當(dāng)(或直到)條件為“真”時循環(huán)。
While...Wend:當(dāng)條件為“真”時循環(huán)。
For...Next:指定循環(huán)次數(shù),使用計數(shù)器重復(fù)運行語句。
ForEach...Next:對于集合中的每項或數(shù)組中的每個元素,重復(fù)執(zhí)行一組語句。Do...Loop,它是可以多次(次數(shù)不定)運行語句塊。當(dāng)條件為“真”時或條件變?yōu)椤罢妗敝?,重?fù)執(zhí)行語句塊。例:<html><head>
<title>DoLoop.asp</title><bodybgcolor="#FFFFFF"></head><p></p><p>請將今年到本月為止的每個月份的銷售結(jié)算記錄填寫在本頁之上。<P>
<%
counter=1
thismonth=month(now())
Dowhilecounter<thismonth+1
response.write""&counter&"月份:"
response.write"______________________________"&"<BR><br>"
Ifcounter>13then
exitdo
endif
counter=counter+1
Loop
%>
<hr></body></html>
這段ASP程序運用循環(huán)語句制作了一張銷售結(jié)算記錄表,將以上代碼剪貼至記事簿保存為DoLoop.asp,并在瀏覽器中以HTTP方式進行瀏覽,根據(jù)當(dāng)前的月份的不同,將看到如下圖的結(jié)果。
此段程序,首先建立一個計數(shù)器“count”并將其值設(shè)為1,然后用函數(shù)month()和now()得到當(dāng)前的月份,最后建立循環(huán),當(dāng)count的值小于當(dāng)前月份的值加1的時候,即顯示月份值及一條橫線并將count的值加1,循環(huán)語句重復(fù)執(zhí)行直到以上條件為假時退出循環(huán)。其中如果count大于13則用exitdo立即退出循環(huán)。
DoLoop語句還可以使用以下語法:
Do
[statements][ExitDo]
[statements]Loop[{While|Until}condition]
由于While...Wend缺少靈活性,所以建議最好使用Do...Loop語句。
For...Next語句用于將語句塊運行指定的次數(shù),在循環(huán)中使用計數(shù)器變量,該變量的值隨每一次循環(huán)增加或減少。
下面的示例將過程MyProc重復(fù)執(zhí)行50次。For語句指定計數(shù)器變量x及其起始值與終止值。Next語句使計數(shù)器變量每次加1。SubDoMyProc50Times()
Dimx
Forx=1To50
MyProc
Next
EndSub
關(guān)鍵字Step用于指定計數(shù)器變量每次增加或減少的值。在下面的示例中,計數(shù)器變量j每次加2。循環(huán)結(jié)束后,total的值為2、4、6、8和10的總和。SubTwosTotal()
Dimj,total
Forj=2To10Step2
total=total+j
Next
MsgBox"總和為"&total&"。"
EndSub
要使計數(shù)器變量遞減,可將Step設(shè)為負(fù)值。此時計數(shù)器變量的終止值必須小于起始值。在下面的示例中,計數(shù)器變量myNum每次減2。循環(huán)結(jié)束后,total的值為16、14、12、10、8、6、4和2的總和。SubNewTotal()
DimmyNum,total
FormyNum=16To2Step-2
total=total+myNum
Next
MsgBox"總和為"&total&"。"
EndSub
ExitFor語句用于在計數(shù)器達(dá)到其終止值之前退出For...Next語句。因為通常只是在某些特殊情況下(例如在發(fā)生錯誤時)要退出循環(huán),所以可以在If...Then...Else語句的True語句塊中使用ExitFor語句。如果條件為False,循環(huán)將照常運行。
ForEach...Next語句
ForEach...Next循環(huán)與For...Next循環(huán)類似。ForEach...Next不是將語句運行指定的次數(shù),而是對于數(shù)組中的每個元素或?qū)ο蠹现械拿恳豁椫貜?fù)一組語句。這在不知道集合中元素的數(shù)目時非常有用。它的語法如下:ForEachelementIngroup
[statements]
[ExitFor]
[statements]Next[element]
如果group中有至少一個元素,就會進入ForEach塊執(zhí)行。一旦進入循環(huán),便首先對group中第一個元素執(zhí)行循環(huán)中的所有語句。只要group中還有其他的元素,就會對每個元素執(zhí)行循環(huán)中的語句。當(dāng)group中沒有其他元素時退出循環(huán),然后從Next語句之后的語句繼續(xù)執(zhí)行。
MicrosoftScriptDebugger提供以下的除錯功能:
1、設(shè)定中斷點
2、逐步追蹤腳本程序。
3、設(shè)定書簽。
4、檢視呼叫堆疊。
5、檢視和更改變數(shù)值。
6、執(zhí)行腳本指令。
第七講ASP內(nèi)建對象Request1.ASP的六個內(nèi)建對象和各種組件的特性和方法什么是對象?它可不是指你戀愛的男伴或女伴。在面向?qū)ο缶幊讨校瑢ο缶褪侵赣僧?dāng)作完整實體的操作和數(shù)據(jù)組成的變量。對象是基于特定模型的,在對象中客戶使用對象的服務(wù)通過由一組方法或相關(guān)函數(shù)的接口訪問對象的數(shù)據(jù),然后客戶端可以調(diào)用這些方法執(zhí)行某中操作。ActiveX組件是建立Web應(yīng)用程序的關(guān)鍵,組件提供了在腳本中執(zhí)行任務(wù)的對象。ActiveX組件是一個文件,該文件包含執(zhí)行某項或一組任務(wù)的代碼,由于組件可以執(zhí)行公用任務(wù),這樣程序員們就不必自己去創(chuàng)建執(zhí)行這些任務(wù)的代碼??梢岳媒M件作為腳本和基于Web應(yīng)用程序的基本構(gòu)造塊。只要知道如何訪問組件提供的對象,即使是位編寫腳本的新手,也可以在不了解組件運作方式的情況下編寫腳本??傊?,組件使您不用學(xué)習(xí)編程就能夠編寫強大的腳本。組件是包含在動態(tài)鏈接庫.dll或可執(zhí)行文件.exe中的可執(zhí)行代碼。組件可以提供一個或多個對象以及對象的方法和屬性。要使用組件提供的對象,請創(chuàng)建對象的實例并將這個新的實例分配變量名。使用ASP的Server.CreateObject方法可以創(chuàng)建對象的實例,使用腳本語言的變量分配指令可以為對象實例命名。如下例:
Setdb=Server.CreateObject("ADODB.Connection")
這里的變量db就是ASP程序創(chuàng)建的訪問數(shù)據(jù)庫的對象實例。
ActiveServerPages提供了可在腳本中使用的內(nèi)建對象。這些對象使用戶更容易收集通過瀏覽器請求發(fā)送的信息、響應(yīng)瀏覽器以及存儲用戶信息,從而使對象開發(fā)者擺脫了很多煩瑣的工作。目前的ASP版本總共提供了六個內(nèi)建對象,下面讓我們將通過實例分別來進行學(xué)習(xí)。
一、Request對象
可以使用Request對象訪問任何基于HTTP請求傳遞的所有信息,包括從HTML表格用POST方法或GET方法傳遞的參數(shù)、cookie和用戶認(rèn)證。Request對象使您能夠訪問客戶端發(fā)送給服務(wù)器的二進制數(shù)據(jù)。
Request的語法:
Request[.集合|屬性|方法](變量)
在這里作者將挑選一些常用的對象語法進行分析
1、Form
Form集合通過使用POST方法的表格檢索郵送到HTTP請求正文中的表格元素的值。
語法
Request.Form(element)[(index)|.Count]
參數(shù)
element指定集合要檢索的表格元素的名稱。
index可選參數(shù),使用該參數(shù)可以訪問某參數(shù)中多個值中的一個。它可以是1到Request.Form(parameter).Count之間的任意整數(shù)。
Count集合中元素的個數(shù)
Form集合按請求正文中參數(shù)的名稱來索引。Request.Form(element)的值是請求正文中所有element值的數(shù)組。通過調(diào)用Request.Form(element).Count來確定參數(shù)中值的個數(shù)。如果參數(shù)未關(guān)聯(lián)多個值,則計數(shù)為1。如果找不到參數(shù),計數(shù)為0。要引用有多個值的表格元素中的單個值,必須指定index值。index參數(shù)可以是從1到Request.Form(element).Count中的任意數(shù)字。如果引用多個表格參數(shù)中的一個,而未指定index值,返回的數(shù)據(jù)將是以逗號分隔的字符串。
可以使用重述符來顯示表格請求中的所有數(shù)據(jù)值。例如,用戶通過指定幾個值填寫表格,見下圖。
對于hobby參數(shù),您可以使用下面的腳本檢索這些值。<html><head><title></title></head><body><p>請?zhí)顚懩愕膼酆?lt;/p><formmethod=“POST”action=“form.asp”><p><inputtype=“text”name=“hobby”size=“20”><br><inputtype=“checkbox”name=“hobby”value=“足球”>足球<inputtype=“checkbox”name=“hobby”value=“乒乓球”>乒乓球</p><p><inputtype=“submit”value=“發(fā)送”name=“B1”><inputtype=“reset”value=“重填”name=“B2”></p></form><%ForEachiInRequest.Form(“hobby”)Response.Writei&“<BR>”Next%></body></html>
將以上代碼剪貼到記事簿中(注意將“<”后面的空格去掉),保存為form.asp文件并運行,request對象可以根據(jù)你在form中填入或選擇元素內(nèi)容的不同將元素逐個顯示出來。
當(dāng)然使用For...Next循環(huán)也可以生成同樣的輸出,如下所示:
<%
Fori=1ToRequest.Form("hobby").Count
Response.WriteRequest.Form("hobby")(i)&"<BR>"Next
%>
2、QueryString
QueryString集合檢索HTTP查詢字符串中變量的值,HTTP查詢字符串由問號(?)后的值指定。如:
<AHREF="example.asp?string=thisisasample">stringsample</A>
生成值為"thisisasample"的變量名字符串。通過發(fā)送表格或由用戶在其瀏覽器的地址框中鍵入查詢也可以生成查詢字符串。
語法
Request.QueryString(variable)[(index)|.Count]
QueryString集合可以讓您以名稱檢索QUERY_STRING變量。Request.QueryString(參數(shù))的值是出現(xiàn)在QUERY_STRING中所有參數(shù)的值的數(shù)組。通過調(diào)用Request.QueryString(parameter).Count可以確定參數(shù)有多少個值。
可以使用QueryString來達(dá)到與前一個范例相同的功能。只需要將request.form部分替換如下:
<%
ForEachiInRequest.querystring("hobby")
Response.Writei&"<BR>"
Next
%>
3、Cookies
什么是Cookie?Cookie其實是一個標(biāo)簽,當(dāng)你訪問一個需要唯一標(biāo)識你的站址的WEB站點時,它會在你的硬盤上留下一個標(biāo)記,下一次你訪問同一個站點時,站點的頁面會查找這個標(biāo)記。每個WEB站點都有自己的標(biāo)記,標(biāo)記的內(nèi)容可以隨時讀取,但只能由該站點的頁面完成。每個站點的Cookie與其他所有站點的Cookie存在同一文件夾中的不同文件內(nèi)(你可以在Windows的目錄下的Cookie文件夾中找到它們)。一個Cookie就是一個唯一標(biāo)識客戶的標(biāo)記,Cookie可以包含在一個對話期或幾個對話期之間某個WEB站點的所有頁面共享的信息,使用Cookie還可以在頁面之間交換信息。Request提供的Cookies集合允許用戶檢索在HTTP請求中發(fā)送的cookie的值。這項功能經(jīng)常被使用在要求認(rèn)證客戶密碼以及電子公告板、WEB聊天室等ASP程序中。
語法
Request.Cookies(cookie)[(key)|.attribute]
參數(shù)
cookie指定要檢索其值的cookie。
key可選參數(shù),用于從cookie字典中檢索子關(guān)鍵字的值。
attribe指定cookie自身的有關(guān)信息。如:HasKeys只讀,指定cookie是否包含關(guān)鍵字。
可以通過包含一個key值來訪問cookie字典的子關(guān)鍵字。如果訪問cookie字典時未指定key,則所有關(guān)鍵字都會作為單個查詢字符串返回。例如,如果MyCookie有兩個關(guān)鍵字,First和Second,而在調(diào)用Request.Cookies時并未指定其中任何一個關(guān)鍵字,那么將返回下列字符串。
First=firstkeyvalue&Second=secondkeyvalue
如果客戶端瀏覽器發(fā)送了兩個同名的cookie,那么Request.Cookie將返回其中路徑結(jié)構(gòu)較深的一個。例如,如果有兩個同名的的cookie,但其中一個的路徑屬性為/www/而另一個為/,客戶端瀏覽器同時將兩個cookie都發(fā)送到/目錄中,那么Request.Cookie將只返回第二個cookie。
要確定某個cookie是不是cookie字典(cookie有否有關(guān)鍵字),可使用下列腳本。
<%=Request.Cookies("myCookie").HasKeys%>
如果myCookie是一個cookie字典,則前面的賦值為TRUE。否則,為FALSE。下面我們來看看一個cookie的應(yīng)用實例:
<%
nickname=request.form("nick")response.cookies("nick")=nickname
'用response對象將用戶名寫入Cookie之中
response.write"歡迎"&request.cookies("nick")&"光臨小站!"
%>
<html><head><metahttp-equiv="Content-Type"content="text/html;charset=gb2312">
<title>cookie</title>
<metaname="GENERATOR"content="MicrosoftFrontPage3.0"></head>
<body>
<formmethod="POST"action="cookie.asp">
<p><inputtype="text"name="nick"size="20">
<inputtype="submit"value="發(fā)送"name="B1"><inputtype="reset"value="重填"name="B2"></p></form>
</body></html>
這其實是一個在基于WEB的BBS或CHAT的ASP程序中常用的手法,它將用戶在起始頁面上填入的姓名保存在cookie中,這樣后面的程序就可以很容易地調(diào)用該用戶的nick了。4、ServerVariables
在瀏覽器中瀏覽網(wǎng)頁的時候使用的傳輸協(xié)議是HTTP,在HTTP的標(biāo)題文件中會記錄一些客戶端的信息,如:客戶的IP地址等等,有時服務(wù)器端需要根據(jù)不同的客戶端信息做出不同的反映,這時候就需要用ServerVariables集合獲取所需信息。
語法
Request.ServerVariables(服務(wù)器環(huán)境變量)
由于服務(wù)器環(huán)境變量較多,將一些常用的變量在下表中列出:ALL_HTTP客戶端發(fā)送的所有HTTP標(biāo)題文件。CONTENT_LENGTH客戶端發(fā)出內(nèi)容的長度。CONTENT_TYPE內(nèi)容的數(shù)據(jù)類型。如:“text/html”。同附加信息的查詢一起使用,如HTTP查詢GET、POST和PUT。LOCAL_ADDR返回接受請求的服務(wù)器地址。如果在綁定多個IP地址的多宿主機器上查找請求所使用的地址時,這條變量非常重要。LOGON_USER用戶登錄WindowsNT的帳號。QUERY_STRING查詢HTTP請求中問號(?)后的信息。REMOTE_ADDR發(fā)出請求的遠(yuǎn)程主機(client)的IP地址。REMOTE_HOST發(fā)出請求的主機(client)名稱。如果服務(wù)器無此信息,它將設(shè)置為空的MOTE_ADDR變量。REQUEST_METHOD該方法用于提出請求。相當(dāng)于用于HTTP的GET、HEAD、POST等等。SERVER_NAME出現(xiàn)在自引用URL中的服務(wù)器主機名、DNS化名或IP地址。SERVER_PORT發(fā)送請求的端口號。
我們可以使用以下腳本打印出所有的服務(wù)器環(huán)境變量。<TABLE>
<TR><TD><B>ServerVariable</B></TD><TD><B>Value</B></TD></TR><%ForEachnameInRequest.ServerVariables%>
<TR><TD><%=name%></TD><TD><%=Request.ServerVariables(name)%></TD></TR></TABLE>
<%Next%>
第八講ASP內(nèi)建對象Response
下面,學(xué)習(xí)ASP的另一個內(nèi)建對象Response。
與Request是獲取客戶端HTTP信息相反,Response對象是用來控制發(fā)送給用戶的信息,包括直接發(fā)送信息給瀏覽器、重定向瀏覽器到另一個URL或設(shè)置cookie的值。
語法Response.collection|property|method
一、屬性
1、Buffer
Buffer屬性指示是否緩沖頁輸出。當(dāng)緩沖頁輸出時,只有當(dāng)前頁的所有服務(wù)器腳本處理完畢或者調(diào)用了Flush或End方法后,服務(wù)器才將響應(yīng)發(fā)送給客戶端瀏覽器,服務(wù)器將輸出發(fā)送給客戶端瀏覽器后就不能再設(shè)置Buffer屬性。因此應(yīng)該在.asp文件的第一行調(diào)用Response.Buffer。
2、Charset
Charset屬性將字符集名稱附加到Response對象中content-type標(biāo)題的后面。對于不包含Response.Charset屬性的ASP頁,content-type標(biāo)題將為:content-type:text/html。
我們可以在.asp文件中指定content-type標(biāo)題,如:
<%Response.Charset="gb2312")%>
將產(chǎn)生以下結(jié)果:
content-type:text/html;charset=gb2312
注意,無論字符串表示的字符集是否有效,該功能都會將其插入content-type標(biāo)題中。且如果某個頁包含多個含有Response.Charset的標(biāo)記,則每個Response.Charset都將替代前一個CharsetName。這樣,字符集將被設(shè)置為該頁中Response.Charset的最后一個實例所指定值。
3、ContentType
ContentType屬性指定服務(wù)器響應(yīng)的HTTP內(nèi)容類型。如果未指定ContentType,默認(rèn)為text/HTML。
4、Expires
Expires屬性指定了在瀏覽器上緩沖存儲的頁距過期還有多少時間。如果用戶在某個頁過期之前又回到此頁,就會顯示緩沖區(qū)中的頁面。如果設(shè)置response.expires=0,則可使緩存的頁面立即過期。這是一個較實用的屬性,當(dāng)客戶通過ASP的登陸頁面進入WEB站點后,應(yīng)該利用該屬性使登陸頁面立即過期,以確保安全。
5、ExpiresAbsolute
與Expires屬性不同ExpiresAbsolute屬性指定緩存于瀏覽器中的頁面的確切到期日期和時間。在未到期之前,若用戶返回到該頁,該緩存中的頁面就顯示。如果未指定時間,該主頁在當(dāng)天午夜到期。如果未指定日期,則該主頁在腳本運行當(dāng)天的指定時間到期。如下示例指定頁面在1998年12月10日上午9:00分30秒到期。
<%Response.ExpiresAbsolute=#Dec12,19989:00:30#%>
二、方法
1、Clear
可以用Clear方法清除緩沖區(qū)中的所有HTML輸出。但Clear方法只清除響應(yīng)正文而不清除響應(yīng)標(biāo)題??梢杂迷摲椒ㄌ幚礤e誤情況。但是如果沒有將Response.Buffer設(shè)置為TRUE,則該方法將導(dǎo)致運行時錯誤。
2、End
End方法使Web服務(wù)器停止處理腳本并返回當(dāng)前結(jié)果。文件中剩余的內(nèi)容將不被處理。如果Response.Buffer已設(shè)置為TRUE,則調(diào)用Response.End將緩沖輸出。
3、Flush
Flush方法立即發(fā)送緩沖區(qū)中的輸出。如果沒有將Response.Buffer設(shè)置為TRUE,則該方法將導(dǎo)致運行時錯誤。
4、Redirect
Redirect方法使瀏覽器立即重定向到程序指定的URL。這也是一個我們經(jīng)常用到方法,這樣程序員就可以根據(jù)客戶的不同響應(yīng),為不同的客戶指定不同的頁面或根據(jù)不同的情況指定不同的頁面。一旦使用了Redirect方法任何在頁中顯式設(shè)置的響應(yīng)正文內(nèi)容都將被忽略。然而,此方法不向客戶端發(fā)送該頁設(shè)置的其他HTTP標(biāo)題,將產(chǎn)生一個將重定向URL作為鏈接包含的自動響應(yīng)正文。Redirect方法發(fā)送下列顯式標(biāo)題,其中URL是傳遞給該方法的值。如:
<%Response.redirect("")%>
5、Write
Write方法是我們平時最常用的方法之一,它是將指定的字符串寫到當(dāng)前的HTTP輸出。
三、集合
Response對象只有一個集合--Cookie
Cookies集合設(shè)置cookie的值。若指定的cookie不存在,則創(chuàng)建它。若存在,則設(shè)置新的值并且將舊值刪去。
語法
Response.Cookies(cookie)[(key)|.attribute]=value
這里的cookie是指定cookie的名稱。而如果指定了key,則該cookie就是一個字典。attribute指定cookie自身的有關(guān)信息。attribute參數(shù)可以是下列之一:
Domain若被指定,則cookie將被發(fā)送到對該域的請求中去。
Expires指定cookie的過期日期。為了在會話結(jié)束后將cookie存儲在客戶端磁盤上,必須設(shè)置該日期。若此項屬性的設(shè)置未超過當(dāng)前日期,則在任務(wù)結(jié)束后cookie將到期。
HasKeys指定cookie是否包含關(guān)鍵字。
Path若被指定,則cookie將只發(fā)送到對該路徑的請求中。如果未設(shè)置該屬性,則使用應(yīng)用程序的路徑。
程序保存為asp7.asp。
<%
Dimuser
Dimflag
Dimpwd
Dimsay
Response.buffer=true‘開啟緩沖頁面功能
Response.ContentType="text/HTML"
Response.Charset="gb2312"
user=Request.Form("username")
pwd=Request.Form("password")
say=Request.QueryString("say")
%>
<formmethod="POST"action="asp7.asp">
<p>用戶名:<inputtype="text"name="username"size="12"><br>
口令:<inputtype="password"name="password"size="12"><br>
<inputtype="submit"value="提交"name="B1"><inputtype="reset"value="取消"name="B2"></p></form>
<%
Ifsay=1then
Response.Write"歡迎書生大駕光臨!"
EndIf
Ifsay>1then
Response.Write"歡迎再次光臨書生的ASP網(wǎng)站!"
EndIf
Ifuser="Adm"andpwd="shusheng"Then
Response.Expires=1'設(shè)置該頁面在瀏覽器的緩沖中存儲1分鐘后過期。
flag=1
ElseIfuser="guest"andpwd="guest"Then
Response.Expires=0'使緩存的頁面立即過期。
Response.Clear'清空存儲在緩存中的頁面
flag=2
ElseIfuser="vip"andpwd="vip"Then
Response.Write"歡迎VIP光臨書生的ASP網(wǎng)站"
flag=3
Else
flag=0
Response.End'立即停止腳本處理,并將緩存中的頁面輸出
EndIf
Response.write"<p><ahref='asp7b.asp?flag="&flag&"'>動態(tài)網(wǎng)站設(shè)計十八般武藝--ASP篇(7)實踐練習(xí)</a></p>"
'將變量flag的值傳送給asp7b.asp
%>
<p>動態(tài)網(wǎng)站設(shè)計十八般武藝--ASP篇(7)實踐練習(xí)</p>
再將以下程序保存為asp7b.asp。
<%
Dimsaysay=Request.QueryString("flag")
Selectcasesay
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"
EndSelect
%>
將這兩個程序放在有執(zhí)行權(quán)限的WEB虛擬目錄下,并以http方式訪問asp7.asp。當(dāng)?shù)谝淮卧L問asp7.asp文件時,頁面上出現(xiàn)一個Form并提示輸入用戶名和口令,如果你輸入用戶名:Adm、口令:shusheng,則會出現(xiàn)如下頁面:
這是為什么呢?因為設(shè)置了頁面緩存,當(dāng)使用guest登陸時,判斷程序自動清空其之前所有存儲在緩存中的頁面,而僅將其后腳本程序執(zhí)行的結(jié)果顯示出來。
那為什么第一次登陸asp7.asp頁面時僅僅只顯示一個Form對話框呢?因為此時程序判斷到用戶既非Adm,也不是guest和vip,所以執(zhí)行Response.End,立即將存儲在緩存中的Form顯示出來,并停止其后的一切腳本處理,包括純HTML代碼的顯示。
無論你是用Adm還是guest或vip登陸該頁面你都可以看到一個超鏈,該超鏈指向文件asp7b.asp,當(dāng)點擊該超鏈時,asp7.asp將變量flag的值作為參數(shù)發(fā)送給asp7b.asp,而后者則根據(jù)該參數(shù)的值來做出判斷,并依據(jù)不同情況使用Response.Redirect再強行返回asp7.asp,并也將一個變量say的值作為參數(shù)發(fā)送給asp7.asp。如此一來,asp7.
溫馨提示
- 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)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 廚房衛(wèi)生工具管理規(guī)定(3篇)
- 《工程合同管理》課程教學(xué)大綱
- 船舶側(cè)向推進器課程設(shè)計
- 物聯(lián)網(wǎng)煙霧報警課程設(shè)計
- 生物數(shù)學(xué)的基礎(chǔ)課程設(shè)計
- 自動服務(wù)課程設(shè)計
- 2024幼兒園安全生產(chǎn)月活動工作總結(jié)范文(31篇)
- 藝術(shù)家作品課程設(shè)計
- 航空公司服務(wù)員工作總結(jié)
- 教育行業(yè)營銷策略分享
- 污水處理廠有毒有害氣體檢測記錄表
- 馬克思主義與社會科學(xué)方法論課后思考題答案全
- 針灸推拿習(xí)題庫+參考答案
- 手術(shù)區(qū)皮膚消毒及鋪單法課件
- 血液科侵襲性真菌的治療
- 淺析巖溶地區(qū)工程地質(zhì)勘察手段及應(yīng)用
- 2023-2024學(xué)年六年級上期末數(shù)學(xué)考試試卷附答案解析
- 羅伊模式個案護理
- 公益性崗位開發(fā)申請審批表
- 中國馬克思主義與當(dāng)代知到章節(jié)答案智慧樹2023年西安交通大學(xué)
- 組織協(xié)同運用平衡計分卡創(chuàng)造企業(yè)合力
評論
0/150
提交評論