明輝手游網(wǎng)中心:是一個(gè)免費(fèi)提供流行視頻軟件教程、在線學(xué)習(xí)分享的學(xué)習(xí)平臺(tái)!

ASP10步進(jìn)階

[摘要]利用 Microsoft Active Server Pages 創(chuàng)建動(dòng)態(tài)、交互式站點(diǎn)  利用微軟的軟件產(chǎn)品 Active Server Pages,通過在普通頁面中嵌入的ASP腳本語言,可以幫助建...
利用 Microsoft Active Server Pages 創(chuàng)建動(dòng)態(tài)、交互式站點(diǎn)

  利用微軟的軟件產(chǎn)品 Active Server Pages,通過在普通頁面中嵌入的ASP腳本語言,可以幫助建立動(dòng)態(tài)的交互式站點(diǎn),這一點(diǎn)早已是大家所熟知的了,就不用多說了.筆者也是初學(xué)ASP 腳本語言編寫,來談?wù)勛约旱膶W(xué)習(xí)體會(huì),希望能給后學(xué)者一點(diǎn)建議和啟示,更期望引起大家的興趣來交流探討、共同提高.

一  ASP 與 HTML 相比的優(yōu)點(diǎn)
  關(guān)于這方面的論述已經(jīng)很多了,這里就不展開討論了.筆者認(rèn)為,ASP與HTML相比,其最大的優(yōu)勢在于三個(gè)方面:
 。保趧(chuàng)建動(dòng)態(tài)、交互式站點(diǎn)方面,其功能強(qiáng)大、處理方式靈活,具體可參見其它歌頌 ASP 功能的文章.
  2.由于ASP腳本語言是由服務(wù)端來解釋和運(yùn)行,動(dòng)態(tài)生成普通的HTML頁面,然后再傳送到客戶端供瀏覽,因而對(duì)客戶端瀏覽器要求相對(duì)較低,并不要求其必須支持特定的某些腳本語言如JavaScript、JScript、VBScript、Perl等等.
  3.由于傳送到客戶端的只是解釋后的HTML頁面,因而有效地保護(hù)了頁面開發(fā)者的知識(shí)產(chǎn)權(quán).

二 搭建學(xué)習(xí) ASP 的應(yīng)用系統(tǒng)平臺(tái)
  關(guān)于這方面的文章也不少,如【計(jì)算機(jī)世界】1998年第38期Internet&Intranet版的一篇文章《自己搭建ASP集成開發(fā)環(huán)境》就挺不錯(cuò),目前讀者還保留這篇文章,如果你需要就發(fā)個(gè)Mail過來吧.筆者所用的開發(fā)平臺(tái)為 Win95 + TCP/IP + PWS + ASP + FrontPage98,其中 FrongPage 不是必須的,可以用其它頁面開發(fā)工具甚至是 NotePad 來代替.PWS 應(yīng)該容易獲得和安裝,在 Win95 OSR2 及其后的版本中都有;而ASP 則需要在 WinNT 的 IIS 中去找,或在 Visual Interdev 的安裝光盤中去找,實(shí)在找不到就到微軟的站點(diǎn)上去下載一個(gè)吧.

三 建立自己的簡單ASP頁面
  所謂的ASP頁面就是在普通的HTML頁面文件中插入一些特殊的腳本語言并以擴(kuò)展名asp保存后的頁面,所以可以很容易地建立一個(gè)自己的簡單的ASP頁面,體會(huì)一下ASP的入門感覺,同時(shí)獲得點(diǎn)成功的快感以便保持繼續(xù)學(xué)習(xí)下去的興趣.
  首先來學(xué)習(xí)一下ASP腳本語言的簡單的語法.最基本的的是,在與HTML語言混合使用時(shí)ASP語句是以""<%"為開始,以"%>"為結(jié)束的,且必須成對(duì)出現(xiàn).另外,由ASP默認(rèn)的腳本語言是VBScript(設(shè)置其它腳本語言稍后再談),你還應(yīng)該熟悉VBScript的基本語法.有了這些,建立一個(gè)簡單的ASP頁面應(yīng)該是沒有問題了.
  看看下面的一個(gè)頁面文件( test1.asp ):
<% rem test1.asp %>
<html>
<head>
<title>一個(gè)簡單的ASP頁面</title>
</head>
<body>
<p>
<h1>下面應(yīng)出現(xiàn)4行語句,字體大小從4到7</h1>
<% for i = 4 to 7 %>
<br><font size = <% =i %>>這行語句的字體大小為
<% =i %></font>
<% next %>
</p>
</body>
</html>
  其中,語句 <% =i %> 是將變量 i 的值輸出到HTML文件中.ASP用"<%=變量名%>"將指定變量的內(nèi)容輸出到其生成的HTML頁面中.
  由上可見,可以先設(shè)置制作一個(gè)普通的HTML頁面文件,然后在需要的地方插入ASP腳本語言即可.關(guān)鍵是熟練應(yīng)用ASP腳本語句.
  該頁面雖然簡單,卻可以幫助熟悉和理解ASP語法.可以用瀏覽器查看運(yùn)行效果,再用其查看源代碼的功能看一下源代碼,可以看對(duì)ASP頁面解釋后的HTML文件.注意必須用http的方式訪問ASP頁面,不能象HTML頁面文件那樣雙擊文件名以文件方式瀏覽.如在筆者的計(jì)算機(jī)上的訪問方式為 http://wangfajun/aspsamp/test1.asp

四 利用Request對(duì)象制作簡單的交互頁面
  ASP的內(nèi)建對(duì)象Request中包含了訪問者的一些申請(qǐng)信息.可以將這些信息作為某些應(yīng)用(如商業(yè)訂單信息)并對(duì)申請(qǐng)者的申請(qǐng)要求作出反饋.
  在我們的這個(gè)例子中,讀者會(huì)員資格注冊(cè)申請(qǐng)頁面要求申請(qǐng)者填寫其姓名全稱、身份證號(hào)碼、EMail地址.在收到讀者申請(qǐng)后通知其注冊(cè)成功.
  先做一個(gè)讀者會(huì)員資格注冊(cè)申請(qǐng)頁面,可以是HTML頁面或ASP頁面.這應(yīng)該不成問題.
<!-- apply.htm -->
<html>
<head>
<title>讀者會(huì)員資格注冊(cè)申請(qǐng)</title>
</head>

<body>
<H2>讀者會(huì)員資格注冊(cè)申請(qǐng)</H2>

<form method="post" action="result.asp">
<p>
姓名全稱: <input name="FullName" SIZE="20" value="姓名全稱">
<p>
身份證號(hào)碼: <input name="UniversalID" SIZE="15" value="888888888888888">
<p>
電子郵箱: <input name="Email" value="mailbox@yourcompany.com">
<p><input type=submit value="提交申請(qǐng)"><input type=reset value="重新填寫">
</form>

</body>
</html>

  在申請(qǐng)頁面中,所有的申請(qǐng)數(shù)據(jù)均填寫在Form元素中,并且在Form的Action中指定處理申請(qǐng)的頁面為result.asp.當(dāng)收到申請(qǐng)時(shí),對(duì)應(yīng)項(xiàng)目的數(shù)據(jù)可以由Request.Form("項(xiàng)目名稱")來獲得,其中"項(xiàng)目名稱"為Form元素的名稱,如"姓名全稱"對(duì)應(yīng)"FullName" ,如"身份證號(hào)碼"對(duì)應(yīng)"UniversalID" .現(xiàn)在利用這些信息來制作一個(gè)注冊(cè)成功的通知頁面Result.asp.
<% rem result.asp %>
<html>
<head>
<title>讀者會(huì)員資格注冊(cè)申請(qǐng)成功</title>
</head>

<body>
<p align="center"><H2><font color="green">讀者會(huì)員資格注冊(cè)申請(qǐng)成功</font></H2>

<p>親愛的<%=Request.Form("FullName")%>讀者:<br>
我們已經(jīng)收到你的申請(qǐng),并接受你的申請(qǐng).你已經(jīng)成為我部正式讀者會(huì)員.<br>你的讀者號(hào)為CN<%=Request.Form("UniversalID")%>.我們將通過你的電子信箱<%=Request.Form("Email")%><br>來正式通知你.此后我部舉行讀者沙龍活動(dòng)的時(shí)間和地點(diǎn)也將通過該信箱通知你.

</body>
</html>
  現(xiàn)在用瀏覽器打開申請(qǐng)頁面,填入對(duì)應(yīng)數(shù)據(jù)后提交申請(qǐng),查看反饋效果,再用瀏覽器的查看源代碼的功能看一下源代碼,可以看對(duì)ASP頁面解釋后的HTML文件.

五 通過內(nèi)建對(duì)象 Request 獲取用戶申請(qǐng)信息
  可以從 ASP 的內(nèi)建對(duì)象 Request 獲取用戶通過HTTP傳送過來的申請(qǐng)信息,如客戶認(rèn)證、Cookies數(shù)據(jù)、Post信息、查詢參數(shù)、服務(wù)器環(huán)境信息等,這些可以分別從對(duì)象 Request 的集合屬性ClientCertificate、Cookies、Form、QueryString、ServerVarables 中獲取,獲取方式為 Request.CollectionName( ItemString ),其中CollectionName為集合屬性名稱即
ClientCertificate、Form、QueryString、ServerVarables 中的一個(gè),ItemString 為要獲取的項(xiàng)目的名稱.如果可以確定沒有重復(fù)的項(xiàng)目名稱,也可直接以Request( ItemString )來獲取用戶信息,而不用指明集合屬性名稱.例如請(qǐng)求頁面中有一個(gè)Form元素CustomerID,且沒有其它元素名稱為CustomerID,則用Request.Form( "CustomerID" ) 與用Request.( "CustomerID" )
具有同樣的效果.
 、澹肦equest.Form獲取表格信息
1.ASP頁面可從一個(gè)HTML中獲取表格信息,只要將該表格的Action指定為對(duì)應(yīng)的ASP頁面即可.該項(xiàng)應(yīng)用可參見前面的列舉的讀者會(huì)員資格申請(qǐng)的例子.在該例子中,result.asp 從一個(gè)HTML中獲取表格信息并提供反饋信息.
2.ASP頁面可從另一個(gè)ASP頁面生成的HTML中獲取表格信息.具體運(yùn)作方式基本與從HTML頁面中獲取信息相同.
3.ASP頁面可從自己生成的HTML中獲取表格信息,只不過需要判斷該頁面是輸入頁面還是反饋頁面.在下面的例子中,login.asp 提供了一個(gè)用戶登錄頁面,要求用戶輸入登錄帳號(hào)和密碼,然后再通過Form的Action屬性將表格發(fā)送給自己進(jìn)行處理.在 login.asp 中,將根據(jù)帳號(hào)和密碼是否全為空來判斷是輸入頁面還是反饋頁面,并給予不同的提示,若是輸入則提示"用戶登錄,請(qǐng)輸入用戶帳號(hào)和密碼",否則顯示用戶帳號(hào)和密碼.
<% rem login.asp %>
<html>
<head>
<title>用戶登錄</title>
</head>

<body>
<% if isEmpty( Request.Form( "CustomerID" ) ) and isEmpty( Request.Form( "Password" ) ) then
PromptString = "用戶登錄,請(qǐng)輸入用戶帳號(hào)和密碼"
else
PromptString = "用戶"&Request.Form( "CustomerID" )&"登錄成功,密碼為"&Request.Form( "Password" )
end if
%>

<H2><% = PromptString %></H2>

<form method="post" action="login.asp">
<p>
用戶帳號(hào): <input name="CustomerID" value="">
<p>
用戶密碼: <input name="Password" value="">
<p><input type=submit value="開始登錄"><input type=reset value="重新登錄">
</form>

</body>
</html>


  ㈡.用Request.QueryString獲取用戶查詢參數(shù)信息
當(dāng)用戶以 xxxxx.asp?ParaName = ParaValue 的方式發(fā)出查詢請(qǐng)求時(shí),xxxxx.asp 可以從Request.QueryString("ParaName") 中獲取用戶提交的查詢參數(shù)ParaName的信息ParaValue,還可以從Request.QueryString("ParaName").count得知同一個(gè)參數(shù)被賦值的次數(shù)并進(jìn)行相應(yīng)的處理.
當(dāng)用戶以 query.asp?CustomerID=7777 的方式發(fā)出查詢請(qǐng)求時(shí),query.asp 可以從Request.QueryString("CustomerID") 中取得查詢參數(shù) CustomerID的值為 7777,Request.QueryString("ParaName").count 為 1.
當(dāng)用戶以 query.asp?CustomerID=7777&Password=DogIsDog 的方式發(fā)出查詢請(qǐng)求時(shí),query.asp 可以從Request.QueryString("CustomerID") 中取得查詢參數(shù) CustomerID 的值為 7777,從Request.QueryString("Password") 中取得查詢參數(shù) Password的值為 DogIsDog ,Request.QueryString("CustomerID").count 為 1,Request.QueryString("Password").count 為
1.
有時(shí)用戶可能對(duì)一個(gè)參數(shù)指定若干個(gè)值,此時(shí)可以從Request.QueryString("ParaName ").count 獲取該參數(shù)ParaName被指定的內(nèi)容的個(gè)數(shù),并以索引的方式來取得參數(shù)值.例如用戶希望查詢到三個(gè)客戶7777 、 8888 和 9999 的相關(guān)資料時(shí)就可能以下面的方式query.asp?CustomerID=7777&CustomerID=8888&CustomerID=9999 發(fā)出查詢請(qǐng)求,此時(shí)在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")可同時(shí)獲取三個(gè)參數(shù),各個(gè)之間參數(shù)用逗號(hào)隔開.
下面的例子(query.asp)用于獲取用戶指定的客戶帳號(hào),并顯示出來反饋給用戶.
<% rem query.asp %>
<html>
<head>
<title>用戶帳號(hào)</title>
</head>

<body>

<H2>您指定的客戶帳號(hào)如下</H2>
<%for i = 1 to Request.QueryString("CustomerID").count %>
<p>第<% = i %>個(gè)用戶帳號(hào):<% = Request.QueryString("CustomerID")( i ) %>
<%next%>
</body>
</html>

 、纾肦equest.ServerVariables獲取服務(wù)器環(huán)境信息
Request.ServerVariables 包含了請(qǐng)求HTTP服務(wù)的服務(wù)器的環(huán)境變量信息.由于應(yīng)用較少,現(xiàn)列出常用的幾個(gè).
Request.ServerVariables( "SERVER_PORT" ) : HTTP服務(wù)端口號(hào),一般為 80.
Request.ServerVariables( "HTTP_ACCEPT_LANGUAGE" ) : 服務(wù)器采用的語言,
"en"表示英文,"zh-cn"表示簡體中文.
Request.ServerVariables( "SERVER_NAME" ) : 服務(wù)器的名稱或IP地址
Request.ServerVariables( "REQUEST_METHOD" ) : 發(fā)出Request的方法
    (Post/Get/Head)
Request.ServerVariables( "SCRIPT_NAME" ) : 程序被調(diào)用的路徑及文件名稱
Request.ServerVariables( "REMOTE_HOST" ) : 發(fā)出Request的客戶端機(jī)器的名稱
Request.ServerVariables( "REMOTE_ADDR" ) : 發(fā)出Request的客戶端機(jī)器的IP地址
Request.ServerVariables( "REMOTE_IDENT" ) : 發(fā)出Request的用戶名稱,當(dāng)NCSA
IdentityCheck為True且客戶端機(jī)器支持RFC931時(shí)有效.
Request.ServerVariables( "CONTENT_TYPE" ) : 數(shù)據(jù)的MIME類型
Request.ServerVariables( "HTTP_ACCEPT" ) : 客戶端可接受的MIME類型列表.
Request.ServerVariables( "HTTP_USER_AGENT" ) : 發(fā)出Request的客戶瀏覽器類型
Request.ServerVariables( "HTTP_REFERER" ) : 在發(fā)出CGI程序之前,客戶所指的文本
URL

 、瑁肦equest.Cookies獲取用戶的Cookies信息
Cookies 可以服務(wù)器和客戶端之間雙向傳遞,它記錄了特定用戶的某些信息.利用Request.Cookies獲取用戶的Cookies信息.
如果請(qǐng)求用戶的Cookies為 Product=Floppy,則Request.Cookies("Product")的值為"Floppy";如果用戶發(fā)送的Cookies為多重信息即包含有下屬類型時(shí),則可采用類似查詢參數(shù)QueryString的多維方式獲得,此時(shí)可以用Request.Cookies(cookie)的屬性HasKey來判斷某個(gè)Cookie是否有下屬類型。如當(dāng)用戶的Cookies為 Product=Floppy&Floppy=Sony時(shí),屬性
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協(xié)議, 服務(wù)器端必須啟動(dòng)用戶端認(rèn)證,客戶端必須進(jìn)行相應(yīng)的設(shè)置.

六 通過內(nèi)建對(duì)象 Response 向用戶發(fā)送信息
  可以利用 ASP 的內(nèi)建對(duì)象 Response 很靈活地控制向客戶端發(fā)送的信息的內(nèi)容和方式.例如可以自動(dòng)轉(zhuǎn)向另一個(gè)URL頁面,可以改變頁面腳本的解釋方法,可以設(shè)置客戶的Cookie等
等.
  ㈠.利用Resopnse.Write 控制發(fā)送的信息內(nèi)容
方法 Response.Write 可以向發(fā)往客戶端瀏覽器的HTML文件中直接輸出內(nèi)容.這一點(diǎn)與利用主腳本的<% = 變量名 %>功能基本相同,但Resopnse.Write 的使用更為靈活,這體現(xiàn)在它作為一個(gè)方法函數(shù),可以在非主要腳本的函數(shù)中直接使用(調(diào)用時(shí)傳遞參數(shù)的方式遵守對(duì)應(yīng)腳本語言的規(guī)定),即可以出現(xiàn)在<script></script>之間向客戶輸出內(nèi)容,這一點(diǎn)是<% = 變量名
%>無法做到的,也是對(duì)其功能的一個(gè)補(bǔ)充吧.
在下面的例子中,selecolr.asp 要求用戶輸入一個(gè)顏色名稱,用戶確認(rèn)后將用戶申請(qǐng)發(fā)往同一個(gè)頁面selecolr.asp,然后用用戶指定的顏色將顏色名稱顯示出來.這里實(shí)現(xiàn)的功能可以用<% = 變量名 %>的方式來實(shí)現(xiàn).Response.Write 在函數(shù)中的應(yīng)用要涉及到函數(shù)調(diào)用,稍后會(huì)在討論多腳本語言編程時(shí)有例子出現(xiàn).
<% 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 進(jìn)行URL頁面重新定位
假如由于業(yè)務(wù)上的原因,你的站點(diǎn)的域名或IP地址發(fā)生了變化,就象Borland變成了Inprise一樣,老顧客在用原來的域名訪問時(shí),可以用 Response.Redirect 直接將其引導(dǎo)到新的站點(diǎn)上去;假如要求用戶在訪問本頁面前必須先訪問另外一個(gè)頁面,可用 Response.Redirect 直接將其引導(dǎo)到應(yīng)該去的頁面上去,而不是發(fā)出用戶無權(quán)訪問該頁面的信息.
值得注意的是,必須在向客戶端發(fā)送任何信息前使用 Redirect,否則會(huì)引起錯(cuò)誤.你可以在頁面的第一條語句將用戶引導(dǎo)另一個(gè)URL,也可以將 Response.Buffer 設(shè)置為 True 而在以后適當(dāng)?shù)臅r(shí)間將用戶引導(dǎo)另一個(gè)URL.
在下面的例子中,若用戶調(diào)用本頁面,則將其引導(dǎo)到另一個(gè)頁面 selecolr.asp.
<% rem redirect.asp %>
<%Response.redirect "selecolr.asp"%>
<html>
<head>
<title>重新定向</title>
</head>

<body>
<p> 你不可能進(jìn)入到本頁面,否則就是我的失敗.
</body>
</html>

 、纾 Response.ContentType 頁面內(nèi)容解釋方法
在HTML頁面代碼中,經(jīng)常會(huì)看見下面一個(gè)句子
<meta http-equiv="Content-Type" content="text/html">
其中,它用于指定HTML頁面被瀏覽器解釋的方式.當(dāng) content="text/html"時(shí),瀏覽器將代碼解釋為普通HTML頁面并顯示給用戶;當(dāng) content="text/plain" 時(shí),瀏覽器將代碼不加任何解釋地顯示給用戶;當(dāng) content = "image/jpeg"是傳遞圖形文件; 當(dāng)未指定時(shí),ContentType
默認(rèn)為 "text/html".在ASP頁面中,Response.ContentType 作用與普通HTML相同,即可以控制瀏覽器解釋HTML文本的方式。
在下面的例子中,plain.asp 將 Response.ContentType 設(shè)置為"text/plain",使用客戶
端用戶可以直接看到該頁面的HTML代碼.
<% rem plain.asp %>
<% Response.ContentType = Request.Form( "ContentTypeName" ) %>
<html>
<head>
<title>內(nèi)容類型設(shè)置</title>
</head>

<body>
<% if isEmpty( Request.Form( "ContentTypeName" ) ) then
Response.write "<H4>你只需選擇類型,我來顯示</H4>"
else
Response.write "<H1>內(nèi)容類型設(shè)置成功</H1>"
end if
%>

<form method="post" action="plain.asp">
<p>
內(nèi)容類型: <input name="ContentTypeName" value="text/html">
<p><input type=submit value="顯示吧"><input type=reset value="想重選">
</form>

</body>
</html>

 、瑁 Response.Cookies 設(shè)置客戶端Cookies
通過設(shè)置Response.Cookies可以增加或修改客戶端的Cookies,其設(shè)置方法與取得對(duì)應(yīng)Cookie的值的方法相同.當(dāng)要設(shè)置的Cookie不存在時(shí),將創(chuàng)建一個(gè)新的Cookie,其值為要設(shè)置的值;Cookie存在且沒有下屬類別時(shí),以新值代替原有的值;Cookie存在且有下屬類別時(shí),若要設(shè)置的Cookie不含下屬類別,則原有的下屬類別將被刪除,若含下屬類別且無對(duì)應(yīng)類別則創(chuàng)建新的下屬類別,有對(duì)應(yīng)類別則以新值代替原有的值.
在下面的例子中,cookie.asp 用來設(shè)置一個(gè)名稱為 wfj 的Cookie的值.調(diào)用時(shí)將顯示上次設(shè)置的Cookie(wfj)的值.由于設(shè)置Cookie值要在發(fā)送內(nèi)容之前,所以這里將Response.Buffer 設(shè)置為 true( 其原因見后 Response.Buffer 的說明 ).
<%rem cookie.asp %>
<%Response.Buffer = true%>
<html>
<head>
<title>Cookie設(shè)置</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) 已經(jīng)設(shè)置為 "&Request.Form( "CookieValue" )
Response.Write "<p>下次調(diào)用時(shí)你會(huì)看到的"
end if
Response.write "<p><hr><H4>你只需設(shè)置Cookie,我來顯示</H4>"
%>

<form method="post" action="cookie.asp">
<p>
Cookie設(shè)置: <input name="CookieValue" value="wangfajun">
<p><input type=submit value="設(shè)置吧"><input type=reset value="想重選">
</form>

</body>
</html>
 、椋 Response.Buffer 控制頁面發(fā)送進(jìn)度
Response.Buffer 的默認(rèn)值為 Flase,在這種情況下,服務(wù)器在處理對(duì)ASP頁面的請(qǐng)求時(shí),采用邊處理邊發(fā)送反饋的方式,即在處理完一部分腳本后即向客戶端發(fā)送反饋,這樣在處理耗時(shí)較長的ASP頁面時(shí),用戶不用等待很長時(shí)間就可以得到反饋,在用戶瀏覽的同時(shí)服務(wù)器繼續(xù)處理和發(fā)送反饋信息.當(dāng)Response.Buffer 為 True 時(shí),服務(wù)器在處理對(duì)ASP頁面的請(qǐng)求時(shí)使用緩沖技術(shù),在頁面所有的腳本處理結(jié)束后才將處理結(jié)果傳送給客戶端,這樣在處理耗時(shí)較長的ASP頁面時(shí),用戶需要等待較長的時(shí)間,而服務(wù)器端則可減少與客戶端連接的次數(shù)而提高整體響應(yīng)速度,并可以在滿足某種條件時(shí)撤消已經(jīng)處理的結(jié)果而不會(huì)出現(xiàn)響應(yīng)完成一部分才停止的狀況.
在下面的例子中,buffer.asp 可以根據(jù) BufferValue 的值來決定是否撤消反饋.當(dāng)輸入yes時(shí),用 Response.Clear 取消前面的反饋信息,用 Response.Redirect 將用戶引導(dǎo)到Cookie設(shè)置頁面,用 Response.End 停止反饋.
<% rem buffer.asp%>
<% Response.Buffer = true %>
<html>
<head>
<title>Buffer設(shè)置</title>
</head>

<body>
<% if isEmpty( Request.Form( "BufferValue" ) ) then
Response.write "<H4>你只需設(shè)置BufferValue,我來顯示</H4>"
else
Response.Write "BufferValue="&Request.Form( "BufferValue" )
end if
%>

<form method="post" action="buffer.asp">
<p>
是否撤消響應(yīng): <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屬性: 網(wǎng)頁在客戶端保留的時(shí)間長度
  2.ExpiresAbsolute屬性: 網(wǎng)頁在客戶端保留的日期與時(shí)間
 。常瓵ddHeader方法: 設(shè)定HTML文件的HTTP報(bào)頭.
 。矗瓵ppendToLog方法: 在服務(wù)器日志中增加字符串.
 。担瓼lush方法: 立刻送出緩沖區(qū)中的的HTML資料.

七 多種腳本語言混合編程
  在同一個(gè)ASP頁面中,可以同時(shí)使用多種腳本語言,充分利用各個(gè)腳本語言的功能優(yōu)勢.但必須指定一個(gè)主要腳本語言,若沒有指定則默認(rèn)為 VBScript.要在一個(gè)ASP頁面中指定其它腳本語言為主要腳本語言,必須在該頁面的第一行指定,方法如下:
<%@ Language = LanguageName %>
如果要將JScript指定為某頁面的主要腳本語言,則須在該頁面第一行加入:
<%@ Language = JScript %>
若沒有指定,則相當(dāng)于:
<%@ Language = VBScript %>
  應(yīng)注意,這種方法只對(duì)支持 Object.Method 語法的腳本語言有效,不支持的要在WinNT服務(wù)器上對(duì) LanguageEngines 進(jìn)行設(shè)置,由于筆者沒有用到,就不討論了.
  上述是改變單個(gè)ASP頁面中主要腳本語言,在改變所有ASP頁面中主要腳本語言,采用上述方法可能不夠聰明,最好是在WinNT服務(wù)器上對(duì) DefaultScriptLanguage 進(jìn)行設(shè)置,由于筆者沒有用到,就不討論了,還是用笨辦法吧.
  除了主要腳本語言外,還可在頁面的局部采用其它腳本語言來實(shí)現(xiàn)特定的功能.此時(shí)要用<Script>來實(shí)現(xiàn),具體方法如下:
<Script Language = LanguageName RunAt = Server>
....
功能實(shí)現(xiàn)部分
....
</Script>
其中,LanguageName 為腳本語言名稱,可以是VBScript、JScript、Perl 等服務(wù)器上已安裝的解釋引擎的腳本語言;Runat = Server 指定該段腳本在服務(wù)器運(yùn)行,以區(qū)別在客戶端瀏覽器運(yùn)行,因?yàn)槟J(rèn)是在客戶端瀏覽器運(yùn)行,所以該設(shè)置不能省略,否則對(duì)應(yīng)的腳本將發(fā)送到客戶端讓瀏覽器解釋運(yùn)行.
  在ASP頁面中,一般每種腳本完成一個(gè)完整的功能,然后用主要腳本語言進(jìn)行調(diào)用,調(diào)用
方法為<%Call Function%>.
  用<Script>方式編寫服務(wù)器端腳本時(shí)應(yīng)注意:
1.腳本語句必須作為某個(gè)函數(shù)的一部分出現(xiàn),而不能單獨(dú)出現(xiàn)在函數(shù)體之外.
2.不能使用輸出語句,如<% = 變量名 %>向生成的HTML頁面輸出.
3.編寫函數(shù)時(shí)不可再用<!--    -->來屏蔽,因?yàn)榉⻊?wù)器必須能解釋腳本,否則會(huì)引起錯(cuò)誤.  多種腳本語言混合使用時(shí)應(yīng)注意,要使用某種腳本語言,必須首先在服務(wù)器上安裝對(duì)應(yīng)的腳本語言解釋器.在 ASP 中已經(jīng)內(nèi)置了VBScript和JScript兩種腳本語言解釋器,故可不必安裝,但其它腳本語言則必須安裝后才能使用.
  下面是一個(gè)VBScript和JScript兩種腳本混合使用的例子,是上面例子query.asp的改寫.
<html>
<head>
<title>用戶帳號(hào)</title>
</head>

<Script Language = VBScript RunAt = Server>
Sub VBSQuery
       for i = 1 to Request.QueryString("CustomerID").count
Response.Write "<p>第"&i&"個(gè)用戶帳號(hào):"&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 + "個(gè)用戶帳號(hào):" + Request.QueryString("CustomerID")( i ));
      }
</Script>

<body>
<H2>VBScript :您指定的客戶帳號(hào)如下</H2>
<% Call VBSQuery %>
<H2>JScript :您指定的客戶帳號(hào)如下</H2>
<% Call JSQuery %>
<H2>主腳本 :您指定的客戶帳號(hào)如下</H2>
<%for i = 1 to Request.QueryString("CustomerID").count %>
<p>第<% = i %>個(gè)用戶帳號(hào):<% = Request.QueryString("CustomerID")( i ) %>
<%next%>
</body>
</html>

八 服務(wù)器端腳本和客戶端腳本混合編程
  當(dāng)使用<script></script>編寫一段腳本程序時(shí),如果沒有指定 Runat = Server,則認(rèn)為其中的腳本程序在客戶端執(zhí)行,此時(shí)可以在程序中混合使用服務(wù)器端主要腳本和客戶端腳本,這樣就可以根據(jù)客戶端的請(qǐng)求靈活地控制客戶端腳本的執(zhí)行,使對(duì)客戶的反饋更具有個(gè)性化.在混合使用時(shí),服務(wù)器端腳本要以<%%>的形式嵌入,以示區(qū)別.
  下面就是一個(gè)服務(wù)器端腳本和客戶端腳本混合編程的例子.在該例子中,將輸出10條記錄,并為每條記錄定制不同的函數(shù).
<html>
<head>
<title>服務(wù)器端腳本和客戶端腳本混合編程</title>
</head>
<body>
<H1>鼠標(biāo)移到各記錄上的【項(xiàng)目名稱】上時(shí),請(qǐng)注意狀態(tài)條內(nèi)容的變化</H1>
<table border = "1">
<tr><td>項(xiàng)目名稱</td><td>狀態(tài)條應(yīng)出現(xiàn)的內(nèi)容</td></tr>
<% for i = 1 to 10 %>
<tr>
      <td onmouseover = "Status<% =i %>()"><% =i %></td>
      <td>第<% =i %>條記錄出現(xiàn)了</td>
<tr>
<script language = JavaScript>
 <!--
      function Status<% =i %>()
{
    window.status = "第<% =i %>條記錄出現(xiàn)了";
}
 -->
</script>
<% next %>
</table>
</body>
</html>

九 增加注釋
  在編程時(shí)添加注釋是一個(gè)好的習(xí)慣.ASP 允許在頁面代碼中添加注釋.具體的注釋方法可參見各腳本語言的規(guī)則規(guī)定,如VBScript的注釋符號(hào)為 Rem 或 單引號(hào)" ' ",JScript的注釋符號(hào)為 雙斜杠"//".有一點(diǎn)要注意,就是在HTML輸出語句中不能添加注釋,如<p>當(dāng)前時(shí)間為<% =now '在HTML輸出當(dāng)前時(shí)間%>
即是無效的.

十 利用 Include 來實(shí)現(xiàn)功能模塊化
可以將常用的功能函數(shù)存于一個(gè)ASP文件,在其它ASP頁中要用其中的功能時(shí),將包含函數(shù)的ASP文件包含在調(diào)用函數(shù)的ASP文件中.這時(shí)可使用 Include 語句.具體語法為:
<!-- #include file="AspFileName" --> 或 <!-- #include Virtual="AspFileName" --> .
使用時(shí)應(yīng)該注意:
 。保<!-- include file >用于被包含的ASP文件的文件名為普通文件名,其中文件所在的目錄為實(shí)際目錄;而<!-- include virtual>用于被包含的ASP文件的文件名為虛擬文件名,其中文件所在的目錄為虛擬目錄.
  2.被包含文件的文件名稱不能使用ASP腳本變量,因?yàn)榘Z句是先于腳本語句被解釋和執(zhí)行的,此時(shí)文件名為無效文件名稱.如下面語句即為無效的:
  <% for i = 1 to 4
        AspFileName = "\aspsamp\Asp"&i&".asp"
       %>
<!-- include file=AspFileName -->
  <% next %>
 。常畱(yīng)避免自包含,即 File1 包含 File1;在多個(gè)文件中有包含語句時(shí),應(yīng)避免間接自包含即循環(huán)包含,如File1包含F(xiàn)ile2,F(xiàn)ile2包含F(xiàn)ile3,F(xiàn)ile3包含F(xiàn)ile1.
 。矗话哪_本語言的類型必須是默認(rèn)語言類型,即必須是主文件<%@ language%>語句中指定的腳本語言類型;被包含文件中不能使用<%@ language%>語句.
  5.可以使用 "../"來表示相對(duì)路徑.此時(shí)應(yīng)保證服務(wù)器端 EnableParentPaths 設(shè)置為 1,當(dāng)然在Win95上無法設(shè)置了.

  以上是學(xué)習(xí)和使用ASP創(chuàng)建動(dòng)態(tài)、交互式站點(diǎn)的一些入門知識(shí),有了這些基礎(chǔ)知識(shí),就可以發(fā)揮以前自己積累的編程經(jīng)驗(yàn),自己動(dòng)手學(xué)習(xí)和探索用ASP創(chuàng)建動(dòng)態(tài)、交互式站點(diǎn)的高級(jí)應(yīng)用了.歡迎大家將自己的學(xué)習(xí)所得發(fā)表出來,讓我們來共同分享你成功的喜悅;也歡迎大家寫信到 wangfajun@163.net 與筆者交流學(xué)習(xí)心得.



標(biāo)簽:ASP10步進(jìn)階