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