在Vbscript和Jscript的章節(jié)中(相應(yīng)第8和第9章),你會(huì)學(xué)到怎樣將Script腳本結(jié)合到Active Server Pages的具體實(shí)現(xiàn)。這部分主要是詳細(xì)解釋以及介紹一些可選擇的方法來(lái)進(jìn)行Scripts和Active Server Pages的結(jié)合。
最簡(jiǎn)單的結(jié)合Scripts的方法是利用<%和%>,任何在這個(gè)符號(hào)中包容的都被認(rèn)為是一個(gè)Scripts腳本。下面是個(gè)例子:
?。糷tml>
?。糷ead><title>ASP Script 示例</title></head>
?。糱ody>
這是個(gè)
?。? for I=1 to 10 %>
非常,
?。? next %>
非常長(zhǎng)的句子。
?。?body>
?。?html>
該段Active Server Pages執(zhí)行后在瀏覽器上顯示為:
這是個(gè)非常,非常,非常,非常,非常,非常,非常,非常,非常,非常,非常長(zhǎng)的句子?! ?
這段腳本利用VBscript的For...Next循環(huán)生成了11份‘非?!目截悺! ?
Active Server Pages默認(rèn)為您主要使用的是VBscript,也就是說(shuō),在使用<%和%>時(shí)不需要作任何事情來(lái)說(shuō)明使用何種語(yǔ)言。不過(guò),如果需要限定的話(huà),您可以有三種方式?! ?
首先,你可以在Internet Information Service管理器來(lái)進(jìn)行限定使得所有Active Server Pages的默認(rèn)語(yǔ)言為你所限定的。這樣做的步驟如下:
1.從開(kāi)始菜單IIS(Internet Information Service)的程序組中執(zhí)行網(wǎng)絡(luò)服務(wù)管理器
2.右鍵你的網(wǎng)站名稱(chēng)(如果你沒(méi)有改變默認(rèn)設(shè)置,名稱(chēng)將是Default Web Site)
3.選擇屬性項(xiàng)
4點(diǎn)擊主目錄表?! ?
5點(diǎn)擊設(shè)置按鈕(要做這個(gè),你必須有一個(gè)存在的Application。如果沒(méi)有的話(huà),點(diǎn)Creat來(lái)創(chuàng)建一個(gè)。)
6.在A(yíng)pplication Configuration的對(duì)話(huà)框中,點(diǎn)App Option表?! ?
7.在默認(rèn)的ASP語(yǔ)言文本框中,輸入你所要的主要腳本語(yǔ)言,例如Vbscript或者Jscript?! ?
當(dāng)這些作完后,<%和%>中包容的程序就默認(rèn)為你所指定的那種語(yǔ)言?! ?
你還可以在特定的主頁(yè)中指定主要腳本語(yǔ)言,這樣做,你要將這種語(yǔ)言名稱(chēng)直接放在你的Active Server Page文件最靠上的一行,如下:
?。?@ LANGUAGE=Jscript %>
?。糷tml>
?。糷ead><title>ASP Script示例</title></head>
<body>
這是個(gè)
?。? for(i=1;i<11;i++){ %>
非常,
<%}%>
非常長(zhǎng)的句子。
?。?body>
?。?html>
這種直接放在首行的腳本,指示出這個(gè)文件中所有腳本都將利用JSCRIPT生成,當(dāng)你利用這種方式指定腳本語(yǔ)言時(shí),請(qǐng)注意在@和保留字LANGUAGE之間空出一個(gè)空格。另外,非常重要的是這句指示要在任何一句命令之前(否則就要報(bào)錯(cuò)了)。
你的第三種在A(yíng)ctive Server Pages包含Scripts腳本的選擇是利用微軟的HTML<Script>拓展對(duì)象,例如下面:
?。糷tml>
?。糷ead><title>ASP Script示例</title></head>
?。糱ody>
?。約cript language=“Jscript” runat=“server”>
function sayhello()
{ response.write(“hello! 邁至科”)
}
</script>
?。? sayhello() %>
?。?body>
</html>
這里,<script>對(duì)象包含了一個(gè)Jscript函數(shù)。<script>的Language屬性限定了使用哪一種語(yǔ)言。RUNAT屬性是指示出該腳本應(yīng)當(dāng)在Server端還是在Client(瀏覽器上)端實(shí)現(xiàn)?! ?
這個(gè)函數(shù)在第一行中被命名為sayhello()。在第二段腳本中,利用<%和%>標(biāo)記的對(duì)象是真正調(diào)用該函數(shù)的位置。Active Server Pages會(huì)在顯示器上顯示出字符串
“hello! 邁至科”
注意
response.write()語(yǔ)句是將一段文本顯示在顯示器上。您會(huì)在后面的內(nèi)容中了解更多?! ?
如果你創(chuàng)建了一個(gè)客戶(hù)端的VBscript或者JScript腳本,你就應(yīng)當(dāng)對(duì)<SCRIPT>更加熟悉了。微軟的<Script>拓展可以被用來(lái)指定是在服務(wù)端還是在客戶(hù)段執(zhí)行。如果你忽略了RUNAT=server這個(gè)限定,你的script腳本將被認(rèn)為是客戶(hù)端的。這種場(chǎng)合下,Server端將忽略這個(gè)script并由瀏覽器嘗試執(zhí)行〔然而會(huì)很悲慘的以失敗告終,因?yàn)檫@不是一個(gè)合法的客戶(hù)端script腳本〕?! ?
為什么你會(huì)直接使用<Script>對(duì)象而不是<%和%>來(lái)限定scipt腳本語(yǔ)言?通常,你不會(huì)使用<script>對(duì)象。不過(guò),這兩種限定一個(gè)Script腳本的方法還是有很明顯的區(qū)別的?! ?
首先,使用<script>包含的直接腳本會(huì)立即執(zhí)行,無(wú)論在A(yíng)ctive Server Pages的任何位置。例如下面這個(gè)例子?! ?
<html>
?。糷ead><title>ASP Script示例</title></head>
?。糱ody>
This is the first sentence
?。約cript LANGUAGE=“JScript” RUNAT=“server”>
response.write(“This is the second sentence.”)
</script>
?。?body>
</html>
看這個(gè)例子后,您也許會(huì)認(rèn)為,顯示器上會(huì)首先顯示This is the first sentence,然后是This is the second sentence,但是,這個(gè)Active Server Pages顯示在瀏覽器上是相反的順序。(或者什么都不顯示,那是因?yàn)樯闪朔欠ǖ腍TML語(yǔ)法)
為什么會(huì)這樣?因?yàn)橹黜?yè)里面無(wú)論什么放在<script>里面都會(huì)首先執(zhí)行。如果你使用瀏覽器的View Source,你會(huì)看見(jiàn)你的主頁(yè)被Active Server Pages解釋為如下:
This is the second sentence.<html>
<head><title>ASP Script示例</title></head>
?。糱ody>
This is the first sentence.
</body>
?。?html>
<script>對(duì)象的行為有兩種含義。首先,你能夠在A(yíng)ctive Server Pages的任何位置上的<script>對(duì)象中放置你的script腳本。其次,<script>對(duì)象,如果用于更多的目的來(lái)說(shuō),將會(huì)用包含函數(shù)和子程序的方法來(lái)進(jìn)行限制。任何不包含函數(shù)或者子程序的腳本都將被立即執(zhí)行顯示為一個(gè)非法的HTML主頁(yè)。
?。約cript>對(duì)象使用<%和%>限制有一個(gè)明顯的優(yōu)點(diǎn)。使用<script>對(duì)象,你可以在一個(gè)單獨(dú)的主頁(yè)中混合使用多種script腳本??聪旅孢@個(gè)例子:
?。?@ LANGUAGE=“VBScript” %>
?。糷tml>
<head><title>ASP Script示例</title></head>
?。糱ody>
?。約cript LANGUAGE=“JScript” RUNAT=“server”>
function sayhello()
{
response.write(“hello! 邁至科”)
}
?。?script>
?。? for I=1 to 10
sayhello()
next
%>
?。?body>
?。?html>
這個(gè)script腳本在一列中顯示了十次”hello! 邁至科”,但是請(qǐng)注意這是怎么實(shí)現(xiàn)的,這個(gè)包含在<%和%>中的腳本是用Visual Basic寫(xiě)成的,不過(guò),這個(gè)腳本調(diào)用的是JScript函數(shù),這個(gè)JScript函數(shù)是在<Script>對(duì)象中定義的。當(dāng)你希望在你的主腳本用一種語(yǔ)言而又需要調(diào)用另一種語(yǔ)言的函數(shù),你可以使用這種方法。這樣可以彌補(bǔ)一些語(yǔ)言在常用函數(shù)和方法上的缺乏。
作為總結(jié),在一個(gè)Active Server Pages上指定腳本語(yǔ)言有三種方法?! ?
·利用Internet Information Server來(lái)指定作為你所有腳本中的默認(rèn)語(yǔ)言。
·在每一個(gè)單獨(dú)的Active Server Pages中的最上面一行利用<%@ LANGUAGE=“script語(yǔ)言”>來(lái)指定針對(duì)這個(gè)單獨(dú)Active Server Page所使用的腳本語(yǔ)言。
· 利用Active Server Pages的<script>拓展來(lái)在一個(gè)Active Server Page中分別在相應(yīng)位置指定多種腳本語(yǔ)言。
在這部分結(jié)束以前,將討論最終極的Active Server Pages指令,利用Active Server Pages輸出指令,你可以直接顯示表達(dá)式值。以下是個(gè)例子:
?。糷tml>
?。糷ead><title>ASP示例</title></head>
?。糱ody>
At the Tone,the time will be: <%=time%>
?。?body>
</html>
你可以使用<%和%>標(biāo)志來(lái)輸出變量、方法(method,針對(duì)于對(duì)象的方法)以及函數(shù)的值,在上面的例子中,VBScript的時(shí)間函數(shù)值會(huì)輸出到顯示器上?! ?
你可以用下面的方法完成同樣的事,見(jiàn)下面例子:
?。糷tml>
?。糷ead><title>ASP示例</title></head>
?。糱ody>
At the Tone,the time will be:<%response.write(TIME)%>
</body>
?。?html>
在這個(gè)例子中,VBScript的Time函數(shù)值將被Active Server Pages的Response對(duì)象輸出出來(lái),response對(duì)象的write()方法是將表達(dá)式中的值顯示出來(lái)。(下一章中,你會(huì)學(xué)到更多有關(guān)對(duì)象和方法的知識(shí))?! ?
那么補(bǔ)充說(shuō)明的是對(duì)于A(yíng)ctive Server Pages內(nèi)部<%=和%>也就是代表了Response.write()方法,因此無(wú)論你用哪一種方法其實(shí)是一樣的,沒(méi)有任何區(qū)別?! ?
注意
當(dāng)你使用<%=和%>來(lái)進(jìn)行輸出時(shí),如果此時(shí)顯示錯(cuò)誤信息,將相應(yīng)顯示為response.write()語(yǔ)句,你也許會(huì)因?yàn)槟愕某绦蛑袥](méi)有這句話(huà)而困惑,其實(shí)這正說(shuō)明二者實(shí)際上在A(yíng)ctive Server Pages中是完全一致的?! ?
雖然如此,在有些場(chǎng)合下某一種輸出方式顯然更方便一些,例如,當(dāng)你需要在一個(gè)script腳本中輸出表達(dá)式值,通常response.write()更加容易處理,如果只是在HTML的某一位置輸出表達(dá)式值,那么<%=和%>則更容易使用。如下例:
?。糎TML>
<head><title>ASP示例</title></head>
?。糱ody>
?。?
For i=1 to 5
myvar=myvar&“非常,”
response.write(i&“:”&myvar&“<br>”)
next
%>
<hr>
這是一個(gè)<%=myvar%>長(zhǎng)的句子。
</body>
?。?html>
在這個(gè)例子中,response.write()在script腳本的循環(huán)中顯示越來(lái)越長(zhǎng)的子段。而<%=和%>指令則是直接在主頁(yè)的具體位置顯示出變量myvar的值。