




版權(quán)說(shuō)明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
授課教師:孫文軍E-MAIL:動(dòng)態(tài)網(wǎng)頁(yè)(ACTIVESERVERPAGES)本課程的地位ASP是計(jì)算機(jī)專業(yè)非常重要的一門專業(yè)課,它的前期課程主要有靜態(tài)網(wǎng)頁(yè)設(shè)計(jì)、VBScript腳本語(yǔ)言、JavaScript腳本語(yǔ)言、Potoshop、Flash等。學(xué)好這門課,可以加深對(duì)程序設(shè)計(jì)和數(shù)據(jù)庫(kù)應(yīng)用的理解。本課程的教學(xué)目標(biāo)1溫習(xí)ASP的框架語(yǔ)言——HTML,能熟練編寫一些靜態(tài)頁(yè)面。至少掌握一門腳本語(yǔ)言,并會(huì)運(yùn)用該腳本語(yǔ)言對(duì)ASP頁(yè)面進(jìn)行必要的控制和一些動(dòng)態(tài)效果。3熟練運(yùn)用ASP的一些基本部件和ACTIVEX控件進(jìn)行文件處理和數(shù)據(jù)庫(kù)開(kāi)發(fā)。通過(guò)學(xué)習(xí)(上機(jī)練習(xí))做出貼近現(xiàn)實(shí)的網(wǎng)站,已達(dá)到培養(yǎng)學(xué)生的實(shí)際動(dòng)手能力和團(tuán)隊(duì)協(xié)作精神。第一講
緒論
一、靜態(tài)與動(dòng)態(tài)的區(qū)別所謂“靜態(tài)”指的就是網(wǎng)站的網(wǎng)頁(yè)內(nèi)容“固定不變”,當(dāng)用戶瀏覽器通過(guò)互聯(lián)網(wǎng)的HTTP(HypertextTransportProtocol)協(xié)議向WEB服務(wù)器請(qǐng)求提供網(wǎng)頁(yè)內(nèi)容時(shí),服務(wù)器僅僅是將原已設(shè)計(jì)好的靜態(tài)HTML文檔傳送給用戶瀏覽器。其頁(yè)面的內(nèi)容使用的僅僅是標(biāo)準(zhǔn)的HTML代碼,最多再加上流行的GIF89A格式的動(dòng)態(tài)圖片,比如產(chǎn)生幾只小狗小貓跑來(lái)跑去的動(dòng)畫效果。若網(wǎng)站維護(hù)者要更新網(wǎng)頁(yè)的內(nèi)容,就必須手動(dòng)地來(lái)更新其所有的HTML文檔。
“靜態(tài)”網(wǎng)站的致命弱點(diǎn)就是不易維護(hù),為了不斷更新網(wǎng)頁(yè)內(nèi)容,你必須不斷地重復(fù)制作HTML文檔,隨著網(wǎng)站內(nèi)容和信息量的日益擴(kuò)增,你就會(huì)感到工作量大得出乎想象。所謂“動(dòng)態(tài)”,并不是指那幾個(gè)放在網(wǎng)頁(yè)上的GIF動(dòng)態(tài)圖片,在這里筆者為動(dòng)態(tài)頁(yè)面的概念制定了以下幾條規(guī)則:
1、“交互性”即網(wǎng)頁(yè)會(huì)根據(jù)用戶的要求和選擇而動(dòng)態(tài)改變和響應(yīng),將瀏覽器作為客戶端界面,這將是今后WEB發(fā)展的大事所趨。
2、“自動(dòng)更新”即無(wú)須手動(dòng)地更新HTML文檔,便會(huì)自動(dòng)生成新的頁(yè)面,可以大大節(jié)省工作量。
3、“因時(shí)因人而變”,即當(dāng)不同的時(shí)間、不同的人訪問(wèn)同一網(wǎng)址時(shí)會(huì)產(chǎn)生不同的頁(yè)面。
二、幾種常用的“動(dòng)態(tài)”網(wǎng)站設(shè)計(jì)法:1、CGI(CommonGatewayInterface)通用網(wǎng)關(guān)接口的傳統(tǒng)方式,當(dāng)用戶在瀏覽器端填好表單(form)要求輸入的資料,提出HTTP請(qǐng)求后,WEB服務(wù)器端將執(zhí)行一個(gè)表單所設(shè)定的可執(zhí)行的CGI應(yīng)用程序,CGI程序分析表單(form)中所輸入的資料,存取WEB數(shù)據(jù)庫(kù),將查詢執(zhí)行的結(jié)果以HTML的格式返回給瀏覽器。使用CGI方式存取WEB數(shù)據(jù)庫(kù),有很多的缺點(diǎn),譬如不易開(kāi)發(fā)、變更修改成本高、功能有限、不易偵錯(cuò)、執(zhí)行速度慢等,而且由于并非整合于HTML文檔之中,因此必須使用與HTML完全不同的設(shè)計(jì)過(guò)程來(lái)設(shè)計(jì)一個(gè)可執(zhí)行的應(yīng)用程序。
2、IDC(InternetDatabaseConnector)互聯(lián)網(wǎng)數(shù)據(jù)庫(kù)連接頭是WindowsNTServer內(nèi)含InternetInformationServer3、ActiveXDataObject(ADO)是WEB數(shù)據(jù)庫(kù)應(yīng)用的最佳選擇。
ActiveXDataObject(簡(jiǎn)稱ADO)究竟是什么呢?ActiveXDataObject的技術(shù),讓您可以與ActiveServerPages(簡(jiǎn)稱ASP)結(jié)合以建立提供數(shù)據(jù)資訊的網(wǎng)頁(yè)內(nèi)容,只需在網(wǎng)頁(yè)面中執(zhí)行StructuredQueryLanguage(結(jié)構(gòu)化查詢語(yǔ)言,簡(jiǎn)稱SQL)指令,讓用戶在瀏覽器界面中輸入、更新、和刪除WEB服務(wù)器上的數(shù)據(jù)資料。當(dāng)用戶端的瀏覽器填好表單所要求輸入的資料并按下“Submit”按鈕后,經(jīng)過(guò)互聯(lián)網(wǎng)、內(nèi)聯(lián)網(wǎng)傳送HTTP請(qǐng)求到WEB服務(wù)器,該請(qǐng)求在WEB服務(wù)器執(zhí)行一個(gè)表單所指定的ActiveServerPages程序(后綴名為.ASP的文檔)。一個(gè).ASP文檔是一個(gè)純文字檔,包括:HTML標(biāo)記(tags)、VBScript或JScript語(yǔ)言的程序代碼、ASP語(yǔ)法、和結(jié)構(gòu)化查詢語(yǔ)言SQL指令。IIS3.0/4.0WEB服務(wù)器執(zhí)行.ASP文檔,通過(guò)ODBC驅(qū)動(dòng)程式,連接到支持ODBC的數(shù)據(jù)庫(kù)上,執(zhí)行ASP文檔所指定的SQL指令,最后將執(zhí)行的結(jié)果以HTML的格式傳送給用戶瀏覽器。ADO具有容易使用、開(kāi)發(fā)執(zhí)行快速、消耗系統(tǒng)資源較少,和占用磁盤空間小等優(yōu)點(diǎn)。
以上就是目前設(shè)計(jì)商業(yè)網(wǎng)站常用的“動(dòng)態(tài)”技術(shù),從長(zhǎng)遠(yuǎn)來(lái)看ADO和ASP的結(jié)合也勢(shì)必成為今后一段時(shí)間內(nèi)“動(dòng)態(tài)”WEB的核心技術(shù)。第二講ASP簡(jiǎn)介
上一章簡(jiǎn)要介紹了建立動(dòng)態(tài)網(wǎng)站的一些方法和制作工具,本章將以如何建立基于IIS的ASP動(dòng)態(tài)網(wǎng)站為中心向大家一步一步地揭示動(dòng)態(tài)商業(yè)網(wǎng)站設(shè)計(jì)的真正奧秘。MicrosoftActiveServerPages即我們所稱的ASP,其實(shí)是一套微軟開(kāi)發(fā)的服務(wù)器端腳本環(huán)境,ASP內(nèi)含于IIS3.0和4.0之中,通過(guò)ASP我們可以結(jié)合HTML網(wǎng)頁(yè)、ASP指令和ActiveX元件建立動(dòng)態(tài)、交互且高效的WEB服務(wù)器應(yīng)用程序。有了ASP你就不必?fù)?dān)心客戶的瀏覽器是否能運(yùn)行你所編寫的代碼,因?yàn)樗械某绦?.與瀏覽器無(wú)關(guān)(BrowserIndependence),用戶端只要使用可執(zhí)行HTML碼的瀏覽器,即可瀏覽ActiveServerPages所設(shè)計(jì)的網(wǎng)頁(yè)內(nèi)容。ActiveServerPages所使用的腳本語(yǔ)言(VBScript、Jscript)均在WEB服務(wù)器端執(zhí)行,用戶端的瀏覽器不需要能夠執(zhí)行這些腳本語(yǔ)言。
5.ActiveServerPages能與任何ActiveXscripting語(yǔ)言相容。除了可使用VBScript或JScript語(yǔ)言來(lái)設(shè)計(jì)外,還通過(guò)plug-in的方式,使用由第三方所提供的其他腳本語(yǔ)言,譬如REXX、Perl、Tcl等。腳本引擎是處理腳本程序的COM(ComponentObjectModel)物件。
6.ActiveServerPages的源程序,不會(huì)被傳到客戶瀏覽器,因而可以避免所寫的源程序被他人剽竊,也提高了程序的安全性。
7.可使用服務(wù)器端的腳本來(lái)產(chǎn)生客戶端的腳本。
8.物件導(dǎo)向(Object-oriented)。
9.ActiveXServerComponents(ActiveX服務(wù)器元件)具有無(wú)限可擴(kuò)充性??梢允褂肰isualBasic、Java、VisualC++、COBOL等編程語(yǔ)言來(lái)編寫你所需要的ActiveXServerComponent。
運(yùn)行ASP所需的環(huán)境:
·MicrosoftInternetInformationServerversion3.0/4.0onWindowsNTServer
·MicrosoftPeerWebServicesVersion3.0onWindowsNTWorkstation
·MicrosoftPersonalWebServeronWindows95/98
與一般的程序不同,.asp程序無(wú)須編譯,ASP程序的控制部份,是使用VBScript、JScript等腳本語(yǔ)言來(lái)設(shè)計(jì)的,當(dāng)執(zhí)行ASP程序時(shí),腳本程序?qū)⒁徽酌畎l(fā)送給腳本解釋器(即腳本引擎),由腳本解釋器進(jìn)行翻譯并將其轉(zhuǎn)換成服務(wù)器所能執(zhí)行的命令。當(dāng)然,同其他編程語(yǔ)言一樣,ASP程序的編寫也遵循一定的規(guī)則,如果你想使用你所喜愛(ài)的腳本語(yǔ)言編寫ASP程序,那么你的服務(wù)器上必須要有能解釋這種腳本語(yǔ)言的腳本解釋器。當(dāng)你安裝ASP時(shí),系統(tǒng)提供了兩種腳本語(yǔ)言:VBsrcipt和JScript,而VBscript則被作為系統(tǒng)默認(rèn)的腳本語(yǔ)言。ASP本身并不是一種腳本語(yǔ)言,它只是提供了一種使鑲嵌在HTML頁(yè)面中的腳本程序得以運(yùn)行的環(huán)境。但是,要學(xué)好ASP又必須掌握它的語(yǔ)法和規(guī)則?,F(xiàn)在就讓我們開(kāi)始一步一步地認(rèn)識(shí)并學(xué)習(xí)ActiveServerPages。
如前所述ASP所提供的腳本運(yùn)行環(huán)境可支持多種腳本語(yǔ)言,譬如:JScript、REXX、PERL等等,這無(wú)疑給ASP程序設(shè)計(jì)者提供了廣泛的發(fā)揮余地。ASP的出現(xiàn)使得廣大WEB設(shè)計(jì)者不必在為客戶瀏覽器是否支持而擔(dān)心,實(shí)際上就算你在同一個(gè).asp文件中使用不同的腳本語(yǔ)言,你都無(wú)須為此擔(dān)憂,因?yàn)樗械囊磺卸紝⒃诜?wù)器端進(jìn)行,客戶瀏覽器得到的只是一個(gè)程序執(zhí)行的結(jié)果,而你也只需在.asp中聲明使用不同的腳本語(yǔ)言即可。下面是一個(gè)典型的在同一.asp文件中使用兩種腳本語(yǔ)言的例子:
<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>
“<%%>”其實(shí)是標(biāo)準(zhǔn)的ASP定界符,而“<SCRIPT></SCRIPT>”之間的就是腳本語(yǔ)言。ASP不同于腳本語(yǔ)言,它有自己特定的語(yǔ)法,所有的ASP命令都必須包含在<%和%>之內(nèi),如:<%test="English"%>,ASP通過(guò)包含在<%和%>中的表達(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%>
哈嘍!今晚你有沒(méi)有去IRC聊天!
<%EndIf%>
</body>
</html>第三講ASP基礎(chǔ)本篇將繼續(xù)介紹一些用ASP編寫的WEB動(dòng)態(tài)功能。由于WEB瀏覽器標(biāo)準(zhǔn)的不一致從而使得如何能夠讓自己制作的網(wǎng)站去適應(yīng)各種不同的瀏覽器成為了廣大網(wǎng)站設(shè)計(jì)者最為頭疼的事,在如今的形勢(shì)之下,我們不肯也不可能去拋棄Netscape或IE中的任何一種客戶群,但我們有時(shí)候又不得不去考慮客戶端瀏覽器的實(shí)際瀏覽效果,過(guò)去我們常用JavaScript編寫一段程序來(lái)辨別客戶端使用的不同的瀏覽器,那么今天就讓我們來(lái)看看如何使用ASP更為便捷且精確地達(dá)到這一目的。以下代碼保存為browser.asp。<%@LANGUAGE=VBScript%>
<HTML>
<HEAD>
<TITLE>用ASP提供的瀏覽器性能組件來(lái)辨別客戶瀏覽器</TITLE>
</HEAD>
<BODYBGCOLOR="White"topmargin="10"leftmargin="10">
<fontsize="4"face="Arial,Helvetica"><b>用ASP提供的瀏覽器性能組件來(lái)辨<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>
在本例中我們用到了一個(gè)ASP提供的ActiveX組件--"BrowserCapabilities"。ActiveX組件作為基于Web的應(yīng)用程序部分在Web服務(wù)器上運(yùn)行,組件提供了應(yīng)用程序的主要功能(如訪問(wèn)、修改數(shù)據(jù)庫(kù)等),這樣WEB設(shè)計(jì)者們就不必創(chuàng)建或重新創(chuàng)建執(zhí)行這些任務(wù)的代碼,從而提高了工作的效率,有關(guān)ActiveX組件將在今后詳細(xì)討論。在你的瀏覽器中刷新browser.asp,程序?qū)⒆詣?dòng)辨別瀏覽器的屬性并動(dòng)態(tài)顯示不同的信息。不難發(fā)現(xiàn)在整個(gè)browser.asp文件中幾乎沒(méi)有用到任何復(fù)雜的編程,就輕而易舉的達(dá)到了動(dòng)態(tài)鑒別客戶瀏覽器并動(dòng)態(tài)產(chǎn)生響應(yīng)事件的效果。事實(shí)上,這個(gè)程序的關(guān)鍵就在于前文提到的ActiveX組件--"BrowserCapabilities",它的作用類似于一個(gè)Function,只需簡(jiǎn)單地在程序中調(diào)用該組件即能達(dá)到你所希望的效果。
第四講ASP腳本基礎(chǔ)1.變量、進(jìn)程的概念所謂變量是計(jì)算機(jī)內(nèi)存中已命名的存儲(chǔ)位置,其中包含了數(shù)字或字符串等數(shù)據(jù),它使用戶便于理解腳本操作的名稱,為用戶提供了一種存儲(chǔ)、檢索和操作數(shù)據(jù)的途徑。程序是由一個(gè)或多個(gè)進(jìn)程組成的,在VBScript中,進(jìn)程就是“指令塊”,通常意義上的進(jìn)程,如Sub,只是為了簡(jiǎn)單的數(shù)據(jù)處理。
在VBScript中,嚴(yán)格的來(lái)講變量是不用聲明的,
如:<%Mystring="Thisismystring"%>
然而,即使在使用變量前不需要去聲明變量,也應(yīng)養(yǎng)成在編程時(shí)聲明變量的良好習(xí)慣,因?yàn)檫@樣有助于防止錯(cuò)誤發(fā)生。聲明一個(gè)變量意味著告訴腳本引擎,有一個(gè)特定名稱的變量,這樣就可以在腳本中引用該變量。在VBScript中聲明一個(gè)變量可以使用“Dim”語(yǔ)句,如下:
<scriptlanguage="VBScript">
<!--
OptionExplicit'要求在腳本中聲明所有的變量
DimMystring
Mystring="Thisismystring"
-->
</script>
變量的作用域即生命期,決定哪些腳本命令可訪問(wèn)變量。在過(guò)程內(nèi)部聲明的變量具有局部作用域。每執(zhí)行一次過(guò)程,變量就被創(chuàng)建然后消亡。而過(guò)程外部的任何命令都不能訪問(wèn)它。在過(guò)程外部聲明的變量具有全局作用域,其值能被ASP頁(yè)上的任何腳本命令訪問(wèn)和修改。聲明變量時(shí),局部變量和全局變量可以有相同的名稱。而改變其中一個(gè)的值并不會(huì)改變另一個(gè)的值。如果沒(méi)有聲明變量,則可能不小心會(huì)改變一個(gè)全局變量的值。例如,以下腳本命令返回值1,雖然有兩個(gè)名為Y變量:
<%
DimYY=1CallSetLocalVariableResponse.WriteY
SubSetLocalVariable
DimY
Y=2EndSub%>
由于變量沒(méi)有顯式聲明,以下的腳本命令將返回2。當(dāng)過(guò)程調(diào)用將Y設(shè)置為2時(shí),腳本引擎認(rèn)為該過(guò)程是要修改全局變量:
<%
Y=1CallSetLocalVariableResponse.WriteY
SubSetLocalVariable
Y=2
EndSub%>
然而,全局變量?jī)H在單個(gè)ASP頁(yè)中可用,要使它在單個(gè)ASP頁(yè)之外可用,就必須為變量賦予會(huì)話或應(yīng)用程序作用域。會(huì)話作用域變量對(duì)一個(gè)用戶所請(qǐng)求的ASP應(yīng)用程序中的所有頁(yè)都是可用的。應(yīng)用程序作用域變量也如此。對(duì)單個(gè)用戶來(lái)說(shuō),會(huì)話變量是存儲(chǔ)信息的最佳途徑,例如,用戶首選項(xiàng)、用戶名或用戶的標(biāo)識(shí)。對(duì)于一個(gè)特殊應(yīng)用程序的所有用戶,應(yīng)用程序作用域是存儲(chǔ)信息的最佳途徑,例如,應(yīng)用程序特定的問(wèn)候語(yǔ)或應(yīng)用程序所需的初始值。ASP提供兩個(gè)內(nèi)建對(duì)象來(lái)讓您存儲(chǔ)變量:Session對(duì)象和Application對(duì)象,這將在今后的ASP內(nèi)建對(duì)象中著重討論。
常量是用來(lái)代替一個(gè)數(shù)或字符串的名稱,它在整個(gè)腳本中保持不變。您可以使用Const語(yǔ)句在VBScript中創(chuàng)建用戶自定義常數(shù)。使用Const語(yǔ)句可以創(chuàng)建名稱具有一定含義的字符串型或數(shù)值型常數(shù),并給它們賦原義值。例如:。
如:<%Constmystring="這是一個(gè)常量"%>
<%Constmyage=100%>
請(qǐng)注意字符串文字包含在兩個(gè)引號(hào)("")之間。這是區(qū)分字符串型常數(shù)和數(shù)值型常數(shù)的最明顯的方法。日期文字和時(shí)間文字包含在兩個(gè)井號(hào)(#)之間。例如:
<%ConstCutoffDate=#6-1-97#%>
過(guò)程是一組能執(zhí)行指定任務(wù)且具有返回值的腳本命令。您可以定義自己的過(guò)程,然后在腳本中反復(fù)調(diào)用它們。您可以將過(guò)程定義放在調(diào)用過(guò)程的.asp文件中,也可以將通用過(guò)程放在一個(gè)共享的.asp文件中,然后用SSI#include指令將其包含進(jìn)其他調(diào)用其過(guò)程的.asp文件中。您還可選擇另一種方法,即把這些功能打包在ActiveX組件中。過(guò)程定義可出現(xiàn)在<SCRIPT>和</SCRIPT>標(biāo)記內(nèi)部且必須遵循聲明腳本語(yǔ)言的規(guī)則。如果過(guò)程所用的語(yǔ)言與主腳本語(yǔ)言不同,則要使用<SCRIPT>元素。主腳本語(yǔ)言中的過(guò)程用腳本分界符(<%和%>)分隔。用HTML<SCRIPT>標(biāo)記時(shí),必須使用兩個(gè)屬性來(lái)保證服務(wù)器端能夠處理腳本。使用<SCRIPT>標(biāo)記的語(yǔ)法如下:
<SCRIPTRUNAT=SERVERLANGUAGE=JSCRIPT>
proceduredefinition
</SCRIPT>
這里的RUNAT=SERVER屬性通知Web服務(wù)器在服務(wù)器上處理腳本。若不設(shè)置該屬性,腳本將由客戶端瀏覽器處理。LANGUAGE屬性決定此腳本塊所用的腳本語(yǔ)言。您可以指定任何一種具有腳本引擎的語(yǔ)言。請(qǐng)使用VBSCRIPT指定VBScript;用JSCRIPT指定JScript。若不設(shè)置LANGUAGE屬性,將用主腳本語(yǔ)言解釋此腳本塊。
在VBScript中,過(guò)程被分為兩類:Sub過(guò)程和Function過(guò)程。Sub過(guò)程是包含在Sub和EndSub語(yǔ)句之間的一組VBScript語(yǔ)句,執(zhí)行操作但不返回值。Sub過(guò)程可以使用參數(shù)(由調(diào)用過(guò)程傳遞的常數(shù)、變量或表達(dá)式)。如果Sub過(guò)程無(wú)任何參數(shù),則Sub語(yǔ)句必須包含空括號(hào)()。
Function過(guò)程是包含在Function和EndFunction語(yǔ)句之間的一組VBScript語(yǔ)句。Function過(guò)程與Sub過(guò)程類似,但是Function過(guò)程可以返回值。Function過(guò)程可以使用參數(shù)(由調(diào)用過(guò)程傳遞的常數(shù)、變量或表達(dá)式)。如果Function過(guò)程無(wú)任何參數(shù),則Function語(yǔ)句必須包含空括號(hào)()。Function過(guò)程通過(guò)函數(shù)名返回一個(gè)值,這個(gè)值是在過(guò)程的語(yǔ)句中賦給函數(shù)名的。Function返回值的數(shù)據(jù)類型總是Variant。在下面的示例中Sub過(guò)程使用兩個(gè)固有的(或內(nèi)置的)VBScript函數(shù),即MsgBox和InputBox,來(lái)提示用戶輸入信息。然后顯示根據(jù)這些信息計(jì)算的結(jié)果。計(jì)算由使用VBScript創(chuàng)建的Function過(guò)程完成,Celsius函數(shù)將華氏度換算為攝氏度。Sub過(guò)程ConvertTemp調(diào)用此函數(shù)時(shí),包含參數(shù)值的變量被傳遞給函數(shù)。換算結(jié)果返回到調(diào)用過(guò)程并顯示在消息框中。
SubConvertTemp()
temp=InputBox("請(qǐng)輸入華氏溫度。",1)
MsgBox"溫度為"&Celsius(temp)&"攝氏度。"
EndSub
FunctionCelsius(fDegrees)
Celsius=(fDegrees-32)*5/9
EndFunction
給過(guò)程傳遞數(shù)據(jù)的途徑是使用參數(shù)。參數(shù)被作為要傳遞給過(guò)程的數(shù)據(jù)的占位符。參數(shù)名可以是任何有效的變量名。使用Sub語(yǔ)句或Function語(yǔ)句創(chuàng)建過(guò)程時(shí),過(guò)程名之后必須緊跟括號(hào)。括號(hào)中包含所有參數(shù),參數(shù)間用逗號(hào)分隔。例如,在下面的示例中,fDegrees是傳遞給Celsius函數(shù)的值的占位符:
FunctionCelsius(fDegrees)
Celsius=(fDegrees-32)*5/9
EndFunction
要從過(guò)程獲取數(shù)據(jù),必須使用Function過(guò)程。請(qǐng)記住,F(xiàn)unction過(guò)程可以返回值;Sub過(guò)程不返回值。
以上給大家簡(jiǎn)要介紹了VBScript。由于ASP本身并不是一種編程語(yǔ)言,因此在大家編寫ASP應(yīng)用程序的過(guò)程中,必須借助腳本語(yǔ)言來(lái)實(shí)現(xiàn)許多特殊的功能,所以靈活熟練地掌握腳本語(yǔ)言對(duì)一個(gè)使用ASP編寫WEB應(yīng)用程序的程序員來(lái)說(shuō)是至關(guān)重要的。無(wú)論是一個(gè)有豐富編程經(jīng)驗(yàn)的高手還是一個(gè)初學(xué)者,只要現(xiàn)在希望通過(guò)ASP編寫WEB應(yīng)用程序,必須掌握至少一門腳本語(yǔ)言(如VBScript)。第五講腳本變量、函數(shù)、過(guò)程和條件語(yǔ)句函數(shù)和過(guò)程一樣都是命名了的代碼塊,但它們卻有很大的區(qū)別,過(guò)程完成程序任務(wù),函數(shù)則返回值。我們可以這樣理解,過(guò)程象一個(gè)完整的句子,而函數(shù)則象一個(gè)單詞。舉個(gè)例子,當(dāng)你想獲取某個(gè)數(shù)的平方根,你只要將該數(shù)傳給VBScript的Sqr()函數(shù),此函數(shù)會(huì)立即返回該數(shù)的平方根。如:
A=sqr(9)
則A=3。如果不熟悉VBScrip,就不會(huì)知道VBScrip本身提供了一個(gè)用來(lái)取得日期之間的差或和的函數(shù)DateSerial,它的語(yǔ)法如下:
DateSerial(year,month,day)
如果你要指定一個(gè)日期,例如:1998年11月10日,那么DateSerial函數(shù)中每個(gè)參數(shù)的取值范圍都應(yīng)該是可接受的,即日的取值應(yīng)在1和31之間,月的取值應(yīng)在1和12之間。但是,也可以使用表示某日之前或之后的年、月、日數(shù)目的數(shù)值表達(dá)式為每個(gè)參數(shù)指定相對(duì)日期。以下樣例中使用了數(shù)值表達(dá)式代替絕對(duì)日期。在這里,DateSerial函數(shù)返回1998年11月10日之前二十年(1990-20)零兩個(gè)月(11-2)又一天(10-1)的日期:即1978年9月9日。程序如下:
Datep=DateSerial(1998-20,11-2,10-1)
對(duì)于year參數(shù),若取值范圍是從0到99,則被解釋為1900到1999年。對(duì)于此范圍之外的year參數(shù),則使用四位數(shù)字表示年份(例如1800年)。當(dāng)任何一個(gè)參數(shù)的取值超出可接受的范圍時(shí),則會(huì)適當(dāng)?shù)剡M(jìn)位到下一個(gè)較大的時(shí)間單位。例如,如果指定了35天,則這個(gè)天數(shù)將被解釋成一個(gè)月加上多出來(lái)的日數(shù),多出來(lái)的日數(shù)取決于其年份和月份。但是如果參數(shù)值超出-32,768到32,767的范圍,或者由三個(gè)參數(shù)指定(無(wú)論是直接還是通過(guò)表達(dá)式指定)的日期超出了可以接受的日期范圍,就會(huì)發(fā)生錯(cuò)誤。VBScript的基本語(yǔ)法。
在程序中控制程序流程的語(yǔ)句主要可以分為條件語(yǔ)句和循環(huán)語(yǔ)句,在VBScript中可使用以下條件語(yǔ)句:If...Then...Else語(yǔ)句
SelectCase語(yǔ)句
If...Then...Else語(yǔ)句用于計(jì)算條件是否為True或False,并且根據(jù)計(jì)算結(jié)果指定要運(yùn)行的語(yǔ)句。通常,條件是使用比較運(yùn)算符對(duì)值或變量進(jìn)行比較的表達(dá)式,If...Then...Else語(yǔ)句可以按照需要進(jìn)行嵌套。
創(chuàng)建兩個(gè)范例文件: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)生一個(gè)文本輸入框,要求用戶輸入姓、名,如下圖:
asp2.asp則是用IF語(yǔ)句判斷用戶輸入的姓名是否為“GeorgeWashington”,并做出相應(yīng)的反饋。在此使用了一個(gè)ASP的內(nèi)建對(duì)象request,通過(guò)使用request對(duì)象可以訪問(wèn)任何用HTTP請(qǐng)求傳遞的信息,包括從HTML表格中用POST方法或GET方法傳遞的參數(shù)、cookie和用戶認(rèn)證。而QueryString集合檢索HTTP查詢字符串中變量的值,HTTP查詢字符串由問(wèn)號(hào)(?)后的值指定。如:
生成值為“Firstname=George&Lastname=Washington”的變量名字符串。關(guān)于ASP對(duì)象將在以后的講述。
If...Then...Else語(yǔ)句的一種變形允許您從多個(gè)條件中選擇,即添加ElseIf子句以擴(kuò)充If...Then...Else語(yǔ)句的功能,使可以控制基于多種可能的程序流程。
將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%>
可以添加任意多個(gè)ElseIf子句以提供多種選擇。但使用多個(gè)ElseIf子句經(jīng)常會(huì)使程序變得很累贅。在多個(gè)條件中進(jìn)行選擇的更好方法是使用SelectCase語(yǔ)句。
SelectCase結(jié)構(gòu)提供了If...Then...ElseIf結(jié)構(gòu)的一個(gè)變通形式,可以從多個(gè)語(yǔ)句塊中選擇執(zhí)行其中的一個(gè)。SelectCase語(yǔ)句提供的功能與If...Then...Else語(yǔ)句類似,但是可以使代碼更加簡(jiǎn)練易讀。SelectCase結(jié)構(gòu)在其開(kāi)始處使用一個(gè)只計(jì)算一次的簡(jiǎn)單測(cè)試表達(dá)式。表達(dá)式的結(jié)果將與結(jié)構(gòu)中每個(gè)Case的值比較。如果匹配,則執(zhí)行與該Case關(guān)聯(lián)的語(yǔ)句塊,可以用SelectCase語(yǔ)句來(lái)寫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)只計(jì)算開(kāi)始處的一個(gè)表達(dá)式,并且只計(jì)算一次,而If...Then...ElseIf結(jié)構(gòu)計(jì)算每個(gè)ElseIf語(yǔ)句的表達(dá)式,這些表達(dá)式可以各不相同。因此僅當(dāng)每個(gè)ElseIf語(yǔ)句計(jì)算的表達(dá)式都相同時(shí),才可以使用SelectCase結(jié)構(gòu)代替If...Then...ElseIf結(jié)構(gòu)。SelectCase語(yǔ)句也是可以是嵌套的,每一層嵌套的SelectCase語(yǔ)句必須有與之匹配的EndSelect語(yǔ)句。
第六講ASP腳本循環(huán)語(yǔ)句循環(huán)語(yǔ)句的作用就是重復(fù)執(zhí)行程序代碼,循環(huán)可分為三類:一類在條件變?yōu)椤凹佟敝爸貜?fù)執(zhí)行語(yǔ)句,一類在條件變?yōu)椤罢妗敝爸貜?fù)執(zhí)行語(yǔ)句,另一類按照指定的次數(shù)重復(fù)執(zhí)行語(yǔ)句。在VBScript中可使用下列循環(huán)語(yǔ)句:
Do...Loop:當(dāng)(或直到)條件為“真”時(shí)循環(huán)。
While...Wend:當(dāng)條件為“真”時(shí)循環(huán)。
For...Next:指定循環(huán)次數(shù),使用計(jì)數(shù)器重復(fù)運(yùn)行語(yǔ)句。
ForEach...Next:對(duì)于集合中的每項(xiàng)或數(shù)組中的每個(gè)元素,重復(fù)執(zhí)行一組語(yǔ)句。Do...Loop,它是可以多次(次數(shù)不定)運(yùn)行語(yǔ)句塊。當(dāng)條件為“真”時(shí)或條件變?yōu)椤罢妗敝?,重?fù)執(zhí)行語(yǔ)句塊。例:<html><head>
<title>DoLoop.asp</title><bodybgcolor="#FFFFFF"></head><p></p><p>請(qǐng)將今年到本月為止的每個(gè)月份的銷售結(jié)算記錄填寫在本頁(yè)之上。<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程序運(yùn)用循環(huán)語(yǔ)句制作了一張銷售結(jié)算記錄表,將以上代碼剪貼至記事簿保存為DoLoop.asp,并在瀏覽器中以HTTP方式進(jìn)行瀏覽,根據(jù)當(dāng)前的月份的不同,將看到如下圖的結(jié)果。
此段程序,首先建立一個(gè)計(jì)數(shù)器“count”并將其值設(shè)為1,然后用函數(shù)month()和now()得到當(dāng)前的月份,最后建立循環(huán),當(dāng)count的值小于當(dāng)前月份的值加1的時(shí)候,即顯示月份值及一條橫線并將count的值加1,循環(huán)語(yǔ)句重復(fù)執(zhí)行直到以上條件為假時(shí)退出循環(huán)。其中如果count大于13則用exitdo立即退出循環(huán)。
DoLoop語(yǔ)句還可以使用以下語(yǔ)法:
Do
[statements][ExitDo]
[statements]Loop[{While|Until}condition]
由于While...Wend缺少靈活性,所以建議最好使用Do...Loop語(yǔ)句。
For...Next語(yǔ)句用于將語(yǔ)句塊運(yùn)行指定的次數(shù),在循環(huán)中使用計(jì)數(shù)器變量,該變量的值隨每一次循環(huán)增加或減少。
下面的示例將過(guò)程MyProc重復(fù)執(zhí)行50次。For語(yǔ)句指定計(jì)數(shù)器變量x及其起始值與終止值。Next語(yǔ)句使計(jì)數(shù)器變量每次加1。SubDoMyProc50Times()
Dimx
Forx=1To50
MyProc
Next
EndSub
關(guān)鍵字Step用于指定計(jì)數(shù)器變量每次增加或減少的值。在下面的示例中,計(jì)數(shù)器變量j每次加2。循環(huán)結(jié)束后,total的值為2、4、6、8和10的總和。SubTwosTotal()
Dimj,total
Forj=2To10Step2
total=total+j
Next
MsgBox"總和為"&total&"。"
EndSub
要使計(jì)數(shù)器變量遞減,可將Step設(shè)為負(fù)值。此時(shí)計(jì)數(shù)器變量的終止值必須小于起始值。在下面的示例中,計(jì)數(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語(yǔ)句用于在計(jì)數(shù)器達(dá)到其終止值之前退出For...Next語(yǔ)句。因?yàn)橥ǔV皇窃谀承┨厥馇闆r下(例如在發(fā)生錯(cuò)誤時(shí))要退出循環(huán),所以可以在If...Then...Else語(yǔ)句的True語(yǔ)句塊中使用ExitFor語(yǔ)句。如果條件為False,循環(huán)將照常運(yùn)行。
ForEach...Next語(yǔ)句
ForEach...Next循環(huán)與For...Next循環(huán)類似。ForEach...Next不是將語(yǔ)句運(yùn)行指定的次數(shù),而是對(duì)于數(shù)組中的每個(gè)元素或?qū)ο蠹现械拿恳豁?xiàng)重復(fù)一組語(yǔ)句。這在不知道集合中元素的數(shù)目時(shí)非常有用。它的語(yǔ)法如下:ForEachelementIngroup
[statements]
[ExitFor]
[statements]Next[element]
如果group中有至少一個(gè)元素,就會(huì)進(jìn)入ForEach塊執(zhí)行。一旦進(jìn)入循環(huán),便首先對(duì)group中第一個(gè)元素執(zhí)行循環(huán)中的所有語(yǔ)句。只要group中還有其他的元素,就會(huì)對(duì)每個(gè)元素執(zhí)行循環(huán)中的語(yǔ)句。當(dāng)group中沒(méi)有其他元素時(shí)退出循環(huán),然后從Next語(yǔ)句之后的語(yǔ)句繼續(xù)執(zhí)行。
MicrosoftScriptDebugger提供以下的除錯(cuò)功能:
1、設(shè)定中斷點(diǎn)
2、逐步追蹤腳本程序。
3、設(shè)定書簽。
4、檢視呼叫堆疊。
5、檢視和更改變數(shù)值。
6、執(zhí)行腳本指令。
第七講ASP內(nèi)建對(duì)象Request1.ASP的六個(gè)內(nèi)建對(duì)象和各種組件的特性和方法什么是對(duì)象?它可不是指你戀愛(ài)的男伴或女伴。在面向?qū)ο缶幊讨?,?duì)象就是指由當(dāng)作完整實(shí)體的操作和數(shù)據(jù)組成的變量。對(duì)象是基于特定模型的,在對(duì)象中客戶使用對(duì)象的服務(wù)通過(guò)由一組方法或相關(guān)函數(shù)的接口訪問(wèn)對(duì)象的數(shù)據(jù),然后客戶端可以調(diào)用這些方法執(zhí)行某中操作。ActiveX組件是建立Web應(yīng)用程序的關(guān)鍵,組件提供了在腳本中執(zhí)行任務(wù)的對(duì)象。ActiveX組件是一個(gè)文件,該文件包含執(zhí)行某項(xiàng)或一組任務(wù)的代碼,由于組件可以執(zhí)行公用任務(wù),這樣程序員們就不必自己去創(chuàng)建執(zhí)行這些任務(wù)的代碼。可以利用組件作為腳本和基于Web應(yīng)用程序的基本構(gòu)造塊。只要知道如何訪問(wèn)組件提供的對(duì)象,即使是位編寫腳本的新手,也可以在不了解組件運(yùn)作方式的情況下編寫腳本??傊?,組件使您不用學(xué)習(xí)編程就能夠編寫強(qiáng)大的腳本。組件是包含在動(dòng)態(tài)鏈接庫(kù).dll或可執(zhí)行文件.exe中的可執(zhí)行代碼。組件可以提供一個(gè)或多個(gè)對(duì)象以及對(duì)象的方法和屬性。要使用組件提供的對(duì)象,請(qǐng)創(chuàng)建對(duì)象的實(shí)例并將這個(gè)新的實(shí)例分配變量名。使用ASP的Server.CreateObject方法可以創(chuàng)建對(duì)象的實(shí)例,使用腳本語(yǔ)言的變量分配指令可以為對(duì)象實(shí)例命名。如下例:
Setdb=Server.CreateObject("ADODB.Connection")
這里的變量db就是ASP程序創(chuàng)建的訪問(wèn)數(shù)據(jù)庫(kù)的對(duì)象實(shí)例。
ActiveServerPages提供了可在腳本中使用的內(nèi)建對(duì)象。這些對(duì)象使用戶更容易收集通過(guò)瀏覽器請(qǐng)求發(fā)送的信息、響應(yīng)瀏覽器以及存儲(chǔ)用戶信息,從而使對(duì)象開(kāi)發(fā)者擺脫了很多煩瑣的工作。目前的ASP版本總共提供了六個(gè)內(nèi)建對(duì)象,下面讓我們將通過(guò)實(shí)例分別來(lái)進(jìn)行學(xué)習(xí)。
一、Request對(duì)象
可以使用Request對(duì)象訪問(wèn)任何基于HTTP請(qǐng)求傳遞的所有信息,包括從HTML表格用POST方法或GET方法傳遞的參數(shù)、cookie和用戶認(rèn)證。Request對(duì)象使您能夠訪問(wèn)客戶端發(fā)送給服務(wù)器的二進(jìn)制數(shù)據(jù)。
Request的語(yǔ)法:
Request[.集合|屬性|方法](變量)
在這里作者將挑選一些常用的對(duì)象語(yǔ)法進(jìn)行分析
1、Form
Form集合通過(guò)使用POST方法的表格檢索郵送到HTTP請(qǐng)求正文中的表格元素的值。
語(yǔ)法
Request.Form(element)[(index)|.Count]
參數(shù)
element指定集合要檢索的表格元素的名稱。
index可選參數(shù),使用該參數(shù)可以訪問(wèn)某參數(shù)中多個(gè)值中的一個(gè)。它可以是1到Request.Form(parameter).Count之間的任意整數(shù)。
Count集合中元素的個(gè)數(shù)
Form集合按請(qǐng)求正文中參數(shù)的名稱來(lái)索引。Request.Form(element)的值是請(qǐng)求正文中所有element值的數(shù)組。通過(guò)調(diào)用Request.Form(element).Count來(lái)確定參數(shù)中值的個(gè)數(shù)。如果參數(shù)未關(guān)聯(lián)多個(gè)值,則計(jì)數(shù)為1。如果找不到參數(shù),計(jì)數(shù)為0。要引用有多個(gè)值的表格元素中的單個(gè)值,必須指定index值。index參數(shù)可以是從1到Request.Form(element).Count中的任意數(shù)字。如果引用多個(gè)表格參數(shù)中的一個(gè),而未指定index值,返回的數(shù)據(jù)將是以逗號(hào)分隔的字符串。
可以使用重述符來(lái)顯示表格請(qǐng)求中的所有數(shù)據(jù)值。例如,用戶通過(guò)指定幾個(gè)值填寫表格,見(jiàn)下圖。
對(duì)于hobby參數(shù),您可以使用下面的腳本檢索這些值。<html><head><title></title></head><body><p>請(qǐng)?zhí)顚懩愕膼?ài)好</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文件并運(yùn)行,request對(duì)象可以根據(jù)你在form中填入或選擇元素內(nèi)容的不同將元素逐個(gè)顯示出來(lái)。
當(dāng)然使用For...Next循環(huán)也可以生成同樣的輸出,如下所示:
<%
Fori=1ToRequest.Form("hobby").Count
Response.WriteRequest.Form("hobby")(i)&"<BR>"Next
%>
2、QueryString
QueryString集合檢索HTTP查詢字符串中變量的值,HTTP查詢字符串由問(wèn)號(hào)(?)后的值指定。如:
<AHREF="example.asp?string=thisisasample">stringsample</A>
生成值為"thisisasample"的變量名字符串。通過(guò)發(fā)送表格或由用戶在其瀏覽器的地址框中鍵入查詢也可以生成查詢字符串。
語(yǔ)法
Request.QueryString(variable)[(index)|.Count]
QueryString集合可以讓您以名稱檢索QUERY_STRING變量。Request.QueryString(參數(shù))的值是出現(xiàn)在QUERY_STRING中所有參數(shù)的值的數(shù)組。通過(guò)調(diào)用Request.QueryString(parameter).Count可以確定參數(shù)有多少個(gè)值。
可以使用QueryString來(lái)達(dá)到與前一個(gè)范例相同的功能。只需要將request.form部分替換如下:
<%
ForEachiInRequest.querystring("hobby")
Response.Writei&"<BR>"
Next
%>
3、Cookies
什么是Cookie?Cookie其實(shí)是一個(gè)標(biāo)簽,當(dāng)你訪問(wèn)一個(gè)需要唯一標(biāo)識(shí)你的站址的WEB站點(diǎn)時(shí),它會(huì)在你的硬盤上留下一個(gè)標(biāo)記,下一次你訪問(wèn)同一個(gè)站點(diǎn)時(shí),站點(diǎn)的頁(yè)面會(huì)查找這個(gè)標(biāo)記。每個(gè)WEB站點(diǎn)都有自己的標(biāo)記,標(biāo)記的內(nèi)容可以隨時(shí)讀取,但只能由該站點(diǎn)的頁(yè)面完成。每個(gè)站點(diǎn)的Cookie與其他所有站點(diǎn)的Cookie存在同一文件夾中的不同文件內(nèi)(你可以在Windows的目錄下的Cookie文件夾中找到它們)。一個(gè)Cookie就是一個(gè)唯一標(biāo)識(shí)客戶的標(biāo)記,Cookie可以包含在一個(gè)對(duì)話期或幾個(gè)對(duì)話期之間某個(gè)WEB站點(diǎn)的所有頁(yè)面共享的信息,使用Cookie還可以在頁(yè)面之間交換信息。Request提供的Cookies集合允許用戶檢索在HTTP請(qǐng)求中發(fā)送的cookie的值。這項(xiàng)功能經(jīng)常被使用在要求認(rèn)證客戶密碼以及電子公告板、WEB聊天室等ASP程序中。
語(yǔ)法
Request.Cookies(cookie)[(key)|.attribute]
參數(shù)
cookie指定要檢索其值的cookie。
key可選參數(shù),用于從cookie字典中檢索子關(guān)鍵字的值。
attribe指定cookie自身的有關(guān)信息。如:HasKeys只讀,指定cookie是否包含關(guān)鍵字。
可以通過(guò)包含一個(gè)key值來(lái)訪問(wèn)cookie字典的子關(guān)鍵字。如果訪問(wèn)cookie字典時(shí)未指定key,則所有關(guān)鍵字都會(huì)作為單個(gè)查詢字符串返回。例如,如果MyCookie有兩個(gè)關(guān)鍵字,First和Second,而在調(diào)用Request.Cookies時(shí)并未指定其中任何一個(gè)關(guān)鍵字,那么將返回下列字符串。
First=firstkeyvalue&Second=secondkeyvalue
如果客戶端瀏覽器發(fā)送了兩個(gè)同名的cookie,那么Request.Cookie將返回其中路徑結(jié)構(gòu)較深的一個(gè)。例如,如果有兩個(gè)同名的的cookie,但其中一個(gè)的路徑屬性為/www/而另一個(gè)為/,客戶端瀏覽器同時(shí)將兩個(gè)cookie都發(fā)送到/目錄中,那么Request.Cookie將只返回第二個(gè)cookie。
要確定某個(gè)cookie是不是cookie字典(cookie有否有關(guān)鍵字),可使用下列腳本。
<%=Request.Cookies("myCookie").HasKeys%>
如果myCookie是一個(gè)cookie字典,則前面的賦值為TRUE。否則,為FALSE。下面我們來(lái)看看一個(gè)cookie的應(yīng)用實(shí)例:
<%
nickname=request.form("nick")response.cookies("nick")=nickname
'用response對(duì)象將用戶名寫入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>
這其實(shí)是一個(gè)在基于WEB的BBS或CHAT的ASP程序中常用的手法,它將用戶在起始頁(yè)面上填入的姓名保存在cookie中,這樣后面的程序就可以很容易地調(diào)用該用戶的nick了。4、ServerVariables
在瀏覽器中瀏覽網(wǎng)頁(yè)的時(shí)候使用的傳輸協(xié)議是HTTP,在HTTP的標(biāo)題文件中會(huì)記錄一些客戶端的信息,如:客戶的IP地址等等,有時(shí)服務(wù)器端需要根據(jù)不同的客戶端信息做出不同的反映,這時(shí)候就需要用ServerVariables集合獲取所需信息。
語(yǔ)法
Request.ServerVariables(服務(wù)器環(huán)境變量)
由于服務(wù)器環(huán)境變量較多,將一些常用的變量在下表中列出:ALL_HTTP客戶端發(fā)送的所有HTTP標(biāo)題文件。CONTENT_LENGTH客戶端發(fā)出內(nèi)容的長(zhǎng)度。CONTENT_TYPE內(nèi)容的數(shù)據(jù)類型。如:“text/html”。同附加信息的查詢一起使用,如HTTP查詢GET、POST和PUT。LOCAL_ADDR返回接受請(qǐng)求的服務(wù)器地址。如果在綁定多個(gè)IP地址的多宿主機(jī)器上查找請(qǐng)求所使用的地址時(shí),這條變量非常重要。LOGON_USER用戶登錄WindowsNT的帳號(hào)。QUERY_STRING查詢HTTP請(qǐng)求中問(wèn)號(hào)(?)后的信息。REMOTE_ADDR發(fā)出請(qǐng)求的遠(yuǎn)程主機(jī)(client)的IP地址。REMOTE_HOST發(fā)出請(qǐng)求的主機(jī)(client)名稱。如果服務(wù)器無(wú)此信息,它將設(shè)置為空的MOTE_ADDR變量。REQUEST_METHOD該方法用于提出請(qǐng)求。相當(dāng)于用于HTTP的GET、HEAD、POST等等。SERVER_NAME出現(xiàn)在自引用URL中的服務(wù)器主機(jī)名、DNS化名或IP地址。SERVER_PORT發(fā)送請(qǐng)求的端口號(hào)。
我們可以使用以下腳本打印出所有的服務(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)建對(duì)象Response
下面,學(xué)習(xí)ASP的另一個(gè)內(nèi)建對(duì)象Response。
與Request是獲取客戶端HTTP信息相反,Response對(duì)象是用來(lái)控制發(fā)送給用戶的信息,包括直接發(fā)送信息給瀏覽器、重定向?yàn)g覽器到另一個(gè)URL或設(shè)置cookie的值。
語(yǔ)法Response.collection|property|method
一、屬性
1、Buffer
Buffer屬性指示是否緩沖頁(yè)輸出。當(dāng)緩沖頁(yè)輸出時(shí),只有當(dāng)前頁(yè)的所有服務(wù)器腳本處理完畢或者調(diào)用了Flush或End方法后,服務(wù)器才將響應(yīng)發(fā)送給客戶端瀏覽器,服務(wù)器將輸出發(fā)送給客戶端瀏覽器后就不能再設(shè)置Buffer屬性。因此應(yīng)該在.asp文件的第一行調(diào)用Response.Buffer。
2、Charset
Charset屬性將字符集名稱附加到Response對(duì)象中content-type標(biāo)題的后面。對(duì)于不包含Response.Charset屬性的ASP頁(yè),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
注意,無(wú)論字符串表示的字符集是否有效,該功能都會(huì)將其插入content-type標(biāo)題中。且如果某個(gè)頁(yè)包含多個(gè)含有Response.Charset的標(biāo)記,則每個(gè)Response.Charset都將替代前一個(gè)CharsetName。這樣,字符集將被設(shè)置為該頁(yè)中Response.Charset的最后一個(gè)實(shí)例所指定值。
3、ContentType
ContentType屬性指定服務(wù)器響應(yīng)的HTTP內(nèi)容類型。如果未指定ContentType,默認(rèn)為text/HTML。
4、Expires
Expires屬性指定了在瀏覽器上緩沖存儲(chǔ)的頁(yè)距過(guò)期還有多少時(shí)間。如果用戶在某個(gè)頁(yè)過(guò)期之前又回到此頁(yè),就會(huì)顯示緩沖區(qū)中的頁(yè)面。如果設(shè)置response.expires=0,則可使緩存的頁(yè)面立即過(guò)期。這是一個(gè)較實(shí)用的屬性,當(dāng)客戶通過(guò)ASP的登陸頁(yè)面進(jìn)入WEB站點(diǎn)后,應(yīng)該利用該屬性使登陸頁(yè)面立即過(guò)期,以確保安全。
5、ExpiresAbsolute
與Expires屬性不同ExpiresAbsolute屬性指定緩存于瀏覽器中的頁(yè)面的確切到期日期和時(shí)間。在未到期之前,若用戶返回到該頁(yè),該緩存中的頁(yè)面就顯示。如果未指定時(shí)間,該主頁(yè)在當(dāng)天午夜到期。如果未指定日期,則該主頁(yè)在腳本運(yùn)行當(dāng)天的指定時(shí)間到期。如下示例指定頁(yè)面在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(cuò)誤情況。但是如果沒(méi)有將Response.Buffer設(shè)置為TRUE,則該方法將導(dǎo)致運(yùn)行時(shí)錯(cuò)誤。
2、End
End方法使Web服務(wù)器停止處理腳本并返回當(dāng)前結(jié)果。文件中剩余的內(nèi)容將不被處理。如果Response.Buffer已設(shè)置為TRUE,則調(diào)用Response.End將緩沖輸出。
3、Flush
Flush方法立即發(fā)送緩沖區(qū)中的輸出。如果沒(méi)有將Response.Buffer設(shè)置為TRUE,則該方法將導(dǎo)致運(yùn)行時(shí)錯(cuò)誤。
4、Redirect
Redirect方法使瀏覽器立即重定向到程序指定的URL。這也是一個(gè)我們經(jīng)常用到方法,這樣程序員就可以根據(jù)客戶的不同響應(yīng),為不同的客戶指定不同的頁(yè)面或根據(jù)不同的情況指定不同的頁(yè)面。一旦使用了Redirect方法任何在頁(yè)中顯式設(shè)置的響應(yīng)正文內(nèi)容都將被忽略。然而,此方法不向客戶端發(fā)送該頁(yè)設(shè)置的其他HTTP標(biāo)題,將產(chǎn)生一個(gè)將重定向URL作為鏈接包含的自動(dòng)響應(yīng)正文。Redirect方法發(fā)送下列顯式標(biāo)題,其中URL是傳遞給該方法的值。如:
<%Response.redirect("")%>
5、Write
Write方法是我們平時(shí)最常用的方法之一,它是將指定的字符串寫到當(dāng)前的HTTP輸出。
三、集合
Response對(duì)象只有一個(gè)集合--Cookie
Cookies集合設(shè)置cookie的值。若指定的cookie不存在,則創(chuàng)建它。若存在,則設(shè)置新的值并且將舊值刪去。
語(yǔ)法
Response.Cookies(cookie)[(key)|.attribute]=value
這里的cookie是指定cookie的名稱。而如果指定了key,則該cookie就是一個(gè)字典。attribute指定cookie自身的有關(guān)信息。attribute參數(shù)可以是下列之一:
Domain若被指定,則cookie將被發(fā)送到對(duì)該域的請(qǐng)求中去。
Expires指定cookie的過(guò)期日期。為了在會(huì)話結(jié)束后將cookie存儲(chǔ)在客戶端磁盤上,必須設(shè)置該日期。若此項(xiàng)屬性的設(shè)置未超過(guò)當(dāng)前日期,則在任務(wù)結(jié)束后cookie將到期。
HasKeys指定cookie是否包含關(guān)鍵字。
Path若被指定,則cookie將只發(fā)送到對(duì)該路徑的請(qǐng)求中。如果未設(shè)置該屬性,則使用應(yīng)用程序的路徑。
程序保存為asp7.asp。
<%
Dimuser
Dimflag
Dimpwd
Dimsay
Response.buffer=true‘開(kāi)啟緩沖頁(yè)面功能
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è)置該頁(yè)面在瀏覽器的緩沖中存儲(chǔ)1分鐘后過(guò)期。
flag=1
ElseIfuser="guest"andpwd="guest"Then
Response.Expires=0'使緩存的頁(yè)面立即過(guò)期。
Response.Clear'清空存儲(chǔ)在緩存中的頁(yè)面
flag=2
ElseIfuser="vip"andpwd="vip"Then
Response.Write"歡迎VIP光臨書生的ASP網(wǎng)站"
flag=3
Else
flag=0
Response.End'立即停止腳本處理,并將緩存中的頁(yè)面輸出
EndIf
Response.write"<p><ahref='asp7b.asp?flag="&flag&"'>動(dòng)態(tài)網(wǎng)站設(shè)計(jì)十八般武藝--ASP篇(7)實(shí)踐練習(xí)</a></p>"
'將變量flag的值傳送給asp7b.asp
%>
<p>動(dòng)態(tài)網(wǎng)站設(shè)計(jì)十八般武藝--ASP篇(7)實(shí)踐練習(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
%>
將這兩個(gè)程序放在有執(zhí)行權(quán)限的WEB虛擬目錄下,并以http方式訪問(wèn)asp7.asp。當(dāng)?shù)谝淮卧L問(wèn)asp7.asp文件時(shí),頁(yè)面上出現(xiàn)一個(gè)Form并提示輸入用戶名和口令,如果你輸入用戶名:Adm、口令:shusheng,則會(huì)出現(xiàn)如下頁(yè)面:
這是為什么呢?因?yàn)樵O(shè)置了頁(yè)面緩存,當(dāng)使用guest登陸時(shí),判斷程序自動(dòng)清空其之前所有存儲(chǔ)在緩存中的頁(yè)面,而僅將其后腳本程序執(zhí)行的結(jié)果顯示出來(lái)。
那為什么第一次登陸asp7.asp頁(yè)面時(shí)僅僅只顯示一個(gè)Form對(duì)話框呢?因?yàn)榇藭r(shí)程序判斷到用戶既非Adm,也不是guest和vip,所以執(zhí)行Response.End,立即將存儲(chǔ)在緩存中的Form顯示出來(lái),并停止其后的一切腳本處理,包括純HTML代碼的顯示。
無(wú)論你是用Adm還是guest或vip登陸該頁(yè)面你都可以看到一個(gè)超鏈,該超鏈指向文件asp7b.asp,當(dāng)點(diǎn)擊該超鏈時(shí),asp7.asp將變量flag的值作為參數(shù)發(fā)送給asp7b.asp,而后者則根據(jù)該參數(shù)的值來(lái)做出判斷,并依據(jù)不同情況使用Response.Redirect再?gòu)?qiáng)行返回asp7.asp,并也將一個(gè)變量say的值作為參數(shù)發(fā)送給asp7.asp。如此一來(lái),asp7.
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 十月革命的勝利與蘇聯(lián)的社會(huì)主義實(shí)踐課件-2024-2025學(xué)年高一下統(tǒng)編版(2019)必修中外歷史綱要下
- 科技企業(yè)如何應(yīng)對(duì)倫理問(wèn)題挑戰(zhàn)
- 2025年湖北省荊門市單招職業(yè)傾向性測(cè)試題庫(kù)完美版
- 2025年鶴崗師范高等??茖W(xué)校單招職業(yè)技能測(cè)試題庫(kù)審定版
- 2025年衡陽(yáng)科技職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)完整版
- 2025年海南衛(wèi)生健康職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)及答案一套
- 2025年濟(jì)南護(hù)理職業(yè)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)學(xué)生專用
- 2025年湖北工程職業(yè)學(xué)院?jiǎn)握新殬I(yè)技能測(cè)試題庫(kù)完整
- 2025年廣西農(nóng)業(yè)職業(yè)技術(shù)大學(xué)單招職業(yè)傾向性測(cè)試題庫(kù)一套
- 2025年湖州職業(yè)技術(shù)學(xué)院?jiǎn)握新殬I(yè)傾向性測(cè)試題庫(kù)審定版
- 閱讀與思考圓錐曲線的光學(xué)性質(zhì)及其應(yīng)用課件
- 試產(chǎn)到量產(chǎn)項(xiàng)目轉(zhuǎn)移清單
- TB編程從入門到進(jìn)階
- 城市軌道交通應(yīng)急處理 01 城市軌道交通應(yīng)急處理概述-2
- 2023年全國(guó)中學(xué)生物理競(jìng)賽預(yù)賽試題含答案版
- 葛傳椝向?qū)W習(xí)英語(yǔ)者講話
- 6人小品《沒(méi)有學(xué)習(xí)的人不傷心》臺(tái)詞完整版
- 教師溝通能力提升培訓(xùn)幼兒園家長(zhǎng)溝通技巧教學(xué)課件
- 喀喇沁旗樓子店鄉(xiāng)上燒鍋白石礦石灰?guī)r礦2022年度礦山地質(zhì)環(huán)境治理計(jì)劃書
- 中國(guó)石油天然氣股份有限公司長(zhǎng)慶油田分公司第九采油廠油田產(chǎn)能建設(shè)項(xiàng)目組竣工環(huán)境保護(hù)驗(yàn)收調(diào)查表
- 鋼圍堰監(jiān)測(cè)方案
評(píng)論
0/150
提交評(píng)論