六月婷婷综合激情-六月婷婷综合-六月婷婷在线观看-六月婷婷在线-亚洲黄色在线网站-亚洲黄色在线观看网站

明輝手游網中心:是一個免費提供流行視頻軟件教程、在線學習分享的學習平臺!

ASP概覽

[摘要]1. ASP 1.1. 簡介 Microsoft® Active Server Pages (ASP) 是服務器端腳本環境,可用來創建交互式 Web 頁并建立強大的 Web 應用程序。我們可以采用VBScript和JScript來創建服務器端腳本,也可以內嵌到HTML中,使得編程更...

1. ASP

1.1. 簡介

Microsoft® Active Server Pages (ASP) 是服務器端腳本環境,可用來創建交互式 Web 頁并建立強大的 Web 應用程序。我們可以采用VBScript和JScript來創建服務器端腳本,也可以內嵌到HTML中,使得編程更為方便,同時可以調用COM組件(如訪問數據庫的ADO等),這樣ASP的功能可以無限地擴增。

服務器上安裝IIS后,可以訪問http://localhost/iishelp/來訪問關于IIS的幫助,其中涵蓋了ASP編程指南,所以我們僅對自學難點加以闡述,幫助您達到速成的目的。


(圖1.1-1)

ASP不是語言,它是一種環境,具體編程還需要使用VBScript、Jscript等腳本語言。本文示例中除非特殊說明,否則默認采用VBScript。

1.2. 內置對象

盡管在Microsoft提供的資料中會有其他的內置對象,但對于我們來說只要掌握Application、Session、Server、Request和Response五個對象就足夠了。學習前,首先對B/S模式作簡單介紹,B/S是瀏覽器(Browser)/服務器(Server)的縮寫形式,是一種特殊的客戶端(Client)/服務器(Server)模式,客戶端主要通過兩種方式訪問服務器,一種是發送URL地址到服務器,一種是通過已有的HTML頁面填寫表單提交到服務器;服務器需要做的就是根據得到的客戶端信息返回結果—通常就是HTML頁面。

如果您做過Socket開發和DLL開發,希望圖1.2-1能幫助你了解ASP。


可以不嚴格的說,ASP中全局內存訪問是通過Application對象實現的,服務器資源訪問是通過Server對象實現的(Server對象CreateObject方法可以創建COM對象,從而訪問更多服務器資源),客戶端代理中私有內存通過Session進行管理,接收的數據相對于服務器來說,就是客戶端的請求信息(Request對象),發送數據就是服務器對客戶端的響應(Response對象實現)。

注意:千萬不要總是徘徊在“為什么”中,“到底怎樣接收數據”,“到底怎樣發送數據”等等,這些過程不需要了解,你可以認為數據就是放在那里的。

1.2.1. Application對象

1.2.1.1. 集合

Application有兩個子集合Contents和StaticObjects,一般情況下StaticObjects能實現的事情通過Contents都可以實現,所以我們了解Contents就足夠了。

Contents集合中的內容相當于一個語言中的變量名與其值的對應。比如我想記錄所有在線人員的個數(UserCount),我們可以這樣賦值:

Application.Contents(“UserCount”)=0

或者

Application.Contents(“UserCount”)=Application.Contents(“UserCount”)+1

通常情況下,我們把Application.Contents(…)替換為Application(…),ASP中這是允許的。所以Application.Contents(“UserCount”)將變為Application(“UserCount”)。你可以把Application(“UserCount”)整個部分視為一個變量。

集合Contents有兩個方法:Remove及RemoveAll,通過字面即可理解含義,不再贅述。

1.2.1.2. 方法

Lock和Unlock是Application對象提供的兩個方法,由于Application使用的是公共的內存,當多個客戶端同時訪問時就必然會造成沖突,Lock和Unlock就很好的解決了這個問題,寫入Application變量前首先調用Application.Lock鎖定公共內存,等寫入完畢再調用Application.Unlock釋放鎖定,使你的程序很簡單就可以避免多用戶訪問的問題。

1.2.1.3. 事件

關于Application的事件Application_OnStart及Application_OnEnd請參照Global.asa節有關介紹。

1.2.1.4. 應用

Application對象的內容存放在公共內存區域中,對于所有客戶端代理而言皆是完全訪問的。公共的事物適合做公共的事情,比如計數器和一些公共對象。

1.2.2. Session對象

1.2.2.1. 集合

Contents和StaticObjects集合是Session中重要組成部分,可以通過調用Session.Contents,來定義Session級的變量,如Session.Contents(“UserLevel”),也可寫作Session(“UserLevel”),我們通常也把Session(“UserLevel”)這一部分作為一個變量看待。

其他略。

1.2.2.2. 屬性

常用的屬性有兩個,一個是SessionID,一個是Timeout。

SessionID在一次Web服務運行周期內,唯一標識一個客戶端。需要注意的是“一次服務運行周期”,如果重起Web服務,SessionID將極大可能與重起前某次的SessionID相同,所以千萬不要用SessionID作為數據庫表中主關鍵字。

Timeout表示在客戶端多長時間沒有刷新或發送請求后,服務器將認為其Session已結束,單位為“分鐘”,IIS5.0中默認為10分鐘。Session.Timeout時間后,將觸發Session_OnEnd事件。設置此屬性的根本原因是由于http協議造成的,每次瀏覽器向服務器發送請求后,就立即斷開,但服務器需要在一定時間內保留客戶端的連接信息,如果用戶超過一定時間(Timeout的值)沒有刷新,發送請求或者直接關閉了瀏覽器,服務器需要把這個客戶端的Session信息刪除。想象一下,如果Session信息用不刪除,服務器終究會內存不足,然后造成系統崩潰。這也是DoS攻擊的簡單原理。所以,Timeout屬性值的大小必須根據實際情況設置合適的值。

1.2.2.3. 方法

如果說設置Session.Timeout是為了被動的刪除沒有用的客戶端信息,Session.Abandon就是主動刪除沒有用的客戶端信息,且將主動觸發Session_OnEnd事件。在Internet中,用您自己的賬號登錄一個網站后,通常會有“退出登錄”的功能,而且網站一般都建議您通過點擊“退出登錄”來退出而不是簡單的關閉瀏覽器!巴顺龅卿洝蓖ǔ5膶崿F就是刪除當前賬號的登錄信息(可能包含數據庫中的信息或者存儲文件中的信息),以防被人盜用。

1.2.2.4. 事件

Session_OnStart和Session_OnEnd事件參見Global.asa節。

1.2.2.5. 應用

Session的特點就是私有性,所以開發者通常用來存放登錄用戶的私有信息,如權限、級別等信息。

1.2.3. Server對象

1.2.3.1. 屬性

Server對象僅有一個屬性ScriptTimeout,用來設置腳本的最長運行時間,否則將被中斷。設置單位為秒,默認值為90秒。

Server.ScriptTimeout與IIS管理對象中的元數據(Metabase)相互影響,其時間值將取兩者之間的最大值。

1.2.3.2. 方法

關于Execute和GetLastError方法請查閱相關資料。

1.2.3.2.1. CreateObject

ASP對于服務器的訪問能力幾乎全部從Server.CreateObject擴展,如對目錄文件系統的訪問,可以創建Scripting.FileSystemObject對象,如數據庫連接可以創建ADODB.Connection對象等等。當然您也可以開發自己的COM對象,比如加密、文件上載,或者隱藏的業務邏輯等等。

服務器組件中如果包含OnStartPage和OnEndPage的實現,那么創建服務器組件時OnStartPage將被執行。

例如,創建文件系統對象FileSystemObject:

Set fso = Server.CreateObject("Scripting.FileSystemObject")

‘然后就可以調用Com的任何方法或屬性了:

Set MyFile = fso.CreateTextFile("c:\testfile.txt", True)

MyFile.WriteLine("This is a test.")

MyFile.Close

Set MyFile = Nothing

Set fso = Nothing




現在,查看一下服務器的C盤根目錄下是否多了一個testfile.txt文件,打開后的文件內容見圖1.2.3.2.1-1:


1.2.3.2.2. HTMLEncode

HTMLEncode對給定的字符串進行HTML編碼,通常是結合Response對象使用。如果需要顯示HTML中的特殊字符,就需要進行編碼,比如“<”編碼為“&lt;”,空格符“ ”編碼為“&nbsp;”等等。

例如:

<%=Server.HTMLEncode("The paragraph tag: <P>") %>


輸出結果為:

The paragraph tag: &lt;P&gt;


瀏覽器解釋處理后,顯示::

The paragraph tag: <P>


1.2.3.2.3. MapPath

MapPath方法主要用來把服務器上的相對路徑或虛擬路徑轉化為絕對路徑。

調用方法:Server.MapPath(path)。

如果path中以“/”或“\”開始,則將path作為虛擬路徑的全路徑取結果返回。

1.2.3.2.4. Transfer

Session.Transfer將把當前ASP文件已經裝配的信息發送到另外的ASP中,并將結果組合輸出。

例如test.asp內容為:

<HTML><BODY><%

Dim sessvar1

Response.Write Session.SessionID

Response.Write ("<BR>")

Response.Write ("I am going to ASP2 <BR>")

Server.Transfer("test2.asp")

%>


Test2.asp的內容為:

<% Response.Write Session.SessionID %></BODY></HTML>


以上代碼中Response.Write為發送信息到瀏覽器,請查閱Response對象相關描述。通過URL訪問test.asp,將組合以下結果(鼠標右鍵單擊瀏覽器,然后查看源代碼):

<HTML><BODY>214636745<BR>I am going to ASP2

<BR>214636745</BODY></HTML>


在瀏覽器中顯示如圖1.2.3.2.4-1所示:


(圖1.2.3.2.4-1)



1.2.3.2.5. URLEncode

Server.URLEncode可以對一個字符串進行URL編碼,通常情況下我們用來組合一個鏈接,轉換其中的特殊字符(比如空格、漢字等)。

1.2.3.3. 應用

關于服務器資源的訪問,使用Server是當仁不讓。通過開發COM,通過Server.CreateObject調用,既掩蓋了業務邏輯,又充分發揮ASP環境的優勢。

1.2.4. Request對象

1.2.4.1. 集合

1.2.4.1.1. Cookies

如果對Web有所了解,就應該知道,在客戶端如果沒有特殊的ActiveX支持的話,客戶端的腳本不可能訪問客戶端資源。有些時候,我們希望用戶登錄一個網站后就記錄某些信息,比如以什么賬號登錄的,在關閉再打開瀏覽器后,這些信息依然存在,并且不需要再次登錄。這個時候可以利用瀏覽器管理的Cookies來簡單實現。

Cookies的資源空間很小,所以不可能把所有信息都存放到Cookies中,并且由于存放于客戶端,還會涉及到安全性的若干問題。

Request.Cookies(key)可以返回關于key的值,或者是一個字典(dictionary),如果需要判斷它返回的是值還是字典,可以通過調用Request.Cookies(key).HasKeys的返回值來判斷,True表示為字典,False表示為值。

<%=Request.Cookies("myCookie").HasKeys %>




1.2.4.1.2. Form

我們知道在HTML的標記中就有<form>標記,通常我們會看到這樣的HTML代碼:

<form method=”POST” action=”dologin.asp”>

<p align=”center”>賬號:<input type=”text” name=”LoginUser” /></p>

<p align=”center”>口令:<input type=”password” name=”LoginPWD” /></p>

<p align=”center”><input type=”submit” value=”提交”/>&nbsp;<input type=”reset” value=”重寫” /></p>

</form>


在網頁上顯示需要我們輸入賬號與密碼,然后點擊“提交”按鈕就會把數據提交到dologin.asp處理,這個時候dologin.asp中就可以通過調用Request.Form(“LoginUser”)與Request.Form(“LoginPWD”)來得到客戶端用戶輸入的相應賬號與口令。

您好,<%=Request.Form("LoginUser") %>,<br>

您輸入的口令為:<%= Request.Form("LoginPWD") %>。<br>


但是并非所有的<form>標記提交到服務器的都可以用Request.Form來得到相應的值,這還需要看<form>標記中method的值是否是”POST”,如果是則可以,否則不行。比如,method的值為”GET”,則等同于通過URL編碼來請求服務器頁面;假設在賬號只能中輸入了“test”,口令中輸入了“123”,則URL將為:

http://localhost/dologin.asp?LoginUser=test&LoginPWD=123


這個是否,服務器中則需要通過Request.QueryString來獲取相應LoginUser與LoginPWD的值了。



1.2.4.1.3. QueryString

Request.QueryString同Request.Form類似,如上節所述,如果<form>標記中method的值為”GET”或者通過地址來輸入URL,則用Request.QueryString來得到相應值。

URL中ASP腳本“?”后面部分為通過URL傳遞的數據部分,以符號“&”來分隔,每一部分鐘中,等號前面可以成為關鍵字(Key),等號后面的部分為相應的值,很多情況下,值這一部分是經過Server.URLEncode編碼后的,Request.QueryString得到相應的值時就已經自動解碼了,所以Server對象中根本不需要提供解碼函數。

比如上節中的URL,對應dologin.asp應該這樣實現:

您好,<%=Request.QueryString("LoginUser") %>,<br>

您輸入的口令為:<%= Request.QueryString("LoginPWD") %>。<br>




1.2.4.1.4. ServerVariables

ServerVariables集合用來返回所有已確定的環境變量的值。這些都是跟這次客戶端連接相關的變量。比如Request.ServerVariables(“LOCAL_ADDR”)返回服務器IP地址;Request.ServerVariables(“REMOTE_ADDR”)客戶端IP地址等等。詳細的列表說明請查看“http://localhost/iishelp/iis/htm/asp/vbob5vsj.htm”。

1.2.4.2. 屬性

1.2.4.2.1. TotalBytes

TotalBytes返回客戶端發送的請求主體的字節數。

通常情況下,TotalBytes屬性跟Request.BinaryRead方法結合使用,以得到客戶端發送來的二進制數據流。

1.2.4.3. 方法

1.2.4.3.1. BinaryRead

BinaryRead方法用來得到客戶端通過POST方法提交到服務器的數據,然后存放到SafeArray中。SafeArray是包含維數及范圍的數組。

注意,一旦您使用了BinaryRead方法,再使用Request.Form來獲取相應關鍵字變量的值就會出錯,Request.BinaryRead的使用方法如下:

<%

Dim vntPostedData, lngCount

lngCount = Request.TotalBytes

vntPostedData = Request.BinaryRead(lngCount)

%>






1.2.4.4. 應用

通過訪問Request對象,您可以得到客戶端代理得到客戶端的所有信息。

1.2.5. Response對象

1.2.6. 集合

1.2.6.1. Cookies

Response.Cookies用來向客戶端設置相應的Cookie,設置方法為:

<% Response.Cookies("myCookie") = "Hello World!" %>




1.2.7. 屬性

1.2.7.1. Buffer

Response.Buffer用來標識向客戶端發送的內容是否緩存,False為不緩存,True為緩存。IIS4.0及以下版本默認為False,IIS5中默認為True。

當Response.Buffer設置為緩存時,輸出內容一直等到整個ASP頁處理完畢,或者調用了Response.Flush或Response.End方法后才發送至客戶端。

1.2.7.2. Charset

Response.Charset用來向返回內容的頭部添加字符集信息,例如簡體中文字符集“GB2312”。

<% Response.Charset= "GB2312" %>




1.2.7.3. ContentType

Response.ContentType用來指出返回客戶端的內容類型,例如HTML類型“text/html”,純文本類型“text/plain”,JPEG圖片類型“image/JPEG”等等。

<% Response.ContentType = "image/JPEG" %>




1.2.7.4. Expires

Response.Expires指出當前網頁經過多少時間后網頁過期,單位“分鐘”。IIS會根據給出的過期數值添加到HTTP頭中。但由于服務器時間與客戶端時間的不一致,例如時區的原因,或者哪個出了問題,設置Response.Expires=0,將不會達到網頁立即過期的效果,相反您可以通過設置Response.ExpireAbsolute來達到立即過期的目的。更好的方式是設置Response.Expires為一個負數,例如:

<% Response.Expires=-1 %>


也可使網頁立即過期。



1.2.7.5. ExpiresAbsolute

Response.ExpiresAbsolute通過設置具體的日期和時間來達到過期的效果。如果僅指定日期而沒有指示時間,網頁將在指定日期的午夜12:00過期;如果僅指定時間而不指定日期,網頁將在腳本運行的當天那個時間過期。

<% Response.ExpiresAbsolute=#May 31,2004 11:11:11# %>


上例將使網頁在2004年5月31日11點11分11秒過期。

1.2.8. 方法

1.2.8.1. AddHeader

AddHeader方法可以在發送的HTTP數據中添加相應的頭信息。

下例將強迫客戶端使用基本驗證方式:

<% Response.Addheader "WWW-Authenticate", "BASIC" %>




1.2.8.2. BinaryWrite

Response.BinaryWrite將通過HTTP向客戶端發送二進制流。我們時常用它來提供軟件下載,組合圖片顯示等。

1.2.8.3. Clear

當Response.Buffer=True時,通過調用Response.Clear可以清除發送緩沖區中的所有內容。當Response.Buffer設置為False時,調用Response.Clear將出現錯誤。

1.2.8.4. End

通過調用Response.End可以終止當前服務器腳本的執行,并將結果發送客戶端。

1.2.8.5. Flush

Response.Flush將在Reponse.Buffer為True時發送緩沖區中的數據。如果Response.Buffer=False,調用Reponse.Flush將出錯。

1.2.8.6. Redirect

調用Reponse.Redirect將跳轉至另外的URL地址。如果已經發送HTML信息到客戶端,調用此方法將出現錯誤。下例將跳轉至“CSDN”:

<% Response.Redirect “http://www.csdn.net” %>




1.2.8.7. Write

Response.Write方法將發送指定字符串到客戶端。

<% Response.Write “Hello World!” %>




1.2.9. 應用

Reponse對象就是用來向客戶端發送信息的,它不僅可以發送一般的HTML信息,同樣,通過指定HTTP頭,或者設置Response.ContentType屬性,然后調用Response.BinaryWrite方法返回任何形式的內容,圖片、各種文檔等等。所以我們可以實現計數器、文件下載等,然后稍加結合我們還可以實現文件下載并計數,只有你想不到的,沒有你做不到的。

1.3. Global.asa文件

我們僅對Application和Session相應事件加以描述。

1.3.1. Application事件

1.3.1.1. Application_OnStart

當啟動Web服務后,第一個客戶端通過瀏覽器訪問您的網站時,將首先觸發Application_OnStart事件,因為這個時候可能需要您在公共內存區域中預先定義一些Application變量,或者預先訪問一些服務器資源。

<SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server>

Sub Application_OnStart

. . .

End Sub

</SCRIPT>




1.3.1.2. Application_OnEnd

由于您在Application_OnStart很有可能就聲明了Application變量來存儲COM對象等等,如同面向對象的編程一樣,您的網站的析構函數就是Application_OnEnd。當所有客戶端斷開連接并會話結束,將觸發Application_OnEnd。

<SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server>

Sub Application_OnEnd

. . .

End Sub

</SCRIPT>




1.3.2. Session事件

1.3.2.1. Session_OnStart

當客戶端連接上服務器時,服務器端必然需要創建新的客戶端代理來響應客戶端請求,創建新的客戶端代理后就會觸發Session_OnStart事件。

<SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server>
Sub Session_OnStart
. . .
End Sub



</SCRIPT>




1.3.2.2. Session_OnEnd

當客戶端調用的服務器腳本中顯式地調用了Session.Abandon方法或者客戶端超過了Session.Timeout的時間被動的會話終止,在會話終止前Session_OnEnd將被觸發。

<SCRIPT LANGUAGE=ScriptLanguage RUNAT=Server>
Sub Session_OnEnd
. . .
End Sub



</SCRIPT>




1.3.3. 應用

根據Application與Session事件的特點,我們可以初始化全局公共的Application變量,或者僅當前客戶端的私有環境變量。比如,我們可以通過一個Application變量Application(“ClientCount”)來記錄連接到服務器的客戶端總數,然后,每次Session_OnStart時,Application(“ClientCount”)增加一個,Session_OnEnd時,Application(“ClientCount”)減1,這樣就可以比較準確的記錄客戶端總數。

<Script Language=VBScript RUNAT=Server>

Sub Application_OnStart

Application(“ClientCount”)=0

‘其他代碼

End Sub



Sub Application_OnEnd

Application(“ClientCount”)=0 ‘僅為示范用,表示復原之意

‘其他代碼

End Sub



Sub Session_OnStart

Application.Lock

Application(“ClientCount”)=Application(“ClientCount”)+1

Application.UnLock

End Sub



Sub Session_OnEnd

Application.Lock

Application(“ClientCount”)=Application(“ClientCount”)-1

Application.UnLock

End Sub

</Script>


是的,就這么簡單。

1.4. 關于COM的簡單說明

由于ASP的功能主要通過COM來擴展,我們只好再啰嗦幾句,通過FSO的對象,可以實現基本的文件訪問;通過創建ADO我們可以訪問各式各樣的數據庫;通過MSXML我們實現XML的各種操作。它們的詳細幫助說明都包含各自得SDK中,MSDN也可以找到。

一個網站,關鍵在于您想怎么實現,思路很重要,剩余的就慢慢查閱資料吧。比如您可以創建一個XML架構的網站,通過組織數據為自定義的XML格式,然后以不同XSL實現不同的用戶客戶端,既可起到模版的作用,又可實現數據的過濾(不需要的東西,通過XSL的處理將不發送到客戶端)。關于最新的MSXML,請到微軟的站點下載。

1.5. 關于.Net

自從有了.Net以后,學習新語言的浪潮可謂一浪高過一浪,然而在應用一門新的語言前,人們首先應該強調的是語言的熟悉程度,發揮不了新語言的特長就沒有必要采用新的語言。

ASP.Net環境也是如此,如果您對DHTML、CSS、HTC、ASP、XML等等都非常熟悉,那么學習ASP.Net也會輕車熟路。不妨先學習學習ASP,畢竟它很簡單。




標簽:ASP概覽 
主站蜘蛛池模板: 综合久久久久久久 | 我要看黄色一级毛片 | 在线观看亚洲一区二区 | 亚洲人与牲动交xxxxbbbb | 天天看天天做 | 亚洲国产情侣偷自在线二页 | 日韩大片观看网址 | 淫片在线观看 | 午夜久久久久久亚洲国产精品 | 伊人资源 | 日本vs欧美一区二区三区 | 日日摸日日添日日透 | 五月婷婷精品 | 最新欧美精品一区二区三区不卡 | 在线黄色毛片 | 亚洲性免费 | 四虎精品成人免费观看 | 欧美特级视频 | 天天射天天干天天色 | 色四月婷婷 | 日韩一区二区三区不卡 | 小黄鸭b站视频 | 亚洲一区二区三区四区在线 | 深夜爽爽福利gif在线观看 | 午夜在线播放视频在线观看视频 | 欧美亚洲国产精品久久高清 | 天天色天天舔 | 青娱乐激情 | 中文字幕不卡免费高清视频 | 青草视频在线观看免费视频 | 亚洲欧美日韩综合久久久久 | 在线播放侵犯高傲女教师希崎 | 青青啪 | 最新欧美精品一区二区三区不卡 | 全黄大片| 青青青手机视频在线观看 | 奇米网狠狠网 | 午夜在线视频观看版 | 青青草偷拍视频 | 日本不卡高清视频 | 一本大道香蕉久97在线视频 |