ASP10步進階
發表時間:2023-07-28 來源:明輝站整理相關軟件相關文章人氣:
[摘要]利用 Microsoft Active Server Pages 創建動態、交互式站點 利用微軟的軟件產品 Active Server Pages,通過在普通頁面中嵌入的ASP腳本語言,可以幫助建...
利用 Microsoft Active Server Pages 創建動態、交互式站點
利用微軟的軟件產品 Active Server Pages,通過在普通頁面中嵌入的ASP腳本語言,可以幫助建立動態的交互式站點,這一點早已是大家所熟知的了,就不用多說了.筆者也是初學ASP 腳本語言編寫,來談談自己的學習體會,希望能給后學者一點建議和啟示,更期望引起大家的興趣來交流探討、共同提高.
一 ASP 與 HTML 相比的優點
關于這方面的論述已經很多了,這里就不展開討論了.筆者認為,ASP與HTML相比,其最大的優勢在于三個方面:
1.在創建動態、交互式站點方面,其功能強大、處理方式靈活,具體可參見其它歌頌 ASP 功能的文章.
。玻捎贏SP腳本語言是由服務端來解釋和運行,動態生成普通的HTML頁面,然后再傳送到客戶端供瀏覽,因而對客戶端瀏覽器要求相對較低,并不要求其必須支持特定的某些腳本語言如JavaScript、JScript、VBScript、Perl等等.
3.由于傳送到客戶端的只是解釋后的HTML頁面,因而有效地保護了頁面開發者的知識產權.
二 搭建學習 ASP 的應用系統平臺
關于這方面的文章也不少,如【計算機世界】1998年第38期Internet&Intranet版的一篇文章《自己搭建ASP集成開發環境》就挺不錯,目前讀者還保留這篇文章,如果你需要就發個Mail過來吧.筆者所用的開發平臺為 Win95 + TCP/IP + PWS + ASP + FrontPage98,其中 FrongPage 不是必須的,可以用其它頁面開發工具甚至是 NotePad 來代替.PWS 應該容易獲得和安裝,在 Win95 OSR2 及其后的版本中都有;而ASP 則需要在 WinNT 的 IIS 中去找,或在 Visual Interdev 的安裝光盤中去找,實在找不到就到微軟的站點上去下載一個吧.
三 建立自己的簡單ASP頁面
所謂的ASP頁面就是在普通的HTML頁面文件中插入一些特殊的腳本語言并以擴展名asp保存后的頁面,所以可以很容易地建立一個自己的簡單的ASP頁面,體會一下ASP的入門感覺,同時獲得點成功的快感以便保持繼續學習下去的興趣.
首先來學習一下ASP腳本語言的簡單的語法.最基本的的是,在與HTML語言混合使用時ASP語句是以""<%"為開始,以"%>"為結束的,且必須成對出現.另外,由ASP默認的腳本語言是VBScript(設置其它腳本語言稍后再談),你還應該熟悉VBScript的基本語法.有了這些,建立一個簡單的ASP頁面應該是沒有問題了.
看看下面的一個頁面文件( test1.asp ):
<% rem test1.asp %>
<html>
<head>
<title>一個簡單的ASP頁面</title>
</head>
<body>
<p>
<h1>下面應出現4行語句,字體大小從4到7</h1>
<% for i = 4 to 7 %>
<br><font size = <% =i %>>這行語句的字體大小為
<% =i %></font>
<% next %>
</p>
</body>
</html>
其中,語句 <% =i %> 是將變量 i 的值輸出到HTML文件中.ASP用"<%=變量名%>"將指定變量的內容輸出到其生成的HTML頁面中.
由上可見,可以先設置制作一個普通的HTML頁面文件,然后在需要的地方插入ASP腳本語言即可.關鍵是熟練應用ASP腳本語句.
該頁面雖然簡單,卻可以幫助熟悉和理解ASP語法.可以用瀏覽器查看運行效果,再用其查看源代碼的功能看一下源代碼,可以看對ASP頁面解釋后的HTML文件.注意必須用http的方式訪問ASP頁面,不能象HTML頁面文件那樣雙擊文件名以文件方式瀏覽.如在筆者的計算機上的訪問方式為 http://wangfajun/aspsamp/test1.asp
四 利用Request對象制作簡單的交互頁面
ASP的內建對象Request中包含了訪問者的一些申請信息.可以將這些信息作為某些應用(如商業訂單信息)并對申請者的申請要求作出反饋.
在我們的這個例子中,讀者會員資格注冊申請頁面要求申請者填寫其姓名全稱、身份證號碼、EMail地址.在收到讀者申請后通知其注冊成功.
先做一個讀者會員資格注冊申請頁面,可以是HTML頁面或ASP頁面.這應該不成問題.
<!-- apply.htm -->
<html>
<head>
<title>讀者會員資格注冊申請</title>
</head>
<body>
<H2>讀者會員資格注冊申請</H2>
<form method="post" action="result.asp">
<p>
姓名全稱: <input name="FullName" SIZE="20" value="姓名全稱">
<p>
身份證號碼: <input name="UniversalID" SIZE="15" value="888888888888888">
<p>
電子郵箱: <input name="Email" value="mailbox@yourcompany.com">
<p><input type=submit value="提交申請"><input type=reset value="重新填寫">
</form>
</body>
</html>
在申請頁面中,所有的申請數據均填寫在Form元素中,并且在Form的Action中指定處理申請的頁面為result.asp.當收到申請時,對應項目的數據可以由Request.Form("項目名稱")來獲得,其中"項目名稱"為Form元素的名稱,如"姓名全稱"對應"FullName" ,如"身份證號碼"對應"UniversalID" .現在利用這些信息來制作一個注冊成功的通知頁面Result.asp.
<% rem result.asp %>
<html>
<head>
<title>讀者會員資格注冊申請成功</title>
</head>
<body>
<p align="center"><H2><font color="green">讀者會員資格注冊申請成功</font></H2>
<p>親愛的<%=Request.Form("FullName")%>讀者:<br>
我們已經收到你的申請,并接受你的申請.你已經成為我部正式讀者會員.<br>你的讀者號為CN<%=Request.Form("UniversalID")%>.我們將通過你的電子信箱<%=Request.Form("Email")%><br>來正式通知你.此后我部舉行讀者沙龍活動的時間和地點也將通過該信箱通知你.
</body>
</html>
現在用瀏覽器打開申請頁面,填入對應數據后提交申請,查看反饋效果,再用瀏覽器的查看源代碼的功能看一下源代碼,可以看對ASP頁面解釋后的HTML文件.
五 通過內建對象 Request 獲取用戶申請信息
可以從 ASP 的內建對象 Request 獲取用戶通過HTTP傳送過來的申請信息,如客戶認證、Cookies數據、Post信息、查詢參數、服務器環境信息等,這些可以分別從對象 Request 的集合屬性ClientCertificate、Cookies、Form、QueryString、ServerVarables 中獲取,獲取方式為 Request.CollectionName( ItemString ),其中CollectionName為集合屬性名稱即
ClientCertificate、Form、QueryString、ServerVarables 中的一個,ItemString 為要獲取的項目的名稱.如果可以確定沒有重復的項目名稱,也可直接以Request( ItemString )來獲取用戶信息,而不用指明集合屬性名稱.例如請求頁面中有一個Form元素CustomerID,且沒有其它元素名稱為CustomerID,則用Request.Form( "CustomerID" ) 與用Request.( "CustomerID" )
具有同樣的效果.
、澹肦equest.Form獲取表格信息
1.ASP頁面可從一個HTML中獲取表格信息,只要將該表格的Action指定為對應的ASP頁面即可.該項應用可參見前面的列舉的讀者會員資格申請的例子.在該例子中,result.asp 從一個HTML中獲取表格信息并提供反饋信息.
2.ASP頁面可從另一個ASP頁面生成的HTML中獲取表格信息.具體運作方式基本與從HTML頁面中獲取信息相同.
3.ASP頁面可從自己生成的HTML中獲取表格信息,只不過需要判斷該頁面是輸入頁面還是反饋頁面.在下面的例子中,login.asp 提供了一個用戶登錄頁面,要求用戶輸入登錄帳號和密碼,然后再通過Form的Action屬性將表格發送給自己進行處理.在 login.asp 中,將根據帳號和密碼是否全為空來判斷是輸入頁面還是反饋頁面,并給予不同的提示,若是輸入則提示"用戶登錄,請輸入用戶帳號和密碼",否則顯示用戶帳號和密碼.
<% rem login.asp %>
<html>
<head>
<title>用戶登錄</title>
</head>
<body>
<% if isEmpty( Request.Form( "CustomerID" ) ) and isEmpty( Request.Form( "Password" ) ) then
PromptString = "用戶登錄,請輸入用戶帳號和密碼"
else
PromptString = "用戶"&Request.Form( "CustomerID" )&"登錄成功,密碼為"&Request.Form( "Password" )
end if
%>
<H2><% = PromptString %></H2>
<form method="post" action="login.asp">
<p>
用戶帳號: <input name="CustomerID" value="">
<p>
用戶密碼: <input name="Password" value="">
<p><input type=submit value="開始登錄"><input type=reset value="重新登錄">
</form>
</body>
</html>
㈡.用Request.QueryString獲取用戶查詢參數信息
當用戶以 xxxxx.asp?ParaName = ParaValue 的方式發出查詢請求時,xxxxx.asp 可以從Request.QueryString("ParaName") 中獲取用戶提交的查詢參數ParaName的信息ParaValue,還可以從Request.QueryString("ParaName").count得知同一個參數被賦值的次數并進行相應的處理.
當用戶以 query.asp?CustomerID=7777 的方式發出查詢請求時,query.asp 可以從Request.QueryString("CustomerID") 中取得查詢參數 CustomerID的值為 7777,Request.QueryString("ParaName").count 為 1.
當用戶以 query.asp?CustomerID=7777&Password=DogIsDog 的方式發出查詢請求時,query.asp 可以從Request.QueryString("CustomerID") 中取得查詢參數 CustomerID 的值為 7777,從Request.QueryString("Password") 中取得查詢參數 Password的值為 DogIsDog ,Request.QueryString("CustomerID").count 為 1,Request.QueryString("Password").count 為
1.
有時用戶可能對一個參數指定若干個值,此時可以從Request.QueryString("ParaName ").count 獲取該參數ParaName被指定的內容的個數,并以索引的方式來取得參數值.例如用戶希望查詢到三個客戶7777 、 8888 和 9999 的相關資料時就可能以下面的方式query.asp?CustomerID=7777&CustomerID=8888&CustomerID=9999 發出查詢請求,此時在query.asp 可以獲知 :
<p><% = Request.QueryString("CustomerID").count %> 為 3
<p><% = Request.QueryString("CustomerID") %> 為 7777,8888,9999
<p><% = Request.QueryString("CustomerID")(1) %> 為 7777
<p><% = Request.QueryString("CustomerID")(2) %> 為 8888
<p><% = Request.QueryString("CustomerID")(3) %> 為 9999
其中Request.QueryString("CustomerID")可同時獲取三個參數,各個之間參數用逗號隔開.
下面的例子(query.asp)用于獲取用戶指定的客戶帳號,并顯示出來反饋給用戶.
<% rem query.asp %>
<html>
<head>
<title>用戶帳號</title>
</head>
<body>
<H2>您指定的客戶帳號如下</H2>
<%for i = 1 to Request.QueryString("CustomerID").count %>
<p>第<% = i %>個用戶帳號:<% = Request.QueryString("CustomerID")( i ) %>
<%next%>
</body>
</html>
、纾肦equest.ServerVariables獲取服務器環境信息
Request.ServerVariables 包含了請求HTTP服務的服務器的環境變量信息.由于應用較少,現列出常用的幾個.
Request.ServerVariables( "SERVER_PORT" ) : HTTP服務端口號,一般為 80.
Request.ServerVariables( "HTTP_ACCEPT_LANGUAGE" ) : 服務器采用的語言,
"en"表示英文,"zh-cn"表示簡體中文.
Request.ServerVariables( "SERVER_NAME" ) : 服務器的名稱或IP地址
Request.ServerVariables( "REQUEST_METHOD" ) : 發出Request的方法
(Post/Get/Head)
Request.ServerVariables( "SCRIPT_NAME" ) : 程序被調用的路徑及文件名稱
Request.ServerVariables( "REMOTE_HOST" ) : 發出Request的客戶端機器的名稱
Request.ServerVariables( "REMOTE_ADDR" ) : 發出Request的客戶端機器的IP地址
Request.ServerVariables( "REMOTE_IDENT" ) : 發出Request的用戶名稱,當NCSA
IdentityCheck為True且客戶端機器支持RFC931時有效.
Request.ServerVariables( "CONTENT_TYPE" ) : 數據的MIME類型
Request.ServerVariables( "HTTP_ACCEPT" ) : 客戶端可接受的MIME類型列表.
Request.ServerVariables( "HTTP_USER_AGENT" ) : 發出Request的客戶瀏覽器類型
Request.ServerVariables( "HTTP_REFERER" ) : 在發出CGI程序之前,客戶所指的文本
URL
、瑁肦equest.Cookies獲取用戶的Cookies信息
Cookies 可以服務器和客戶端之間雙向傳遞,它記錄了特定用戶的某些信息.利用Request.Cookies獲取用戶的Cookies信息.
如果請求用戶的Cookies為 Product=Floppy,則Request.Cookies("Product")的值為"Floppy";如果用戶發送的Cookies為多重信息即包含有下屬類型時,則可采用類似查詢參數QueryString的多維方式獲得,此時可以用Request.Cookies(cookie)的屬性HasKey來判斷某個Cookie是否有下屬類型。如當用戶的Cookies為 Product=Floppy&Floppy=Sony時,屬性
Request.Cookies("Product").HasKey為True,可通過Request.Cookies("Product")("Floppy")
得知其值為 "Sony".
<p>Product = <%=Request.Cookies("Product")%>
<p>Floppy = <%=Request.Cookies("Product")("Floppy")%>
、椋瓹lientCertificate用的較少,這里就不說了.
要求客戶端必須支持SSL3.0或PCT1協議, 服務器端必須啟動用戶端認證,客戶端必須進行相應的設置.
六 通過內建對象 Response 向用戶發送信息
可以利用 ASP 的內建對象 Response 很靈活地控制向客戶端發送的信息的內容和方式.例如可以自動轉向另一個URL頁面,可以改變頁面腳本的解釋方法,可以設置客戶的Cookie等
等.
、澹肦esopnse.Write 控制發送的信息內容
方法 Response.Write 可以向發往客戶端瀏覽器的HTML文件中直接輸出內容.這一點與利用主腳本的<% = 變量名 %>功能基本相同,但Resopnse.Write 的使用更為靈活,這體現在它作為一個方法函數,可以在非主要腳本的函數中直接使用(調用時傳遞參數的方式遵守對應腳本語言的規定),即可以出現在<script></script>之間向客戶輸出內容,這一點是<% = 變量名
%>無法做到的,也是對其功能的一個補充吧.
在下面的例子中,selecolr.asp 要求用戶輸入一個顏色名稱,用戶確認后將用戶申請發往同一個頁面selecolr.asp,然后用用戶指定的顏色將顏色名稱顯示出來.這里實現的功能可以用<% = 變量名 %>的方式來實現.Response.Write 在函數中的應用要涉及到函數調用,稍后會在討論多腳本語言編程時有例子出現.
<% rem selecolr.asp %>
<html>
<head>
<title>選擇顏色</title>
</head>
<body>
<%
if isEmpty( Request.Form( "ColorName" ) ) then
Response.write "<H4>你只需選擇顏色名稱,我來顯示</H4>"
else
Response.write "<H2>你選擇的顏色是<font color ="&Request.Form( "ColorName" )&">"&Request.Form( "ColorName" )&"</font></H2>"
end if
%>
<form method="post" action="selecolr.asp">
<p>
顏色名稱: <input name="ColorName" value="black">
<p><input type=submit value="顯示吧"><input type=reset value="想重選">
</form>
</body>
</html>
、妫 Response.Redirect 進行URL頁面重新定位
假如由于業務上的原因,你的站點的域名或IP地址發生了變化,就象Borland變成了Inprise一樣,老顧客在用原來的域名訪問時,可以用 Response.Redirect 直接將其引導到新的站點上去;假如要求用戶在訪問本頁面前必須先訪問另外一個頁面,可用 Response.Redirect 直接將其引導到應該去的頁面上去,而不是發出用戶無權訪問該頁面的信息.
值得注意的是,必須在向客戶端發送任何信息前使用 Redirect,否則會引起錯誤.你可以在頁面的第一條語句將用戶引導另一個URL,也可以將 Response.Buffer 設置為 True 而在以后適當的時間將用戶引導另一個URL.
在下面的例子中,若用戶調用本頁面,則將其引導到另一個頁面 selecolr.asp.
<% rem redirect.asp %>
<%Response.redirect "selecolr.asp"%>
<html>
<head>
<title>重新定向</title>
</head>
<body>
<p> 你不可能進入到本頁面,否則就是我的失。
</body>
</html>
、纾 Response.ContentType 頁面內容解釋方法
在HTML頁面代碼中,經常會看見下面一個句子
<meta http-equiv="Content-Type" content="text/html">
其中,它用于指定HTML頁面被瀏覽器解釋的方式.當 content="text/html"時,瀏覽器將代碼解釋為普通HTML頁面并顯示給用戶;當 content="text/plain" 時,瀏覽器將代碼不加任何解釋地顯示給用戶;當 content = "image/jpeg"是傳遞圖形文件; 當未指定時,ContentType
默認為 "text/html".在ASP頁面中,Response.ContentType 作用與普通HTML相同,即可以控制瀏覽器解釋HTML文本的方式。
在下面的例子中,plain.asp 將 Response.ContentType 設置為"text/plain",使用客戶
端用戶可以直接看到該頁面的HTML代碼.
<% rem plain.asp %>
<% Response.ContentType = Request.Form( "ContentTypeName" ) %>
<html>
<head>
<title>內容類型設置</title>
</head>
<body>
<% if isEmpty( Request.Form( "ContentTypeName" ) ) then
Response.write "<H4>你只需選擇類型,我來顯示</H4>"
else
Response.write "<H1>內容類型設置成功</H1>"
end if
%>
<form method="post" action="plain.asp">
<p>
內容類型: <input name="ContentTypeName" value="text/html">
<p><input type=submit value="顯示吧"><input type=reset value="想重選">
</form>
</body>
</html>
㈣.利用 Response.Cookies 設置客戶端Cookies
通過設置Response.Cookies可以增加或修改客戶端的Cookies,其設置方法與取得對應Cookie的值的方法相同.當要設置的Cookie不存在時,將創建一個新的Cookie,其值為要設置的值;Cookie存在且沒有下屬類別時,以新值代替原有的值;Cookie存在且有下屬類別時,若要設置的Cookie不含下屬類別,則原有的下屬類別將被刪除,若含下屬類別且無對應類別則創建新的下屬類別,有對應類別則以新值代替原有的值.
在下面的例子中,cookie.asp 用來設置一個名稱為 wfj 的Cookie的值.調用時將顯示上次設置的Cookie(wfj)的值.由于設置Cookie值要在發送內容之前,所以這里將Response.Buffer 設置為 true( 其原因見后 Response.Buffer 的說明 ).
<%rem cookie.asp %>
<%Response.Buffer = true%>
<html>
<head>
<title>Cookie設置</title>
</head>
<body>
<%
Response.Write "<p>原來的Cookie(wfj) = "&Request.Cookies( "wfj" )
if not isEmpty( Request.Form( "CookieValue" ) ) then
Response.Cookies("wfj") = Request.Form( "CookieValue" )
Response.Write "<p>Cookie(wfj) 已經設置為 "&Request.Form( "CookieValue" )
Response.Write "<p>下次調用時你會看到的"
end if
Response.write "<p><hr><H4>你只需設置Cookie,我來顯示</H4>"
%>
<form method="post" action="cookie.asp">
<p>
Cookie設置: <input name="CookieValue" value="wangfajun">
<p><input type=submit value="設置吧"><input type=reset value="想重選">
</form>
</body>
</html>
、椋 Response.Buffer 控制頁面發送進度
Response.Buffer 的默認值為 Flase,在這種情況下,服務器在處理對ASP頁面的請求時,采用邊處理邊發送反饋的方式,即在處理完一部分腳本后即向客戶端發送反饋,這樣在處理耗時較長的ASP頁面時,用戶不用等待很長時間就可以得到反饋,在用戶瀏覽的同時服務器繼續處理和發送反饋信息.當Response.Buffer 為 True 時,服務器在處理對ASP頁面的請求時使用緩沖技術,在頁面所有的腳本處理結束后才將處理結果傳送給客戶端,這樣在處理耗時較長的ASP頁面時,用戶需要等待較長的時間,而服務器端則可減少與客戶端連接的次數而提高整體響應速度,并可以在滿足某種條件時撤消已經處理的結果而不會出現響應完成一部分才停止的狀況.
在下面的例子中,buffer.asp 可以根據 BufferValue 的值來決定是否撤消反饋.當輸入yes時,用 Response.Clear 取消前面的反饋信息,用 Response.Redirect 將用戶引導到Cookie設置頁面,用 Response.End 停止反饋.
<% rem buffer.asp%>
<% Response.Buffer = true %>
<html>
<head>
<title>Buffer設置</title>
</head>
<body>
<% if isEmpty( Request.Form( "BufferValue" ) ) then
Response.write "<H4>你只需設置BufferValue,我來顯示</H4>"
else
Response.Write "BufferValue="&Request.Form( "BufferValue" )
end if
%>
<form method="post" action="buffer.asp">
<p>
是否撤消響應: <input name="BufferValue" value="no">
<p><input type=submit value="顯示吧"><input type=reset value="想重選">
</form>
<% if Request.Form( "BufferValue" ) = "yes" then
Response.Clear
Response.Redirect "cookie.asp"
Response.End
else
Response.Write "BufferValue="&Request.Form( "BufferValue" )
end if
%>
</body>
</html>
㈥.Response其它屬性和方法
。保瓻xpires屬性: 網頁在客戶端保留的時間長度
2.ExpiresAbsolute屬性: 網頁在客戶端保留的日期與時間
。常瓵ddHeader方法: 設定HTML文件的HTTP報頭.
4.AppendToLog方法: 在服務器日志中增加字符串.
。担瓼lush方法: 立刻送出緩沖區中的的HTML資料.
七 多種腳本語言混合編程
在同一個ASP頁面中,可以同時使用多種腳本語言,充分利用各個腳本語言的功能優勢.但必須指定一個主要腳本語言,若沒有指定則默認為 VBScript.要在一個ASP頁面中指定其它腳本語言為主要腳本語言,必須在該頁面的第一行指定,方法如下:
<%@ Language = LanguageName %>
如果要將JScript指定為某頁面的主要腳本語言,則須在該頁面第一行加入:
<%@ Language = JScript %>
若沒有指定,則相當于:
<%@ Language = VBScript %>
應注意,這種方法只對支持 Object.Method 語法的腳本語言有效,不支持的要在WinNT服務器上對 LanguageEngines 進行設置,由于筆者沒有用到,就不討論了.
上述是改變單個ASP頁面中主要腳本語言,在改變所有ASP頁面中主要腳本語言,采用上述方法可能不夠聰明,最好是在WinNT服務器上對 DefaultScriptLanguage 進行設置,由于筆者沒有用到,就不討論了,還是用笨辦法吧.
除了主要腳本語言外,還可在頁面的局部采用其它腳本語言來實現特定的功能.此時要用<Script>來實現,具體方法如下:
<Script Language = LanguageName RunAt = Server>
....
功能實現部分
....
</Script>
其中,LanguageName 為腳本語言名稱,可以是VBScript、JScript、Perl 等服務器上已安裝的解釋引擎的腳本語言;Runat = Server 指定該段腳本在服務器運行,以區別在客戶端瀏覽器運行,因為默認是在客戶端瀏覽器運行,所以該設置不能省略,否則對應的腳本將發送到客戶端讓瀏覽器解釋運行.
在ASP頁面中,一般每種腳本完成一個完整的功能,然后用主要腳本語言進行調用,調用
方法為<%Call Function%>.
用<Script>方式編寫服務器端腳本時應注意:
1.腳本語句必須作為某個函數的一部分出現,而不能單獨出現在函數體之外.
2.不能使用輸出語句,如<% = 變量名 %>向生成的HTML頁面輸出.
3.編寫函數時不可再用<!-- -->來屏蔽,因為服務器必須能解釋腳本,否則會引起錯誤. 多種腳本語言混合使用時應注意,要使用某種腳本語言,必須首先在服務器上安裝對應的腳本語言解釋器.在 ASP 中已經內置了VBScript和JScript兩種腳本語言解釋器,故可不必安裝,但其它腳本語言則必須安裝后才能使用.
下面是一個VBScript和JScript兩種腳本混合使用的例子,是上面例子query.asp的改寫.
<html>
<head>
<title>用戶帳號</title>
</head>
<Script Language = VBScript RunAt = Server>
Sub VBSQuery
for i = 1 to Request.QueryString("CustomerID").count
Response.Write "<p>第"&i&"個用戶帳號:"&Request.QueryString("CustomerID")( i )
next
End Sub
</Script>
<SCRIPT LANGUAGE=JScript RUNAT=Server>
function JSQuery()
{
var i;
for ( i =1; i <= Request.QueryString("CustomerID").count; i++ )
Response.Write("<p>第" + i + "個用戶帳號:" + Request.QueryString("CustomerID")( i ));
}
</Script>
<body>
<H2>VBScript :您指定的客戶帳號如下</H2>
<% Call VBSQuery %>
<H2>JScript :您指定的客戶帳號如下</H2>
<% Call JSQuery %>
<H2>主腳本 :您指定的客戶帳號如下</H2>
<%for i = 1 to Request.QueryString("CustomerID").count %>
<p>第<% = i %>個用戶帳號:<% = Request.QueryString("CustomerID")( i ) %>
<%next%>
</body>
</html>
八 服務器端腳本和客戶端腳本混合編程
當使用<script></script>編寫一段腳本程序時,如果沒有指定 Runat = Server,則認為其中的腳本程序在客戶端執行,此時可以在程序中混合使用服務器端主要腳本和客戶端腳本,這樣就可以根據客戶端的請求靈活地控制客戶端腳本的執行,使對客戶的反饋更具有個性化.在混合使用時,服務器端腳本要以<%%>的形式嵌入,以示區別.
下面就是一個服務器端腳本和客戶端腳本混合編程的例子.在該例子中,將輸出10條記錄,并為每條記錄定制不同的函數.
<html>
<head>
<title>服務器端腳本和客戶端腳本混合編程</title>
</head>
<body>
<H1>鼠標移到各記錄上的【項目名稱】上時,請注意狀態條內容的變化</H1>
<table border = "1">
<tr><td>項目名稱</td><td>狀態條應出現的內容</td></tr>
<% for i = 1 to 10 %>
<tr>
<td onmouseover = "Status<% =i %>()"><% =i %></td>
<td>第<% =i %>條記錄出現了</td>
<tr>
<script language = JavaScript>
<!--
function Status<% =i %>()
{
window.status = "第<% =i %>條記錄出現了";
}
-->
</script>
<% next %>
</table>
</body>
</html>
九 增加注釋
在編程時添加注釋是一個好的習慣.ASP 允許在頁面代碼中添加注釋.具體的注釋方法可參見各腳本語言的規則規定,如VBScript的注釋符號為 Rem 或 單引號" ' ",JScript的注釋符號為 雙斜杠"//".有一點要注意,就是在HTML輸出語句中不能添加注釋,如<p>當前時間為<% =now '在HTML輸出當前時間%>
即是無效的.
十 利用 Include 來實現功能模塊化
可以將常用的功能函數存于一個ASP文件,在其它ASP頁中要用其中的功能時,將包含函數的ASP文件包含在調用函數的ASP文件中.這時可使用 Include 語句.具體語法為:
<!-- #include file="AspFileName" --> 或 <!-- #include Virtual="AspFileName" --> .
使用時應該注意:
。保<!-- include file >用于被包含的ASP文件的文件名為普通文件名,其中文件所在的目錄為實際目錄;而<!-- include virtual>用于被包含的ASP文件的文件名為虛擬文件名,其中文件所在的目錄為虛擬目錄.
。玻话募奈募Q不能使用ASP腳本變量,因為包含語句是先于腳本語句被解釋和執行的,此時文件名為無效文件名稱.如下面語句即為無效的:
<% for i = 1 to 4
AspFileName = "\aspsamp\Asp"&i&".asp"
%>
<!-- include file=AspFileName -->
<% next %>
3.應避免自包含,即 File1 包含 File1;在多個文件中有包含語句時,應避免間接自包含即循環包含,如File1包含File2,File2包含File3,File3包含File1.
。矗话哪_本語言的類型必須是默認語言類型,即必須是主文件<%@ language%>語句中指定的腳本語言類型;被包含文件中不能使用<%@ language%>語句.
。担梢允褂 "../"來表示相對路徑.此時應保證服務器端 EnableParentPaths 設置為 1,當然在Win95上無法設置了.
以上是學習和使用ASP創建動態、交互式站點的一些入門知識,有了這些基礎知識,就可以發揮以前自己積累的編程經驗,自己動手學習和探索用ASP創建動態、交互式站點的高級應用了.歡迎大家將自己的學習所得發表出來,讓我們來共同分享你成功的喜悅;也歡迎大家寫信到 wangfajun@163.net 與筆者交流學習心得.