本章介紹ASP開(kāi)發(fā)中常用到的一些基本知識(shí),包括對(duì)7個(gè)ASP內(nèi)置對(duì)象的介紹,以及在它們的使用過(guò)程中應(yīng)當(dāng)注意的問(wèn)題,使用ADO連接數(shù)據(jù)庫(kù)的基礎(chǔ)知識(shí)以及ADO連接不同數(shù)據(jù)庫(kù)的方法,常用SQL語(yǔ)句的使用方法,最后給出了在開(kāi)發(fā)中常用的一些模塊,使用這些模塊可以大大增強(qiáng)程序功能和加快開(kāi)發(fā)速度。本章作為開(kāi)發(fā)ASP時(shí)的一個(gè)參考,目的是提供一些比較全面和系統(tǒng)的知識(shí),以便讀者在開(kāi)發(fā)時(shí)可以隨時(shí)查閱。
ASP內(nèi)置對(duì)象是ASP的核心,ASP的主要功能都建立在些內(nèi)置對(duì)象的基礎(chǔ)之上。關(guān)于ASP內(nèi)置對(duì)象的介紹有很多資料,下面僅就與開(kāi)發(fā)關(guān)系最密切的知識(shí)做一重點(diǎn)介紹,并對(duì)在使用過(guò)程中容易出錯(cuò)的知識(shí)點(diǎn)給出詳細(xì)的解釋和說(shuō)明。讀者在開(kāi)發(fā)時(shí),最方便的參考資料還是IIS自帶的文檔或MSDN,因?yàn)閬?lái)自那里的信息才最權(quán)威,最真實(shí)。
下面分別介紹在IIS 5.1的文檔中,提到的ASP的7個(gè)內(nèi)置對(duì)象的功能。
可以使用 Application 對(duì)象在應(yīng)用程序的所有訪問(wèn)者間共享信息,此處的應(yīng)用程序與在IIS中所創(chuàng)建的一個(gè)應(yīng)用程序所對(duì)應(yīng)(如何創(chuàng)建應(yīng)用程序請(qǐng)參見(jiàn)第1章)。
可以使用 Request 對(duì)象來(lái)獲取客戶端傳來(lái)的任何信息。包括通過(guò) POST 方法或 GET 方法、cookies 以及客戶端證書(shū)從 HTML 表單傳遞的參數(shù)。通過(guò) Request 對(duì)象也可以訪問(wèn)發(fā)送到服務(wù)器的二進(jìn)制數(shù)據(jù),如文件上載。
可以使用 Response 對(duì)象來(lái)控制發(fā)送給客戶端的信息。這包括直接發(fā)送信息到瀏覽器、重定向?yàn)g覽器到其他URL或設(shè)置cookie值。
通過(guò)Server對(duì)象可以訪問(wèn)服務(wù)器上的方法和屬性。最常用的方法就是用來(lái)創(chuàng)建COM組件的Server.CreateObject方法。其他方法可對(duì)字符串應(yīng)用URL或HTML編碼、將虛擬目錄映射到物理路徑,以及設(shè)置腳本超時(shí)期間等。
可以使用Session對(duì)象來(lái)存儲(chǔ)特定會(huì)話(Session)所需的信息,當(dāng)一個(gè)客戶端訪問(wèn)服務(wù)器時(shí),就會(huì)建立一個(gè)會(huì)話。當(dāng)用戶在應(yīng)用程序不同頁(yè)面間跳轉(zhuǎn)時(shí),不會(huì)丟棄存儲(chǔ)在 Session 對(duì)象中的變量,這些變量在用戶訪問(wèn)應(yīng)用程序頁(yè)的整個(gè)期間都會(huì)保留??梢允褂?Session 對(duì)象來(lái)顯式結(jié)束會(huì)話并設(shè)置閑置會(huì)話的超時(shí)時(shí)限。
|
準(zhǔn)確地說(shuō),是服務(wù)器會(huì)對(duì)每一個(gè)獨(dú)立的瀏覽器建立一個(gè)會(huì)話,當(dāng)你分別啟動(dòng)兩個(gè)瀏覽器訪問(wèn)同一網(wǎng)址時(shí),就會(huì)在服務(wù)器端創(chuàng)建兩個(gè)不同的會(huì)話,但使用window.open等方法新開(kāi)的瀏覽器子窗口與其父窗口共享一個(gè)會(huì)話。 |
可以使用ObjectContext對(duì)象來(lái)提交或中止由ASP腳本啟動(dòng)的事務(wù)。
可以使用 ASPError 對(duì)象來(lái)捕捉 ASP 錯(cuò)誤并向用戶返回詳細(xì)的信息描述。
下面分別介紹每個(gè)對(duì)象的成員及其使用方法。
[NextPage]
Application對(duì)象通常用來(lái)實(shí)現(xiàn)以下功能。
l 存儲(chǔ)應(yīng)用程序級(jí)全局變量。
l 鎖定與解鎖全局變量。
l 網(wǎng)站計(jì)數(shù)器。
下面來(lái)看實(shí)現(xiàn)這些功能的具體方法。
Application對(duì)象包含的集合、方法和事件見(jiàn)表2-1。
表2-1 Application對(duì)象包含的集合、方法和事件
類 型 |
名 稱 |
說(shuō) 明 |
集合 |
Contents |
沒(méi)有使用<OBJECT>元素定義的存儲(chǔ)于Application 對(duì)象中的所有變量的集合。可以省略Contents直接訪問(wèn),如:Application("NumVisits") |
StaticObjects |
使用<OBJECT>元素定義的存儲(chǔ)于Application對(duì)象中的所有變量的集合 | |
方法 |
Contents.Remove |
通過(guò)傳入變量名來(lái)刪除指定的存儲(chǔ)于Contents中的變量 |
Contents.RemoveAll |
刪除全部存于Contents中的變量 | |
Lock |
鎖定在Application中存儲(chǔ)的變量,不允許其他客戶端修改,調(diào)用Unlock或本頁(yè)面執(zhí)行完畢后解鎖 | |
Unlock |
手動(dòng)解除對(duì)Application變量的鎖定 | |
事件 |
Application_OnStart |
聲明于global.asa中,應(yīng)用程序首次執(zhí)行時(shí)觸發(fā) |
Application_OnEnd |
聲明于global.asa中,應(yīng)用程序結(jié)束時(shí)觸發(fā) |
|
(1)在Application對(duì)象中存儲(chǔ)對(duì)象時(shí),仍要用Set關(guān)鍵字,使用時(shí)可以直接用Application對(duì)象調(diào)用其方法。如: Set Application("myObj") = Server.CreateObject("MyComponent") Application("myObj").myMethod (2)調(diào)用Lock方法的效果是累計(jì)的,即調(diào)用幾次Lock方法,需要對(duì)應(yīng)調(diào)用幾次Unlock方法來(lái)解鎖,如果調(diào)用UnLock方法次數(shù)小于Lock方法次數(shù),則存儲(chǔ)于Application對(duì)象中的變量仍處于鎖定狀態(tài),當(dāng)然,當(dāng)此頁(yè)面執(zhí)行完畢后,會(huì)自行解鎖。 |
Application對(duì)象的應(yīng)用比較簡(jiǎn)單,在程序設(shè)計(jì)時(shí)使用得也相對(duì)比較少,關(guān)于它的使用方法參見(jiàn)例程2-1。
例程2-1 Application對(duì)象的使用范例
<%
'在Application對(duì)象中存儲(chǔ)字符串和數(shù)字
Application("greeting") = "Welcome to My Web World!"
Application("num") = 25
'在Application對(duì)象中存儲(chǔ)數(shù)組及使用方法
Dim MyArray(5)
MyArray(0) = "hello"
MyArray(1) = "some other string"
Application("StoredArray") = MyArray
'使用數(shù)組,需要先取出來(lái)后,再用下標(biāo)引用
LocalArray = Application("StoredArray")
LocalArray(1) = " there"
'在Application中存儲(chǔ)對(duì)象(MyComponent對(duì)象為虛構(gòu)對(duì)象)
Set Application("myObj") = Server.CreateObject("MyComponent")
'直接用Application對(duì)象調(diào)用某一對(duì)象的方法
Application("myObj").myMethod
'取出對(duì)象后再調(diào)用其方法
Set MyLocalObj = Application("myObj")
MyLocalObj.myMethod
'對(duì)Application中變量的鎖定與解鎖
Application.Lock
Application("NumVisits") = Application("NumVisits") + 1
Application("datLastVisited") = Now()
Application.Unlock
%>
Application對(duì)象雖然使用簡(jiǎn)單,但在使用時(shí),仍要注意一些常犯的錯(cuò)誤,下面列舉幾種比較典型的錯(cuò)誤使用方法。
如下語(yǔ)句是錯(cuò)誤的:
<%
Set Application("var1") = Session
Set Application("var2") = Request
……
%>
如下語(yǔ)句是錯(cuò)誤的:
<% Application("StoredArray")(3) = "new value" %>
在沒(méi)有講ADO的使用時(shí),談這個(gè)似乎有些過(guò)早,而且這樣做也不會(huì)導(dǎo)致編譯和執(zhí)行錯(cuò)誤,但卻對(duì)數(shù)據(jù)庫(kù)操作的效率有十分有害的影響。因?yàn)樽尪鄠€(gè)客戶端共用一個(gè)數(shù)據(jù)庫(kù)連接,固然節(jié)省了資源,但當(dāng)用戶數(shù)稍多之后數(shù)據(jù)庫(kù)連接必然會(huì)成為整個(gè)應(yīng)用程序的瓶頸,比較好的解決辦法是使用數(shù)據(jù)庫(kù)連接池來(lái)實(shí)現(xiàn),詳細(xì)方法參見(jiàn)關(guān)于ADO的介紹和對(duì)數(shù)據(jù)庫(kù)連接優(yōu)化的部分。
[NextPage]
Request對(duì)象通常用來(lái)實(shí)現(xiàn)以下功能。
l 讀取網(wǎng)址參數(shù)。
l 讀取表單傳遞的數(shù)據(jù)。
l 讀取Cookie的數(shù)據(jù)。
l 讀取服務(wù)器環(huán)境變量。
l 上傳文件。
下面來(lái)看實(shí)現(xiàn)這些功能的具體方法。
Request對(duì)象包含的集合、屬性和方法見(jiàn)表2-2。
表2-2 Request對(duì)象包含的集合、屬性和方法
|
類 型 |
名 稱 |
說(shuō) 明 |
|
集合 |
ClientCertificate |
客戶證書(shū)集合 |
|
Cookies |
客戶發(fā)送的所有Cookies值的集合 | |
|
Form |
客戶提交的表單(Form)元素的值,變量名與表單中元素的name屬性一致 | |
|
QueryString |
URL參數(shù)中的值,如果Form的Method屬性設(shè)為“GET”,則會(huì)把所有的Form元素名稱和值自動(dòng)添加到URL參數(shù)中 | |
|
ServerVariables |
預(yù)定義的服務(wù)器變量 | |
|
屬性 |
TotalBytes |
客戶端發(fā)送的HTTP請(qǐng)求中Body部分的總字節(jié)數(shù) |
方法 |
BinaryRead(count) |
從客戶端提交的數(shù)據(jù)中獲取count字節(jié)的數(shù)據(jù),返回一個(gè)無(wú)符號(hào)型的數(shù)組 | |
|
(1)如果要查詢的變量在以上5個(gè)集合中都不存在,則返回空(EMPTY)。 (2)在以上5個(gè)集合中查找變量值時(shí),雖然可以省略集合名,直接用Request(variable)來(lái)獲取變量值,但MS以及其他專業(yè)人士強(qiáng)烈反對(duì)這種做法,因?yàn)檫@會(huì)使查詢效率降低,而且會(huì)由于變量重名而帶來(lái)讓人費(fèi)神的邏輯錯(cuò)誤,建議在查詢時(shí)指明集合名稱。例如: 推薦: Request.Form ("username") 反對(duì): Request.(" username") 如果非要使用省略集合名稱的方法,當(dāng)一個(gè)變量在不止一個(gè)集合中存在時(shí),那么服務(wù)器要找到并返回這個(gè)變量就要在全部集合中檢索,對(duì)于集合的自動(dòng)檢索順序是: l QueryString l Form l Cookies l ClientCertificate l ServerVariables (3)使用Request.Form時(shí)有兩個(gè)局限性:其一是只能接收小數(shù)據(jù)量的數(shù)據(jù),具體為當(dāng)由Form提交的數(shù)據(jù)字節(jié)數(shù)大于100KB時(shí),便無(wú)法使用Request.Form了;其二是Request.Form與Request.BinaryRead不能同時(shí)使用,否則會(huì)發(fā)生錯(cuò)誤。 |
關(guān)于Reguest對(duì)象的使用方法參見(jiàn)例程2-2。
例程2-2 Reguest對(duì)象的使用范例
<%
'使用ClientCertificate的范例,注:由于ClientCertificate使用較少,
'而且內(nèi)容比較煩瑣,在此只做簡(jiǎn)單介紹,讀者可以參考IIS 5.1文檔,查看其具體用法
strIssuer = Request.ClientCertificate("Issuer")
strSubject = Request.ClientCertificate("Subject")
'Cookeis的簡(jiǎn)單使用方法
strMyCookie = Request.Cookies("myCookie")
'例如對(duì)這樣的URL:http://localhost/login.ASP?username=admin&key=AKgHmOLU
'使用Request.QueryString方法
strUserName = Request.QueryString("username")
strKey = Request.QueryString("key")
'例如對(duì)這樣的URL:http://localhost/login.ASP,該URL沒(méi)有參數(shù)
'使用Request.Form方法
strUserName = Request.Form("username")
strPassword = Request.Form("password")
strKey = Request.Form("key")
'Request.ServerVariables的參數(shù)有幾十個(gè)服務(wù)器環(huán)境變量可以使用,
'下面用REMOTE_ADDR來(lái)獲得客戶端的IP
strIP = Request.ServerVariables(REMOTE_ADDR)
%>
Request對(duì)象使用時(shí)一般出現(xiàn)語(yǔ)法性錯(cuò)誤的情況比較少,更多的情況是如何合理使用它來(lái)提高應(yīng)用程序效率。在MSDN中的一篇名為“25+ ASP Tips to Improve Performance and Style”的文章中,給出了28條優(yōu)化ASP性能的建議,其中有一條是關(guān)于Request對(duì)象優(yōu)化的,大致思想如下。
(1)盡量不要使用服務(wù)器變量。
訪問(wèn)服務(wù)器變量會(huì)使 Web 站點(diǎn)向服務(wù)器發(fā)出一個(gè)特殊請(qǐng)求,并收集所有服務(wù)器變量,而不只是所請(qǐng)求的那個(gè)變量。所以第一次請(qǐng)求服務(wù)器變量時(shí),就會(huì)使性能受到影響。后面再對(duì)其他服務(wù)器變量的請(qǐng)求,則不會(huì)對(duì)性能產(chǎn)生影響。
(2)避免使用非限定的Request對(duì)象。
這個(gè)前面已經(jīng)提到,建議使用集合名稱來(lái)查詢對(duì)象,而不要使用類似Request("Data")的形式。
[NextPage]
Response對(duì)象通常用來(lái)實(shí)現(xiàn)以下功能。
l 輸出內(nèi)容到網(wǎng)頁(yè)(客戶端)。
l 網(wǎng)頁(yè)重定向(盡量使用Server.Transfer代替它)。
l 寫入Cookie。
l 下載文件。
下面來(lái)看實(shí)現(xiàn)這些功能的具體方法。
Response對(duì)象包含的集合、屬性和方法見(jiàn)表2-3。
表2-3 Response對(duì)象包含的集合、屬性和方法
類 型 |
名 稱 |
說(shuō) 明 |
集合 |
Cookies |
設(shè)置客戶端Cookie的值,如果指定名稱不存在,則創(chuàng)建之,如果存在,則更新它的值 |
(續(xù)表)
類 型 |
名 稱 |
說(shuō) 明 |
屬性 |
Buffer |
是否啟用緩存,此句必須放在ASP文件的第一行。啟用Buffer之后,只有所有腳本執(zhí)行完畢后才會(huì)向客戶端輸出 |
CacheControl |
設(shè)置代理服務(wù)器是否可以緩存ASP,以及緩存的級(jí)別 | |
Charset |
設(shè)置字符集,如簡(jiǎn)體中文為“gb2312”,與在網(wǎng)頁(yè)中的meta段寫charset=gb2312具有相同作用 | |
CodePage |
表示消息正文所使用的代碼頁(yè),例如簡(jiǎn)體中文是936 | |
ContentType |
設(shè)置HTTP內(nèi)容類型,如“text/html” | |
Expires |
設(shè)置或返回一個(gè)頁(yè)面緩存在瀏覽器中的有效時(shí)限,以分鐘計(jì)算 | |
ExpiresAbsolute |
設(shè)置頁(yè)面緩存在瀏覽器中到期的絕對(duì)時(shí)間 | |
IsClientConnected |
判斷客戶端是否已經(jīng)斷開(kāi)連接 | |
LCID |
設(shè)定或獲取日期、時(shí)間或貨幣的顯示格式 | |
Status |
設(shè)置服務(wù)器的返回狀態(tài),以一個(gè)三位數(shù)加簡(jiǎn)要說(shuō)明的格式, 如Response.Status = "401 Unauthorized" | |
方法 |
AddHeader(HeaderName, HeaderValue) |
向HTTP頭中加入額外的信息,其中HeaderName可以重復(fù),信息一但加入,無(wú)法刪除 |
AppendToLog |
向Web 服務(wù)器手動(dòng)加入一條日志 | |
BinaryWrite |
向HTTP輸出流中寫入不經(jīng)過(guò)任何字符轉(zhuǎn)換的數(shù)據(jù),用于各客戶端傳送圖片或下載文件 | |
Clear |
清空緩存 | |
End |
停止處理ASP文件,直接向客戶端輸入現(xiàn)在的結(jié)果 | |
Flush |
向客戶端立即發(fā)送緩存中的內(nèi)容 | |
Redirect |
向?yàn)g覽器發(fā)送一個(gè)重定向的消息,瀏覽器接收到此消息后重定向到指定頁(yè) | |
Write |
向HTTP輸出流中寫入一個(gè)字符串 |
|
(1)為讓網(wǎng)站國(guó)際化,建議顯式設(shè)置Codepage屬性。系統(tǒng)查找CodePage的順序是: l Response.CodePage。 l Session.CodePage。 l 頁(yè)面@CodePage指令。 l 虛擬目錄設(shè)置Metabase屬性AspCodePage。 l 以上都沒(méi)有設(shè)置時(shí),取默認(rèn)值A(chǔ)NSI。 (2)在調(diào)用Response.End時(shí),會(huì)自動(dòng)調(diào)用Response.Flush,將緩存中現(xiàn)有內(nèi)容向客戶端發(fā)送,如果不希望這樣做,可以先調(diào)用Response.Clear清空緩存。 (3)注意Response.Redirect只是向?yàn)g覽器發(fā)送一個(gè)重定向的消息,瀏覽器根據(jù)消息中的URL再次向服務(wù)器發(fā)出新的請(qǐng)求,因此瀏覽器與服務(wù)器之間存在兩次往返,降低了效率并加長(zhǎng)了用戶的等待時(shí)間,建議使用Server.Transfer,它的功能是直接將處理移交到另一頁(yè),而不需要瀏覽器再次發(fā)送請(qǐng)求。 |
Response對(duì)象的屬性和方法較多,但最常使用的卻比較集中,下面僅就其中使用率最高的幾個(gè)屬性和方法做簡(jiǎn)要示范,如例程2-3所示。
例程2-3 Response對(duì)象的使用范例
<%
'使用緩存
Response.Buffer = True
'設(shè)置字符集
Response.CharSet = "gb2312"
'設(shè)置代碼頁(yè)
Response.CodePage = 936
'設(shè)置文檔類型
Response.ContentType = "text/HTML"
'設(shè)置緩存過(guò)期時(shí)間,如果設(shè)為-1,則立即過(guò)期
Response.Expires = -1
'用IsClientConnected判斷客戶端是否仍連接
If Response.IsClientConnected Then
'獲取SessionID
SessionID = Session.SessionID
Response.Write "SessionID=" & SessionID & "<br>"
End If
'向客戶端輸入信息
Response.Write "這是一個(gè)演示Respose對(duì)象用法的例程式"
'注意:?jiǎn)⒂孟旅鎯删浜罂蛻舳藢⒌貌坏饺魏涡畔?/P>
'Response.Clear()
'Response.End()
%>
Response對(duì)象的屬性和方法雖然很多,但在使用時(shí)一般不容易出錯(cuò),而涉及更多的是如何優(yōu)化的問(wèn)題。下面就初學(xué)者常犯的錯(cuò)誤與注意事項(xiàng)加以說(shuō)明,詳細(xì)的優(yōu)化方法請(qǐng)參考本書(shū)第3章“創(chuàng)建高性能的ASP應(yīng)用程序”中的內(nèi)容。
(1)在向客戶端輸出部分內(nèi)容后不能再調(diào)用Response.Redirect方法。
在IIS 5.0中雖然默認(rèn)緩沖是打開(kāi)的,但如果在這之前執(zhí)行了Response. Buffer =False或Response.Flush語(yǔ)句之后,再調(diào)用Response.Redirect方法,將會(huì)出錯(cuò),因?yàn)镽esponse.Flush會(huì)將緩沖中的現(xiàn)有數(shù)據(jù)向客戶端輸出。
(2)當(dāng)輸出較多時(shí),適時(shí)使用Flush方法。
因?yàn)殡m然緩沖可以在整體上加快ASP處理速度,但在緩沖內(nèi)容輸出之前,也會(huì)造成客戶端沒(méi)有任何跡象的等待,當(dāng)輸出內(nèi)容較多時(shí)此問(wèn)題尤為嚴(yán)重,所以在適當(dāng)?shù)臅r(shí)候向客戶端輸出一些內(nèi)容是有必要的。
(3)盡可能使用Server.Transfer代替Response.Redirect。
這個(gè)原因前面已經(jīng)說(shuō)過(guò)了,請(qǐng)參見(jiàn)Response對(duì)象。
(4)使用CodePage使你的網(wǎng)站走向國(guó)際化。
[NextPage]
Server對(duì)象通常用來(lái)實(shí)現(xiàn)以下功能。
l 創(chuàng)建組件實(shí)例。
l 獲取服務(wù)器的物理路徑。
l 對(duì)字符串進(jìn)行HTML編碼。
l 轉(zhuǎn)向執(zhí)行其他ASP文件。
下面來(lái)看實(shí)現(xiàn)這些功能的具體方法。Server對(duì)象包含的屬性和方法見(jiàn)表2-4。
表2-4 Server對(duì)象包含的屬性和方法
類 型 |
名 稱 |
說(shuō) 明 |
屬性 |
ScriptTimeout |
設(shè)置腳本超時(shí)。當(dāng)一個(gè)ASP頁(yè)面在一個(gè)腳本超時(shí)期限之內(nèi)仍沒(méi)有執(zhí)行完畢,ASP將終止執(zhí)行并顯示超時(shí)錯(cuò)誤 |
方法 |
CreateObject |
創(chuàng)建一個(gè)服務(wù)器組件的實(shí)例,如果此組件中實(shí)現(xiàn)了OnStartPage 和 OnEndPage方法,那么在調(diào)用CreateObject創(chuàng)建實(shí)例時(shí)將會(huì)執(zhí)行OnStartPage方法 |
Execute |
用來(lái)執(zhí)行一個(gè)ASP文件,被執(zhí)行的ASP文件被看做是當(dāng)前調(diào)用Execute方法的ASP文件的一部分 | |
GetLastError |
返回一個(gè)ASPError對(duì)象,用來(lái)描述錯(cuò)誤的詳細(xì)信息。值得注意的是,必須向客戶端發(fā)送一些數(shù)據(jù)后這個(gè)方法才會(huì)起作用 | |
HTMLEncode |
將輸入的HTML字符串換為HTML編碼,如輸入“<p>”,輸出“<P>” | |
MapPath |
將虛擬路徑映射為絕對(duì)路徑。如使用Access數(shù)據(jù)庫(kù)時(shí),為防止下載,將其放在站點(diǎn)應(yīng)用程序之外,然后通過(guò)此方法找到數(shù)據(jù)庫(kù)在服務(wù)器上的絕對(duì)路徑 | |
Transfer |
停止執(zhí)行此ASP文件,轉(zhuǎn)向執(zhí)行另外一個(gè)ASP文件。如想用此方法代替Response.Redirect方法,需要在調(diào)用Transfer方法前調(diào)用Response.Clear清空緩存 | |
URLEncode |
將輸入的字符串進(jìn)行URL編碼,如輸入“http://www.trfsoft.com”,輸出“http%3A%2F%2Fwww%2Etrfsoft%2Ecom” |
|
(1)Execute和Transfer方法都不會(huì)清空當(dāng)前頁(yè)面向緩沖輸出的內(nèi)容而直接轉(zhuǎn)向執(zhí)行另一頁(yè),不同的是,Execute執(zhí)行完后會(huì)返回繼續(xù)執(zhí)行下面的語(yǔ)句,而Transfer會(huì)完全放棄它下面的語(yǔ)句。 (2)這里最常用的是CreateObject和MapPath兩個(gè)方法。 |
Session對(duì)象通常用來(lái)實(shí)現(xiàn)以下功能。
l 存儲(chǔ)與某次訪問(wèn)相關(guān)的信息。
l 設(shè)置這個(gè)訪問(wèn)的代碼頁(yè),日期格式等。
l 處理訪問(wèn)開(kāi)始與結(jié)束事件。
下面來(lái)看實(shí)現(xiàn)這些功能的具體方法。Session對(duì)象包含的集合、屬性、方法和事件見(jiàn)表2-5。
表2-5 Session對(duì)象包含的集合、屬性、方法和事件
類 型 |
名 稱 |
說(shuō) 明 |
集合 |
Contents |
使用腳本命令(賦值語(yǔ)句)向Session中存儲(chǔ)的數(shù)據(jù),可以省略Contents而直接訪問(wèn),如:Session("var") |
StaticObjects |
使用<OBJECT>標(biāo)記定義的存儲(chǔ)于Session對(duì)象中的變量集合。運(yùn)行期間不能刪除 | |
屬性 |
CodePage |
設(shè)置當(dāng)前Session的代碼頁(yè),參見(jiàn)Response對(duì)象的CodePage屬性 |
LCID |
設(shè)定當(dāng)前Session的日期、時(shí)間或貨幣的顯示格式,參見(jiàn)Response的LCID屬性 | |
SessionID |
返回Session的唯一標(biāo)識(shí) | |
Timeout |
設(shè)置Session的超時(shí)時(shí)間,以分鐘為單位,在IIS中默認(rèn)設(shè)置為20分鐘 | |
方法 |
Abandon |
當(dāng)ASP文件執(zhí)行完畢時(shí)釋放Session中存儲(chǔ)的所有變量,當(dāng)下次訪問(wèn)時(shí),會(huì)重新啟動(dòng)一個(gè)Session對(duì)象。如果不顯式調(diào)用此方法,只有當(dāng)Session超時(shí)時(shí)才會(huì)自動(dòng)釋放Session中的變量 |
Contents.Remove |
刪除Contents集合中的指定變量 | |
Contents.RemoveAll |
刪除Contents集合中的全部變量 | |
事件 |
Session_OnEnd |
聲明于global.asa中,客戶端首次訪問(wèn)時(shí)或調(diào)用Abandon后觸發(fā) |
Session_OnStart |
聲明于global.asa中,Session超時(shí)或者調(diào)用Abandon后觸發(fā) |
|
(1)Session.Abandon調(diào)用后,在本ASP頁(yè)內(nèi)存儲(chǔ)于Session中的變量仍可以使用,直到下一次請(qǐng)求,即訪問(wèn)下一個(gè)ASP頁(yè)面時(shí)才會(huì)生效,此時(shí)SessionID值已改變,并且會(huì)再次執(zhí)行Session_OnStart過(guò)程。在Session.Abandon后調(diào)用Server.Execute和Server.Transfer時(shí),由于是發(fā)生在同一次請(qǐng)求中,所以Session中的變量仍有效。 (2)Contents.RemoveAll方法用于刪除Contents集合中的全部變量,它的作用效果是即時(shí)的,并且不會(huì)放棄(Abandon)當(dāng)前Session對(duì)象,即下次請(qǐng)求時(shí)SessionID不變。 (3)Session對(duì)象常使用的是變量的存取,如Session("UserName") = strName。 |
ObjectContext對(duì)象通常用來(lái)實(shí)現(xiàn)以下功能。
l 放棄一個(gè)事務(wù)。
l 接受一個(gè)事務(wù)。
下面來(lái)看實(shí)現(xiàn)這些功能的具體方法。ObjectContext對(duì)象包含的方法和事件見(jiàn)表2-6。
表2-6 ObjectContext對(duì)象包含的方法和事件
類 型 |
名 稱 |
說(shuō) 明 |
方法 |
SetAbort |
放棄當(dāng)前事務(wù) |
SetComplete |
此方法只是說(shuō)明可以接受此事務(wù),不必放棄,并不是立刻接受此事務(wù)。只有當(dāng)前文件執(zhí)行完畢,或者所有參與此事務(wù)的組件都調(diào)用SetComplete,才接受此事務(wù) | |
事件 |
OnTransactionAbort |
放棄此事務(wù)時(shí)觸發(fā)此過(guò)程 |
OnTransactionCommit |
接受此事務(wù)時(shí)觸發(fā)此過(guò)程 |
|
(1)某個(gè)ASP頁(yè)面欲使用這種事務(wù)機(jī)制,或者說(shuō)要使用ObjectContext,需要在文件的開(kāi)頭加上<%@ Transaction = Required %>。 (2)只要調(diào)用一次ObjectContext.SetAbort,就可以放棄此事務(wù)。 (3)一般不用顯式調(diào)用SetComplete,因?yàn)锳SP默認(rèn)是如果沒(méi)有調(diào)用SetAbort,則執(zhí)行完此ASP文件即接受事務(wù)。 (4)OnTransactionAbort過(guò)程與OnTransactionCommit過(guò)程要與上述事務(wù)放在同一個(gè)文件中。 |
ASPError對(duì)象通常用來(lái)實(shí)現(xiàn)以下功能:
處理ASP應(yīng)用的錯(cuò)誤。
下面來(lái)看實(shí)現(xiàn)這個(gè)功能的具體方法。ASPError對(duì)象包含的屬性見(jiàn)表2-7。
表2-7 ASPError對(duì)象包含的屬性
類 型 |
名 稱 |
說(shuō) 明 |
屬性 |
ASPCode |
返回錯(cuò)誤代碼 |
Number |
返回COM標(biāo)準(zhǔn)的錯(cuò)誤代碼 | |
Source |
返回錯(cuò)誤的源代碼,如果可以的話,還會(huì)返回它所在的行號(hào) | |
Category |
返回一個(gè)字符串,用于表明錯(cuò)誤類型,如是IIS錯(cuò)誤、腳本錯(cuò)誤還是組件錯(cuò)誤 | |
File |
發(fā)生錯(cuò)誤的文件名 | |
Line |
發(fā)生錯(cuò)誤所在的行號(hào) | |
Column |
發(fā)生錯(cuò)誤所在的列 | |
Description |
錯(cuò)誤描述 | |
ASPDescription |
如果這個(gè)錯(cuò)誤與ASP相關(guān)的話,可以返回更詳細(xì)的錯(cuò)誤描述 |
如對(duì)本文有疑問(wèn),請(qǐng)?zhí)峤坏浇涣髡搲?,廣大熱心網(wǎng)友會(huì)為你解答?。?點(diǎn)擊進(jìn)入論壇