/*-------------------ASP文檔參考集-----------------------*/
*-->作者:草履蟲
*-->時間:2007-4.28---2007-4.30(原來是自己編寫的手冊,現在發在這裡)
*-->聯絡:caolvchong@gmail.com
*-->文檔功能:
1.複習了ASP,加深了對ASP結構的理解和ASP的體會
2.可以用來做ASP參考,自己寫的,參考起來更方便
這是第二部分:ASP七大對象
/*---------------------------ASP七大對象----------------------------*/
*-->Application對象:
功能:在給定的應用程式的所有使用者之間共用資訊,並在伺服器運行期間持久的儲存數
據.而且,Application對象還有控制訪問應用程式層資料的方法和可用於在應用程式啟
動和停止時觸發過程的事件(OnStart事件和OnEnd事件)
屬性:沒有內建的屬性
集合:即使用者自訂的屬性
Application 對象的集合及說明:
Contents:沒有使用<OBJECT>元素定義的儲存於Application對象中的所有變數(及
它們的值)的一個集合.包括Variant數組和Variant類型對象執行個體的引用
StaticObjects:使用<OBJECT>元素定義的儲存於Application對象中的所有變數
(及它們的值)的一個集合
對應的例子:
設定application屬性值:
Application("MyVar") = "Hello"
Set Application("MyObj") = Server.CreateObject("MyComponent")
方法:
Contents.Remove():移去某個application集合
Contents.Removeall():移去所有的Application集合
Lock():阻止其他客戶修改儲存在Application對象中的變數,以確保在同一時刻僅
有一個客戶可修改和存取 Application 變數.如果使用者沒有明確調用Unlock
方法,則伺服器將在.asp檔案結束或逾時後即解除對 Application 對象的鎖
定
Unlock():使其他用戶端可以在使用Lock方法鎖住Application對象後,修改儲存在
該對象中的變數.如果未顯式調用該方法,Web伺服器將在.asp檔案結束或逾時
後解鎖Application對象
一個綜合點的例子:
在1.asp中:
'設定3個application屬性值
application("chong1")="第1個application集合項目"
application("chong2")="第2個application集合項目"
application("chong3")="第3個application集合項目"
'設定的屬性值都保留在application.contents中,基數從0開始,因此可以用
'for迴圈讀出來
'這裡總結下contents集合的屬性:
'count屬性:返回集合中所有的項數,傳回值是個整數
'item屬性:用於設定或返回集合中一個特定成員的值,item屬性是
contents
'集合的預設屬性,因此.item(x)相當於.(x)
'key屬性:key(x)返回對應的屬性名稱,如上面
application.contents.key(1)
'將返回chong1
For i = 1 to Application.Contents.Count
Response.Write (Application.Contents.item(i))
Next
在2.asp中:
'2.asp和1.asp共用了application對象內容,因此可以對該集合元素進行修
改或刪除等
application("chong1")="我被修改了" '修改application屬性值
application.Contents.Remove("chong2") '刪除application屬性值
for each j in application.Contents 'for each形式訪問application
response.Write(Application.Contents.item(j))
next
事件:至於兩個事件onstart()和onend()等總結Global.asa檔案時介紹
經驗:通常地,當要修改某個application值時,應當先用Lock()鎖定它,然後再修改,修
改完後再Unlock(),防止多個使用者並發訪問該對象
常用:設定,修改和刪除application集合,結合lock和unlock方法
*-->Session對象:
功能:SessionObject Storage Service特定的使用者會話所需的資訊.當使用者在應用程式的頁之間跳轉
時,儲存在Session對象中的變數不會清除,而使用者在應用程式中訪問頁面時,這些
變數始終存在.當使用者請求來自應用程式的Web頁時,如果該使用者還沒有會話,則
Web 服務器將自動建立一個Session對象.當會話到期或被放棄後,伺服器將終止該
會話(和application差別是session不是共用的,各個使用者有各自的session,由此
可以用來驗證使用者的身份)
集合:和application一樣地,session具有contents和StaticObject兩個集合
屬性:
CodePage:讀/寫.整型.定義用於在瀏覽器中顯示頁內容的字碼頁(Code Page).代碼
頁是字元集的數字值,不同的語言和場所可能使用不同的字碼頁.例如,650001
是UTF-8,936為GB2312
LCID:讀/寫.整型.定義發送給瀏覽器的頁面地區標識(LCID).LCID是唯一地標識地
區的一個國際標準縮寫,例如,2057定義當前地區的貨幣符號是'£'.LCID也可
用於FormatCurrency等語句中,只要其中有一個可選的LCID參數.LCID也可在
ASP處理指示<%...%>中設定,並優先於會話的LCID屬性中的設定.
SessionID:唯讀.長整型.返回這個會話的工作階段識別項.SessionID屬性返回使用者的
會話標識.在建立會話時,伺服器會為每一個會話產生一個單獨的標識.會話標
識以長整形資料類型返回.在很多情況下 SessionID 可以用於 WEB 頁面註冊
統計
Timeout:讀/寫.整型.為這個會話定義以分鐘為單位的逾時周期.如果使用者在逾時周
期內沒有進行重新整理或請求一個網頁,該會話結束.在各網頁中根據需要可以修
改.預設值是20min,在使用率高的網站上該時間應更短
方法:
Abandon():Abandon方法刪除所有儲存在Session對象中的對象並釋放這些對象的
源.如果您未明確地調用Abandon方法,一旦會話逾時,伺服器將刪除這些對象.
當伺服器處理完當前頁時,下面樣本將釋放工作階段狀態
另外,session和application一樣,具有contents.remove()和
contents.removeall()方法
事件:至於兩個事件onstart()和onend()等總結Global.asa檔案時介紹
常用:設定,修改,刪除session,另外timeout也是常用的,記住一點,session依賴cookies,當瀏覽器關閉或者不
支援cookie時將不能訪問到session
*-->request對象:
功能:Request對象在HTTP請求期間,檢索用戶端瀏覽器傳遞給伺服器的值
集合:
ClientCertificate:當用戶端訪問一個頁面或其他資源時,用來向伺服器表明身份
的客戶認證的所有欄位或條目的數值集合,每個成員均是只
讀.ClientCertificate集合從Web瀏覽器發布請求中擷取驗證欄位(由X.509
標準指定).如果Web瀏覽器使用SSL3.0/PCT1協議(也就是說,它使用以
https://開頭的URL,而不是http://)串連伺服器及伺服器請求驗證,則瀏覽器
將發送驗證欄位.如果沒有發送驗證,ClientCertificate集合將返回EMPTY.必
須先將Web伺服器配置為要求用戶端驗證,然後才能使用ClientCertificate
集合.
Cookies:根據使用者的請求,使用者系統發出的所有cookie的值的集合,這些Cookie僅
對相應的域有效,每個成員均為唯讀,cookies也具有count,item,key三個屬
性,用法可以類比上面提到的application中提到的.另外,cookies還有個屬性
haskeys,指明cookie是多值還是單值的,多值返回true,單值返回false
Form:的屬性值為POST時,所有作為請求提交的<FORM>段中的HTML控制項單元的值的
集合,每個成員均為唯讀,form也具有count,item,key三個屬性
QueryString:依附於使用者請求的URL後面的名稱/數值對或者作為請求提交的且
METHOD屬性值為GET(或者省略其屬性)的,字串由問號(?)後的值指定,或
<FORM>中所有HTML控制項單元的值,每個成員均為唯讀,Querystring也具有
count,item,key三個屬性
ServerVariables:隨同用戶端請求發出的HTTP前序值,以及Web伺服器的幾種
環境變數的值的集合,每個成員均為唯讀,ServerVariables也具有
count,item,key三個屬性servervariables參數我列印在了"servervariables
參數集"文檔裡了
屬性:
TotalBytes:指定用戶端在請求本文中發送的總位元組數.該屬性只允許讀
方法:
BinaryRead():擷取作為POST請求的一部分而從用戶端傳送到伺服器的資料.此方
法擷取來自用戶端的資料並將其儲存在SafeArray中.SafeArray是一個數組,其中
包含維數和邊界資訊,通俗地說,安全陣列就時維數以及維數的上下限都確定的數組
BinaryRead方法用於讀取作為POST請求的一部分從用戶端發出的未加工資料.此方
法用於在底層訪問資料,與此相反,Request.Form集合用於查看在公告請求中發送
的表格式資料.一旦調用了BinaryRead,則引用Request.Form集合中的任何變數都將
導致錯誤發生.反之,一旦引用了Request.Form集合中的一個變數,則調用
BinaryWrite也將導致錯誤發生.請記住,如果在訪問Request集合中的變數時未指
定該變數屬於哪一個子集,將搜尋Request.Form集合并強制使用上述規則.
常用:對於表單的提交或者是頁面之間的參數傳遞,request起著重要的作用,區分好
Form和QueryString兩個區別,
當而只用request,省略這兩個集合時,asp會自動調整,但這樣做是不好的.對於表
單,通常request是通過
表單元素的name來獲得表單元素的值(value)
另外,在無組件上傳檔案時,TotalBytes用來擷取上傳檔案的大小,BinaryRead()
用來擷取上傳表單的所有內容.
當然,如果想獲得檔案內容,需要進行對BinaryRead()獲得的內容進行分析截取
*-->response對象:
功能:將輸出發送到用戶端,剛好和request相對
集合:
cookies:在當前響應中,發回用戶端的所有cookie的值,這個集合為唯寫
例子:
'Expires設定到期事件,時間格式#英文月單詞 數字日期,4位年份#
response.cookies("name")="草履蟲"
response.cookies("name").Expires=#May 11,2007#
'至於讀就要用request.cookies了
name=request.cookies("name") '這樣name就獲得了"草履蟲"
'利用cookies可以做免密碼登入,判斷使用者是否登入過以及由這些觸發的事件等
等
'cookie也有count,item和key屬性
'單個cookie屬性還有dimain,haskeys,path,secure屬性,具體的等用到時候再查
屬性:
Buffer=True|False:讀/寫,布爾型,表明由一個ASP頁所建立的輸出是否一直存放
在IIS緩衝區,直到當前頁面的所有伺服器指令碼處理完畢或Flush、End方法被
調用.在任何輸出(包括HTTP前序資訊)送往IIS之前這個屬性必須設定.因此
在.asp檔案中,這個設定應該在<%@ LANGUAGE=...%>語句後面的第一行.ASP3.0
預設設定緩衝為開(True),而在早期版本中預設為關(False)
CacheControl:讀/寫,字元型,設定這個屬性為"Public"允許Proxy 伺服器快取頁面面,
如為"Private"則禁止Proxy 伺服器緩衝的發生.
Charset:讀/寫,字元型,在由伺服器為每個響應建立的HTTP Content-Type前序中附
上所用的字元集名稱(例如:ISO-LATIN-7)
Content Type="MIME-type":讀/寫,字元型,指明響應的HTTP內容類型,標準的MIME
類型(例如"text/xml"或者"Image/gif").假如省略,表示使用MIME類型
"text/html",內容類型告訴瀏覽器所期望內容的類型,關於MIME列表,列印在
MIME參考文檔裡,需要時可以去參考
Expires:讀/寫,數值型,指明頁面有效以分計算的時間長度,假如使用者請求其有
效期滿之前的相同頁面,將直接讀取顯示緩衝中的內容,這個有效期間過後,頁
面將不再保留在私人(使用者)或公用(Proxy 伺服器)緩衝中.如果希望一個檔案立
即終止,可以將該屬性值設定為一個非常大的負數.一個檔案內多次設定了
expires屬性將使用最早的時間/日期為該檔案的終止時間(是一個相對時間)
ExpiresAbsolute:讀/寫,日期/時間型,指明當一個頁面到期和不再有效時的絕對日
期和時間.在未到期之前,若使用者返回到該頁,該緩衝的頁就顯示.如果未指定時
間,該首頁在當天午夜到期.如果未指定日期,則該首頁在指令碼運行當天的指定
時間到期
IsClientConnected:唯讀,布爾型,返回客戶是否仍然串連和下載頁面的狀態標誌.
在當前的頁面已執行完畢之前,假如一個客戶轉移到另一個頁面,這個標誌可用
來中止處理(使用Response.End方法)
PICS:唯寫,字元型,建立一個PICS前序並將之加到響應中的HTTP前序中,PICS前序
定義頁面內容中的詞彙等級,如暴力、性、不良語言等
Status:讀/寫,字元型,指明發回客戶的響應的HTTP前序中表明錯誤或頁面處理是
否成功的狀態值和資訊.例如"200 OK"和"404 Not Found"
方法:
AddHeader "name","content":通過使用name和Content值,建立一個定製的HTTP
前序,並增加到響應之中.不能替換現有的相同名稱的前序.一旦已經增加了一
個前序就不能被刪除.這個方法必須在任何頁面內容(即text和HTML)被發往客
戶端前使用
AppendToLog("string"):當使用"W3C Extended Log File Format"檔案格式時,對於
使用者請求的Web伺服器的記錄檔增加一個條目.至少要求在包含頁面的網站
的"Extended Properties"頁中選擇"URI Stem".string為要添加到記錄檔中
的文本.由於IIS日誌中的欄位由逗號分隔,所以該字串中不能包含逗號
(,).字串最大長度為 80 個字元
BinaryWrite():在當前的HTTP輸出資料流中寫入Variant類型的SafeArray,而不經過
任何字元轉換.對於寫入非字串的資訊,例如定製的應用程式請求的位元
據或組成影像檔的二進位位元組,是非常有用的
Clear():當Response.Buffer為True時,從IIS響應緩衝中刪除現存的緩衝頁面內
容.但不刪除HTTP響應的前序,可用來放棄部分完成的頁面
End():讓ASP結束處理頁面的指令碼,並返回當前已建立的內容,然後放棄頁面的任何
進一步處理
Flush():發送IIS緩衝中所有當前緩衝頁給用戶端(立即發送緩衝區中的輸出).當
Response.buffer為True時,可以用來發送較大頁面的部分內容給個別的使用者.
如果未將Response.Buffer設定為TRUE,則該方法將導致執行階段錯誤
Redirect("url")通過在響應中發送一個"302 Object Moved" HTTP前序,指示
瀏覽器根據字串url下載相應地址的頁面,瀏覽器重新導向到URL.
Write("string"):在當前的HTTP響應資訊流和IIS緩衝區寫入指定的字元,使之成
為返回頁面的一部分.該值不能包括字元組合%>,如果需要,可用逸出序列%\>代
替.Web伺服器在處理指令碼時,將轉換這一逸出序列還有一種格式輸
出:<%=...%>,但這要在asp和html之間轉換,速度減慢,最好的辦法是一行
response.write(),字串用&串連常用:cookies,buffer,content type,
expires,status,binarywrite,clear,end,flush,redirect,write這些都是很
常用的和瀏覽器互動的重要成分,cookies用於客戶身份方面,和它相關的有
expires;buffer以及和buffer相關的clear,flush,end這些用於緩衝
的控制;content type最常用於xml和映像內容的輸出;stutas用於判斷狀態,
特別在xmlhttp中;write用於輸出;redirect用於轉接內容;binarywrite一般
用於接收上傳的檔案內容
*-->server對象:
功能:提供對伺服器上的方法和屬性的訪問.其中大多數方法和屬性是作為公用程式的功
能服務的
屬性:
ScriptTimeout:整型,預設值為90秒,設定或返回頁面的指令碼在伺服器退出執行和
報告一個錯誤之前可以執行的時間(秒數).達到該值後將自動停止頁面的執行,
並從記憶體中刪除包含可能進入死迴圈的錯誤的頁面或者是那些長時間等待其他
資源的網頁.這會防止伺服器因存在錯誤的頁面而過載.對於已耗用時間較長的頁
面需要增大這個值
方法:
CreateObject("identifier"):建立由identifier標識的對象(一個組件、應用程式
或指令碼對象)的一個執行個體,返回可以在代碼中使用的一個引用.可以用於一個虛
擬應用程式(global.asa頁)建立會話層或應用程式層範圍內的對象.該對象可
以用其ClassID來標識,如"{clsid:BD96C556-65A3...37A9}"或一個ProgID串
來標識,如"ADODB.Connection",通常我們使用ProgID
注意下面幾點:
1.預設情況下,由Server.CreateObject方法建立的對象具有頁範圍.這就是
說,在當前ASP頁處理完成之後,伺服器將自動破壞這些對象
2.可以通過將變數設定為 Nothing 或新的值來破壞對象
3.不能建立與內建對象同名的對象執行個體
Execute("url"):停止當前頁面的執行,把控制轉到在url中指定的網頁.使用者的當
前環境(即工作階段狀態和當前事務狀態)也傳遞到新的網頁.在該頁面執行完成後,
控制傳遞迴原先的頁面,並繼續執行Execute方法後面的語句
GetLastError():返回ASP ASPError對象的一個引用,這個對象包含該頁面在ASP
處理過程中發生的最近一次錯誤的詳細資料.這些由ASPError對象給出的資訊
包含檔案名稱、行號、錯誤碼等等HTMLEncode("string"):返回一個字串,該
串是輸入值string的拷貝,但去掉了所有非法的HTML字元,
常見不合法HTML字元及其轉換字元有:
< 對應 <
> 對應 >
& 對應 &
" 對應 "
對應 (空格)
? 對應 (著作權)
? 對應 (註冊商標)
×對應 ×(乘號)
÷對應 ÷(除號)
MapPath("url"):返回在url中指定的檔案或資源的完整實體路徑和檔案名稱
Transfer("url"):停止當前頁面的執行,把控制轉到url中指定的頁面.使用者的當前 環境(即工作階段狀態和當前事務狀態)也傳遞到新的頁面.與Execute方法不同,當
新頁面執行完成時,不回到原來的頁面,而是結束執行過程
URLEncode("string"):返回一個字串,該串是輸入值string的拷貝,但是在URL
中無效的所有字元,
常見不合法的URL字元及其轉換字元有:
# 用來標誌特定的文檔位置 %23
% 對特殊字元進行編碼 %25
& 分隔不同的變數值對 %26
+ 在變數值中表示空格 %2B
/ 表示目錄路徑 %2F
\ 表示目錄路徑 %5C
= 用來串連鍵和值 %3D
? 表示查詢字串的開始 %3F
空格 %20
. 句號 %2E
: 冒號 %3A
*-->ASPError對象:
由於錯誤機制IIS已經能識別定位,暫時略過不深入了
*-->ObjectContext對象:
功能:控制ASP的交易處理.交易處理由Microsoft Transaction Server (MTS)管理
事件:
OnTransactionAbort:由放棄的交易處理事件激發,在指令碼完成處理後發生
OnTransactionCommit:由成功的交易處理事件激發,在指令碼完成處理後發生
方法:
SetAbort:顯式的放棄一次交易處理
SetComplete:覆蓋前面任何調用ObjectContext.SetAbort方法的調用
由於沒有涉及,等涉及時深入,暫時瞭解即可