ASP內置對象


一、內置對象的概述  

  為了實現網站的常用功能,ASP提供了內置對象。內置對象的特點是:不需要事先聲明或者創建一個實例,可以直接使用。常見的內置對象有

  •   Request對象:獲取客戶端的信息
  •   Response對象:將信息返回給客戶端瀏覽器
  •   Application對象:存儲一個應用程序的共享數據以供多個用戶使用
  •   Session對象:在訪問過程中存儲單個用戶信息
  •   Server對象:提供服務器屬性信息
  •   ObjectContext對象:控制事務處理

二、Request請求對象

  在客戶端/服務器結構中,當客戶端Web頁面向網站服務器端傳遞數據時,ASP通過Request對象能夠獲取客戶端提交的全部信息。包括客戶端的HTTP變量、在網站服務器端存放的客戶端瀏覽器的Cookie數據、賦予URL之后的字符串信息、頁面表單傳送的數據以及客戶端認證等

  Request對象的語法如下

    Request[.collection | property | method](variable)

    collection:Request對象的數據集合

    Property:Request對象的屬性

    method:Request對象的方法

    variable:由字符串定義的變量參數,指定要從集合中檢索的項目或者作為方法、屬性的輸出

  例如:通過Request對象的QueryString數據集合取得傳值參數myid的值並賦值給變量

    <%

      Dim id

      id=Request.QueryString("myid")  

    %>

  這里值得注意的是,在使用Request對象時,collection、property和method最多只能選擇一個;也可以三個都不選,這是Request對象根據以下順序搜索集合:QueryString、Form、Cookie、Servervariable、ClientCertificate,當發現第一個匹配的變量時,接確定是要訪問的成員

  QueryString對象包括5個集合,1個屬性和一個方法

成員 描述
Form數據集合 讀取HTML表單域控件的值,即POST方式提交的數據
QueryString數據集合 讀取賦予URL地址后的字符串的值
Cookies數據集合 讀取存放在客戶端瀏覽器Cookie的內容
ServerVariables數據集合 讀取客戶端請求發出的HTTp報頭值及WEB服務器的環境變量值
ClientCertificate數據集合 讀取客戶端的驗證字段
TotalBytes屬性 返回客戶端發出請求的字節數量
BinaryRead方法 以二進制方式讀取客戶端請求,並返回一個變量數組

  1.獲取表單數據

  表單是表准HTML文件的一部分,用戶通過點擊表單中的提交按鈕提交輸入的數據

  在含有ASP動態代碼的WEB頁面中,可以使用Request對象的Form集合收集客戶端的以表單形式發送到服務器的信息

  語法:

    Request。Form(element)[index | .count]

    element:指定集合要檢索的表單元素的名稱

    index:索引值,為可選參數,可以取得表單中名稱相同的元素值。索引值是1至Request.Form(element).Count之間的任意整數

    Count:集合中相同名稱元素的個數

 1 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 6 <title>獲取表單數據</title>
 7 </head>
 8 <body>
 9     <form id="form1" name="form1" method="post" action="code.asp">
10         <p>用戶名:</p>
11         <input name="txt_username" type="text" id="txt_username" />
12         <p>密&nbsp;碼:</p>
13         <input name="txt_pwd" type="password" id="txt_pwd" />
14         <p style="width:200px" align="center">
15         <input type="submit" name="submit" value="提交" />
16         &nbsp;
17         <input type="reset" name="submit2" value="重置" />
18     </form>
19 </body>
20 </html>
表單數據
 1 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 6 <title>無標題文檔</title>
 7 </head>
 8     <p>用戶名:<%=Request.Form("txt_username")%>
 9     <p>密碼為:<%=Request.Form("txt_pwd")%>
10 <body>
11 </body>
12 </html>
code.asp

   表單中的多個對象具有相同名稱時,可以利用Count屬性獲得具有相同名稱對象的總數,然后通過索引獲取不同內容值,也可以應用for each ...next語句來獲取相同名稱對象的不同內容值。

  代碼:獲取復選框的值並顯示其內容

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>獲取表單數據</title>
</head>
<body>
    <form id="form1" name="form1" method="post" action="code.asp">
        <p>愛好:</p>
        <input name="favour" type="checkbox" id="favour" value="計算機" />計算機
        <input name="favour" type="checkbox" id="favour" value="英語" />英語
        <input name="favour" type="checkbox" id="favour" value="籃球" />籃球
        <input name="favour" type="checkbox" id="favour" value="旅游" />旅游
        <p style="width:200px" align="center">
        <input type="submit" name="submit" value="提交" />
        &nbsp;
        <input type="reset" name="submit2" value="重置" />
    </form>
</body>
</html>
表單數據
 1 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 6 <title>無標題文檔</title>
 7 </head>
 8     <%
 9         dim nums,i
10         nums=request.Form("favour").count
11         for i=1 to nums
12             response.Write request.Form("favour")(i) & "<br>"
13         next
14     %>
15 <body>
16 </body>
17 </html>
code.asp

 

   2.查詢字符串數據

  通過Request對象的QueryString數據集合可以查詢字符串數據

  語法:

    Request.QueryString(variable)[(index) | .count]

    variable:指定要檢索的HTTP查詢字符串中的變量名

    index:索引值,為可選參數,可以取得HTTP查詢字符串中相同變量名的變量值。索引值可以是1至Request.QueryString(variable).Count之間的任意整數

    Count:查詢字符串中相同名稱變量的個數

  有兩種情況要在服務器端指定利用QueryString數據集合取得客戶端傳送的數據,一是表單中通過Get方式傳遞數據,二是利用超鏈接標記<a>傳遞參數

  ①通過get方式傳遞的表單數據

  與Form數據集合相似,QueryString數據集合可以取得表單中通過get方式傳遞的數據。

  如例:獲取get方式傳遞的表單數據

 1 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 6 <title>獲取表單數據</title>
 7 </head>
 8 <body>
 9     <form id="form1" name="form1" method="get" action="code.asp">
10         <p>職&nbsp;&nbsp;&nbsp;務:</p>
11         <input name="post" type="radio" id="favour" value="學生" />學生
12         <input name="post" type="radio" id="favour" value="老師" />老師
13         <p>所在專業:</p>
14             <select name="profession" size="3" id="profession">
15                 <option value="計算機科學與技術">計算機科學與技術</option>
16                 <option value="英語">英語</option>
17                 <option value="數學">數學</option>
18         <p style="width:200px" align="center"></p>
19         <input type="submit" name="submit" value="提交" />
20         &nbsp;
21         <input type="reset" name="submit2" value="重置" />
22     </form>
23 </body>
24 </html>
表單數據
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>無標題文檔</title>
</head>
    
    你的職位:<%=request.QueryString("post")%> 
    <br>
    你的專業:<%=request.QueryString("profession")%> 
    
<body>
</body>
</html>
code.asp

  ②使用超鏈接傳遞的參數

  在程序中,可以直接利用HTML的<a>標簽傳遞參數,傳遞的參數寫在?后面,如果有多個參數則使用&作為分隔符,使用Request對象的QueryString數據集合可以取得所傳遞的參數值

  3.獲得服務器端環境變量

   通過Request對象的ServerVariables數據集合可以取得服務器端的環境變量信息。這些信息包括發出請求的瀏覽器信息、構成請求的HTTP方法、用戶登錄windows NT的賬號、客戶端的IP地址等。服務器端環境變量對ASP程序有很大幫助,使程序能夠根據不同情況進行判斷,提高了程序的健壯性。 服務器端環境變量是只讀變量,只能查閱,不能設置。

  語法:

    Request.ServerVariables(server_environment_variable)

    server_environment_variable:服務器端環境變量

  代碼:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>服務器環境變量</title>
</head>
<body>
    <%
        Response.Write "服務器名稱、域名和IP地址(SERVER_NAME):" & Request.ServerVariables("SERVER_NAME") & "<br>"
        Response.Write "客戶端IP地址(REMOTE_ADDR):" & Request.ServerVariables("REMOTE_ADDR") & "<br>"
        Response.Write "客戶端提供的訪問路徑(PATH_INFO):" & Request.ServerVariables("PATH_INFO") & "<br>"
    %>
</body>
</html>
View Code

 三、Response響應對象

   Response對象時ASP內置對象中直接對客戶端發送數據的對象。Request請求對象與Response響應對象構成了客戶端/服務器響應的模式。通過Response可以將客戶端重定向到一個指定的頁面中,可以設置客戶端的Cookie值等。

  語法:

    Response對象的語法如下:

    Response.collection | property | method

    collection:Response對象的數據集合

    property:Response對象的屬性

    method:Response對象的方法

  例如:使用Response對象的Cookie數據集合設置客戶端的Cookie關鍵字並賦值

    <%

      Response.Cookies("info")="ASP"

    %>

  Response與一個HTTP響應對應,通過設置其屬性和方法可以控制如何將服務器端的數據發送到客戶端瀏覽器。Response主要成員如下:

成員 描述
Cookies數據集合 設置客戶端瀏覽器的Cookie值
Buffer屬性 表明輸出頁是否被緩沖
CacheControl屬性 決定代理服務器是否能緩存ASP生成的輸出頁
Status屬性 服務器返回的狀態行的值
ContentType屬性 指定響應的HTTP內容類型
Charset屬性 將字符集的名稱添加到內容類型標題中
Expires屬性 在瀏覽器中緩存頁面超時前,可以指定緩存時間
ExpiresAbsolute屬性 指定瀏覽器上緩存頁面超時的日期和時間
IsClientConnected屬性 表明客戶端是否與服務器斷開
PICS屬性 將PICS標記的值添加到響應的標題的PICS標記字段中
Write方法 直接向客戶端瀏覽器輸出數據
End方法 停止處理.asp文件並返回當前結果
Redirect方法 重定向當前頁面,連接另一個URL
Clear方法 清除服務器中緩存的HTML信息
Flush方法 立即輸出緩沖區的內容
BinaryWrite方法 按照字節格式向客戶端瀏覽器輸出數據,不進行任何字符集的轉換
AddHeader方法 設置HTML標題
AppendToLog方法 在WEB服務器的日志文件中記錄日志

  1.向客戶端發送數據

  使用Response對象的Write方法可以將指定的字符串信息輸出到客戶端。Write方法是Response對象常用的方法

  語法:

    Response.Write variant

    variant:輸出到瀏覽器的變量單數句或者字符串

  注意:如果在輸出字符串中包含ASP程序定界符,“%>”,WEB服務器解釋時就會以為ASP語句結束,造成服務器錯誤。因此,在ASP程序中需要向瀏覽器輸出"%>"時,可以用"%\>"代替,即將其作為轉義符輸出,這樣ASP處理引擎就會自動轉化"%>"為字符串

   2.利用緩沖輸出數據

  WEB服務器響應客戶端的請求時,是以信息流的形式將響應數據發送給客戶端的,發送過程是先返回響應頭,再返回正式的頁面。在處理ASP頁面時,信息流的發送則是生成一段頁面就立即發送一段信息流I返回給瀏覽器。

  ASP提供了另一種發送數據的方式,即利用緩存輸出。緩存輸出是指WEB服務器生成ASP頁面時,等ASP頁面全部處理完之后,再返回用戶請求

  ①使用緩沖輸出

  a.Buffer屬性:在默認情況下緩沖是關閉的,通過設置Response對象的buffer屬性為true,可以打開緩沖。緩沖啟用后凡是輸出到客戶端的信息都暫時存入緩沖區,直到整個ASP頁面執行結束或調用了Response對象的flush或end方法后,才將響應發送給客戶端的瀏覽器。

  語法:

    Response.Buffer=True/False

  Response對象的Buffer屬性必須在任何信息發向客戶端瀏覽器之前設置,否則是無效的,並且會導致一個錯誤

  例如:在頁面中 啟用緩沖

  <%

    Response.Buffer="True"

  %>

   b.Flush方法:用於將緩沖區內容立即發送給客戶端瀏覽器。

  語法:

    Response.Flush

  c.Clear方法:用於清除緩沖區

  語法:

    Response.Clear

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>使用緩沖輸出</title>
</head>
<body>
    <%
        dim i
        for i=1 to 20
            response.Write i & "<br>"
            if i=10 then response.Flush()
         next
         response.Clear()
    %>
</body>
</html>
View Code

 

  ②設置緩沖的有效期限

  保存在緩存中的內容是有一定期限的,Response提供的一些屬性控制緩存的期限

  a.CacheControl:應用程序可以通過代理服務器將頁面發送給客戶。代理服務器代表客戶端瀏覽器向WEB服務器請求頁面。代理服務器高速緩存HTML頁,這樣對同一頁的重復請求會迅速高效的返回到瀏覽器。

  在默認情況下,ASP指示代理服務器不要高速緩存ASP頁本身。通過Response對象的CacheControl屬性設置Cacche-Control頭字段,可以允許代理服務器高速緩存特定頁面。

  語法:

    Request.CacheControl [=Cache_Control_Header]

  Cache_Control_Header:表示緩沖存儲器控制標題,取值為private或public

  b.Expires屬性:用於指定在客戶端瀏覽器上緩沖存儲的頁面距過期還有多少時間。

  語法:

    Response.Expires  [=number]

    number:指定緩存的頁面距離過期還有多少時間,單位為分鍾

  c.ExpiresAbsolute:指定緩存於客戶端瀏覽器中的頁面到期的日期時間

  語法:

    Response.ExpiresAbsolute [date][time]

  date:指定頁面的到期日期

  time:指定頁的到期時間

  3.重定向網頁 

   網頁重定向是指從一個網頁跳轉到其他頁面。應用Response對象的Redirect方法可以將客戶端瀏覽器重定向到另一個頁面。如果需要從當前網頁轉移到一個新的URL,而不用經過用戶去單擊超鏈接或者搜索URL,此時可以使用該方法使用戶瀏覽器重定向直接重定向

  語法:

  Response.Redirect URL

  URL:資源定位符,表示瀏覽器重定向的目標頁面

  調用Redirect方法,將會忽略當前頁面所有輸出而直接定向到被指定的頁面,即在頁面中顯示設置的響應正文都被忽略

  例如:網頁重定向

 1 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 6 <title>重定向</title>
 7 </head>
 8 <body>
 9     <%
10         if datepart("yyyy",now()) <> "2000" then        '判斷當前時間中的年份
11             Response.Write "歡迎您!"
12             Response.Redirect "index_02.asp"
13         end if
14     %>
15 </body>
16 </html>
View Code
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>無標題文檔</title>
</head>
    <%
        Response.Write "歡迎瀏覽index_02頁面中的內容"
        
    %>
<body>
</body>
</html>
View Code

 

   4.向客戶端輸出二進制數據

   調用Response對象的BinaryWrite方法可以不進行任何字符集轉換,而直接向客戶端瀏覽器發送二進制數據。

  語法:

    Response.BinaryWrite Variable

  Variable:是一個變量,它的值是將要輸出的二進制數據。二進制數據一般是指非文字資料,如圖像文件,聲音文件等

  例如:輸出二進制數據

 1 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 6 <title>表單</title>
 7 </head>
 8 <body>
 9     <form id="form1" name="form1" method="post" action="code.asp">
10         <p>用戶名:
11             <input name="name" type="text" id="name" />
12         <p>性&nbsp;別
13             <input name="sex" type="radio" value="" checked="checked"/>
14 15             <input name="sex" type="radio" value=""/>
16 17         <p style="width:200px" align="center">
18             <input type="submit" name="Submit1" value="提交" />
19             <input type="reset" name="submit2" value="重置" />
20     </form>
21 </body>
22 </html>
View Code
 1 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 6 <title>無標題文檔</title>
 7 </head>
 8     <%
 9         dim counter,array(2)
10         counter=request.TotalBytes        '獲得客戶端以post方式發送的表單數據的字節數
11         array(0)=request.BinaryRead(counter) '以二進制方式讀取數據
12         Response.BinaryWrite array(0)         '輸出二進制數據
13     %>
14 <body>
15 </body>
16 </html>
View Code

 

  5.在網頁中使用Cookie  

   Cookie實際上是一個字符串或者一個標記。當一個包含Cookie的頁面被用戶瀏覽器讀取時,瀏覽器就會為這個站點自動建立Cookie文件,將此文件保存在系統目錄中的Cookie文件夾中,並且會把接受的數據寫進這個文件,這樣一個Cookie就被存入到本地硬盤中,當需要時該網站可以從用戶的本地硬盤讀取這些Cookie值,Cookie文件中 的變量稱為Cookie變量。

  Cookie在指定的聲明周期內都有效,所以WEB設計人員可以使用Cookie在各個不同的ASP頁面間傳遞變量

  a.寫入Cookie

  使用Response對象的cookies數據集合可以在客戶端寫入Cookie

  語法:

    Response.Cookies(cookiesname)[(key) | .attribute]=value

    cookiesname:必選參數,指定Cookie的名字

    key:可選參數,設置Cookie關鍵字

    attribute:Cookie的屬性參數,指定cookie自身的有關信息。

    value:表示指定給Cookie的值

名稱 描述
Expires 僅可寫入,指定該Cookie到期的時間
Domain 僅可寫入,指定Cookie僅送到該網域
Path 僅可寫入,指定Cookie僅送到該路徑
Secure 僅可寫入,設置該Cookie的安全性
HasKeys 只讀,指定Cookie是否包含關鍵字,也就是判定Cookies目錄下是否包含其他Cookies

  b.讀取Cookie

  使用Request對象的Cookie數據集合來讀取cookie的值

  語法:

    Request.Cookies(cookiesname)[(key) | .attribute]  

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>在網頁中使用Cookie</title>
</head>
<body>
    <%
        Response.Cookies("user")("username")="UserLi"    '定義cookies變量關鍵字
        Response.Cookies("user")("password")="pwdpwd"    '
        Response.Cookies("user").Expires=date()+1        '定義Cookies變量User的有效期
    %>
    <a href="code.asp">查看cookies變量</a>
</body>
</html>
View Code
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>無標題文檔</title>
</head>
    <%
        if request.Cookies("user").haskeys then        'Cookies變量user包含關鍵字
            for each key in request.Cookies("user")    '遍歷關鍵字
                Response.Write "Cookies 關鍵字" & key & "的值為:" & Request.Cookies("user")(key) & "<br><br>"
            next
        end if
    %>
<body>
</body>
</html>
View Code

 

  6.停止輸出

  調用Response對象的end方法可以使WEB服務器上的ASP處理程序停止處理ASP腳本,並返回當前結果,此語法后面的內容將不會被處理

  語法:

    Response.end

  使用Response對象的end方法可以強制結束ASP程序的執行,在調試程序時可以應用該方法。

四、Application應用程序對象

   ASP程序是在WEB服務器上執行的,在WEB站點中創建一個基於ASP的應用程序之后,可以通過Application對象在ASP應用程序的所有用戶之間共享信息。也就是說,Application對象中包含的數據可以在整個WEB站點中被所有用戶使用,並且可以在網站運行期間持久保存數據。應用Application對象可以完成統計網站的在線人數、創建多用戶游戲及多用戶聊天室等功能

  語法:

  Application.collection | method

  collection:Application對象的數據集合

  method:Application對象的方法

  Application對象可以定義應用級變量,應用級變量是一種對象級的變量,隸屬於Application對象,它的作用域等同於Application對象的作用域

  例如,通過Application對象定義一個應用級變量

    <% Application ("Username")="Manager"%>

  Application對象沒有內置的屬性,其成員如表

成員 描述
Contents集合 在Application層次的所有可用的變量集合,不包含使用<Object>標記建立的變量
StaticObject集合 在Global.asa文件中通過使用<Object>標記建立的Application層次的變量集合
Contents.Remove方法 從Application對象的Contents集合中刪除一個項目
Contents.RemoveALL方法 從Application對象的Contents集合中刪除所有項目
Lock方法 鎖定Application對象,其他用戶就不能修改同一個Application變量
Unlock方法 解除Application變量的鎖定狀態
Application_OnStart事件 當應用程序的第一個頁面被請求時,觸發這個事件
Application_OnEnd事件 當WEB服務器關閉時這個事件中的代碼被觸發

  1.訪問Application應用級變量

  絕大部分的Application應用級變量都存放於Contents集合中,Contents數據集合包含所有通過腳本命令添加到應用程序中的項目,可以使用Contents集合獲取給定的應用程序作用域的項目列表或者指定一個特殊項目為操作對象,當創建一個新的Application應用級變量時,其實就是在Contents集合中添加了一項。

  語法:

  Application.Contents(key)

  key:用於指定要獲取的項目的名稱

  Application對象的Contents數據集合包含用Server對象的createobject方法創建的對象和通過Application對象聲明建立數值變量,不包含以<Object>標記定義的對象,存儲在Application集合中的信息在整個應用程序執行期間有效且具有程序作用域

  如例:訪問應用級變量

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
</head>
<body>
    <%
        '定義應用級變量
        Application("user")="userLi"
        Application("login")=32
        '輸出Contents集合成員
        for each key in Application.Contents
            response.write("<br>" & key & "=" & Application.Contents(key))
        next
    %>
</body>
</html>
View Code

  2.制作網站計數器

  Application對象的Application_OnStart事件和Application_OnEnd事件以及Session對象的Session_OnStart事件和Session_OnEnd事件都是定義在Global.asa文件中的

  Global.asa文件是用來存放執行任何ASP應用程序期間的Application、Session事件程序,當Application或者Session對象被第一次調用或結束時,就會執行該Global.asa文件內的對應程序。一個應用程序只能對應一個Global.asa文件,該文件只能存放在網站的根目錄下才能正常運行。

  如例:制作網站計數器

<script language="vbscript" runat="server">
sub Application_OnStart()
    if Isempty(Application("Counter")) then
        Application.Lock()
        Application("Counter")=0
        Application.UnLock()
    end if
    //訪問量增加1
    Application.Lock()
    Application("Counter")=Application("Counter")+1
    Application.UnLock()
end sub
</script>
Global.asa
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
</head>
<body>
    您是第
    <%
        response.Write Application("Counter")
    %>
    位訪問者
</body>
</html>
View Code

五、Session會話對象

   使用Session對象可以存儲用戶個人會話所需的信息。當用戶站點不同頁面切換時,存儲在Session對象中的變量不會清除。使用Session對象可以實現用戶信息在多個WEB頁面共享,還可以跟蹤瀏覽者的訪問路徑,這樣對了解頁面的訪問情況及網站的定位都有幫助

  語法:

    Session.collection | property | method

    collection: Session對象的集合

    property:Session對象的屬性

    method:Session對象的方法

  注意:使用Session變量的時候一定要注意拼寫問題,WEB服務器不提供相應的語法檢查,Option Explicit語法也不起作用

  Session對象的成員如下表所示

成員 描述
Contents集合 包含通過腳本命令添加到應用程序中的變量、對象
StaticObject集合 包含由<Object>標記添加到Session中的對象
SessionID屬性 系統用來存放並且識別該連接期間所使用的唯一標識碼,它的數據類型是長整型,並且是只讀的
Timeout屬性 應用程序會話的超時時限,以分鍾為單位
CodePage屬性 將用於符號映射的代碼頁
LCID屬性 現場標識
Abandon方法 釋放Session對象占用的資源
Session_OnStart事件 尚未建立會話的用戶請求訪問應用程序的頁面時,觸發該事件
Session_OnEnd事件 會話超時或者會話被放棄時,觸發該事件

   1.訪問Session會話級變量

  Session對象的Contents數據集合包含通過Server對象的CreateObject方法創建的對象和Session對象聲明建立的變量,不包含以<Object>標記定義的對象。Session對象存在期間,存儲在Session對象的Contents數據集合中的信息是有效的。

  語法:

    Session.Contents(key)

    key:用於指定要獲取的項目名稱

    Session對象的Contents數據集合支持For Each ... Next 和 For ... Next 循環,可以使用循環遍歷Contents數據集合中的成員

  例如:訪問Session會話級變量

 1 <%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
 2 <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
 3 <html xmlns="http://www.w3.org/1999/xhtml">
 4 <head>
 5 <meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
 6 <title></title>
 7 </head>
 8 <body>
 9     <%
10         '定義會話級變量
11         session("username")="dzj"
12         session("grand")="星級會員"
13         '輸出集合的成員
14         for each key in session.Contents
15             response.Write("<br>" & key & "=" & Session.Contents(key))
16         next
17     %>
18 </body>
19 </html>
View Code

 

  2.返回當前會話的唯一標識符

  在創建會話時,服務器會為每一個會話生成一個單獨的標識,使用Session對象的SessionID屬性可以返回當前會話的唯一標識符,即返回用戶的會話標識。

  3.釋放Session

   Session對象只提供了Abandon方法,該方法將刪除所有存儲在Session對象中的數據並釋放其所占的資源。

  語法:

    Session.Abandon

  如果未顯式調用Abandon方法,服務器將在會話超時后刪除Session對象數據。調用Abandon方法時,會話對象不會被立即刪除,而是停止對該Session對象的監控,然后把Session對象放入隊列,按順序進行刪除。也就是說,在調用Abandon方法后,可以在當前頁上訪問存儲在Session對象中的變量,但在進入另一個WEB頁面時,先前設置Session對象的變量值將為空,服務器會為用戶新創建一個Session對象

  如例:釋放Session對象

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
</head>
<body>
    <%
        '調用Abandon方法
        Session.Abandon()
        '輸出Session對象的對象數據
        Response.Write "用戶的SessionID為:" & Session.SessionID & "<br>"
        
        '定義會話級變量
        session("username")="dzj"
        session("grand")="星級會員"
        '輸出集合的成員
        for each key in session.Contents
            response.Write("<br>" & key & "=" & Session.Contents(key))
        next
     %>
    <a href="code.asp" target="_balck">查看Session對象數據</a>
</body>
</html>
View Code
<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>無標題文檔</title>
</head>
    <%
        username=session("username")
        if username="" then
            username=""
        end if
        response.Write "上一頁的username為:" & username
        response.Write "<br>為用戶新建的SessionID為:" & session.SessionID
    %>
<body>
</body>
</html>
View Code

 

六、Server服務對象  

  ASP的Server服務對象提供了對服務器上的屬性和方法的訪問,從而用來獲取WEB服務器的特性和設置。

  使用Server對象可以創建各種服務器組件對象實例,程序調用創建對象的屬性、方法以實現訪問數據庫、對文件進行輸入、輸出操作以及在WEB頁上自動輪顯廣告圖像等功能。使用Server對象還可以完成ASP腳本、處理HTML和URL編碼以及獲取服務器對象的路徑信息等。

  語法:

    Server.property | method

    property:Server對象的屬性

    method:Server對象的方法

  例如:通過Server對象創建一個Conn的ADO的Connection對象實例

    <%

      dim conn

      set conn = Server.CreateObject("ADODB.Connection")

    %>

  Server對象的成員如表所示

成員 描述
ScriptTimeOut屬性 設置ASP腳本執行的超時時間
CreateObject方法 創建服務器組件的實例
MapPath方法 將指定的虛擬路徑映射為物理路徑
HTMLEncode方法 將HTML編碼應用到指定的字符串
URLEncode方法 將URL編碼規則應用到字符串
Execute方法 停止當前頁面的執行,把控制轉到指定路徑的網頁,當前環境也被傳到新的網頁,在該頁面執行完成后將控制傳遞回原來的頁面
Transfer方法 與Execute方法類似。不同的是,當新頁面執行完成時,執行過程結束而不是返回原來的頁面繼續執行

 

   1.設置ASP腳本執行時間

  Server對象只提供一個ScriptTimeout屬性,用於設置一個ASP腳本執行的超時時間,即腳本所允許的最長執行時間,如果在指定的時間內腳本沒有執行完成,系統將停止其執行,並且顯示超時錯誤。應用該屬性可以防止出現一些進入死循環的程序導致頁面服務器過載的問題

  語法:

    Server.ScriptTimeout=numSeconds

    numSeconds:用於指定腳本運行的最大可執行秒數,默認為90秒

  如例:設置ASP腳本執行時間

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
</head>
<body>
    <%
        Server.ScriptTimeout=10
        dim counter
        counter=0
        while(1)
            counter=counter+1
        wend
     %>
</body>
</html>
View Code

  上面的代碼如果未設置腳本執行時間,程序將一直執行到服務器關閉,所以,設置合適的超時時間(腳本的)是十分必要的,否則將浪費服務器資源,堵塞用戶請求,造成服務器忙的狀態。

  2.創建服務器組件實例

  調用Server對象的CreateObject方法可以創建服務器組件的實例,實現一些依賴腳本語言不能實現的功能,ASP有標准的函數調用接口,只要在操作系統上登記注冊了組件程序,COM就會在系統注冊表里維護這些資源,以供程序員調用

  語法:

    Server.CreateObject(progID)

    progID:用於指定要創建的對象類型,其格式為

    [Vendor. ] Component [.Version]

    Vendor:表示擁有該對象的應用名

    Component:表示該對象組件的名字

    Version:表示版本號

  例如:創建一個名為FSO的FileSystemObject對象實例,並將其保存在Session對象變量中

    <%

      dim fso

      set fso=Server.CreateObject(“Scripting.FileSystemObject”)

      Session("ofile")=fso

    %>

  CreateObject方法僅能創建外置對象實例,不能用來創建系統的內置對象實例。用該方法創建的對象實例僅在創建它的頁面中是有效的,即當處理完該頁面程序后,創建的對象會自動消失,若想在其他頁面引用該對象,可以將對象實例存儲在Session對象或者Application對象中。

   3.獲取文件的真是物理路徑

  server對象的MapPath方法用於返回虛擬目錄 在WEB服務器上的真是路徑

  語法:

    Server.MapPath(String)

    String:用於指定虛擬路徑的字符串

  虛擬路徑如果是以"/"或"\"開始表示,MapPath將返回服務器端的宿主目錄,如果虛擬路徑以其他字符串開始,MapPath將把這個虛擬路徑當作相對路徑,相對於當前調用MapPath的頁面,返回物理路徑。

  若想取得當前運行的ASP文件所在的真實路徑,可以使用Request對象的服務器變量PATH_INFO來映射當前文件的物理路徑。

  例如:獲取文件的真實物理路徑

  調用Server對象的MapPath方法輸出網站所在根目錄、根目錄下temp.asp文件的路徑、與當前文件同目錄file.txt文件的路徑以及應用服務器環境變量PATH_INFO映射當前文件所在路徑。

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
</head>
<body>
    <%
        Response.Write "Server.MapPath(""\"")返回網站根路徑:" & Server.MapPath("\") & "<br>"
        Response.Write "Server.MapPath(""/temp.asp"")返回" & Server.MapPath("/temp.asp") & "<br>"
        Response.Write "Server.MapPath(""file.txt"")返回" & Server.MapPath("/temp.asp") & "<br>"
        Response.Write "Server.MapPath(Request.ServerVariables(""PATH_INFO""))返回當前文件的物理路徑" & Server.MapPath(Request.ServerVariables("PATH_INFO")) & "<br>"
     %>
</body>
</html>
View Code

 

   4.輸出HTML源代碼

  通常情況下,HTML標記會被瀏覽器解釋執行,不會顯示在瀏覽器上,如果想將瀏覽器如實的顯示在瀏覽器上,可以調用Server對象的HTMLEncode方法,該方法用於將HTML標記進行編碼

  語法:

    Server.HTMLEncode(String)

    String:指定要編碼的字符串

七、ObjectContext事務處理對象

  ASP提供ObjectContext對象控制ASP的事務處理,事務在服務器端運行,主要用於對數據庫提供可靠的操作,當對數據庫進行關聯更改或者是同時更新多個數據庫的時候,需要確定所有更改是否都准確執行,如果其中任何一項更改失敗,數據庫中的數據將恢復到操作之前的狀態,只有在所有更改都准確執行時,數據的更新才有效。

  ASP事務處理程序是以MTS(Microsoft Transaction Server)事件處理系統為基礎的,MTS是以組件為主的事件處理系統,用於開發、配置和管理Internet、Intranet服務器應用程序。MTS不能對文件系統或者其他非事務性資源的更改進行恢復工作。

  ObjectContext對象的使用語法如下:

    objectContext.method

    method:ObjectContext對象的方法

  例如:應用ObjectContext對象終止網頁啟動的事務處理程序

    <% ObjectContext.SetAbort %>

  ObjectContext 對象是通過和事務服務器通信來對事務進行控制的,所以在ASP中使用ObjectContext之前必須聲明該頁包含事務。在ASP中使用@TRANSACTION關鍵字來標識當前運行頁面要以MTS事務服務器來處理,@TRANSACTION指令必須位於ASP文件中的第一行,否則會產生錯誤

  語法:

    <% @TRANSACTION=VALUE %>

    VALUE:@TRANSACTION關鍵字的取值

  @TRANSACTION關鍵字取值

取值 描述
Required 開始一個新的事務或者加入一個已經存在的事務
Requires_New 每次都開始一個新的事務
Supported 加入一個現有的事務處理,但不開始一個新的事務
Not_Supported 即不加入也不開始一個新的事務

  ObjectContext對象提供兩個方法和兩個事件控制ASP的事務處理。ObjectContext對象的成員如表

成員 描述
SetAbort方法 終止當前網頁所啟用的事務處理,將事務先前所做的處理撤銷到初始狀態
SetComplet方法 成功提交事務,完成事務處理
OnTrandactionAbort事件 事務終止時觸發的事件
OnTransactionCommit事件 事務成功提交時觸發的事件

   1.終止事務的處理

   ObjectContext對象提供了SetAbort方法和OnTransacctionAbort事件進行終止事務的處理。

  a.SetAbort方法

    回滾操作

  語法:

    ObjectContext.SetAbort

  b.OnTransactionAbort事件

  腳本本身不能判斷事務處理是成功還是失敗,可以編寫事務終止或者成功提交時調用的事件,顯式說明事務處理的情況,OnTransactionAbort事件是當事務處理失敗時引發的。

  語法:

    Sub OnTransactionAbort()

      ...處理程序

    End Sub

  如果事務異常終止,會觸發該事件

  2.完成事務的處理

  ObjectContext對象提供了SetComplet方法和OnTransactionCommit事件對事務成功完成進行處理

  a.SetComplet方法:提交

  語法:

    ObjectContext.SetComplet

    調用該方法將會忽略腳本中以前調用過的任何SetAbort方法

  b.OnTransactionCommit事件

    當前事務成功時引發

  語法:

    Sub OnTransactionCommit()

      ...處理程序

    End Sub

  例如:應用Objectcontext進行事務處理

  ①在index.asp頁面中建立表單並插入文本框及按鈕控件,用於添加管理員信息

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title></title>
</head>
<body>
    <form name="form1" method="post" action="code.asp">
        <p>用戶名:
          <input name="txt_name" type="text" id="txt_name" />
      </p>
        <p>密 碼:   
          <input name="txt_pwd" type="text" id="txt_pwd" />
        </p>
        <p>
          <input name="add" type="submit" id="add" value="添加" />
          <input name="reset" type="reset" value="重置" />
                </p>
    </form>
</body>
</html>
View Code

 

  ②在程序處理頁面code.asp中,首先建立數據庫連接、獲取表單傳遞的數據,然后執行Insert Into語句插入數據。如果此過程中出現異常則調用ObjectContext對象的Setabort方法終止事務,否則調用ObjectContext對象的SetComplet方法完成事務。分別定義OnTransactionAbort事件和OnTransactionCommit事件用於提示操作的執行結果

<%@LANGUAGE="VBSCRIPT" CODEPAGE="936"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312" />
<title>無標題文檔</title>
</head>
    <%
        '@Transaction=Required
    %>
    <%
        '創建數據庫連接
        Set conn=Server.CreateObject("ADODB.Connection")
        sql="Driver={Microsof Access Driver (*.mdb)};DBQ=" & Server.MapPath("DataBase/db.mdb") & ""
        conn.open(sql)
        '獲取表單數據
        txt_name=Request.Form("txt_name")
        txt_pwd=Request.Form("txt_pwd")
        if not isempty(Request("add")) then 
            if txt_name<>"" and txt_pwd<>"" then
                on error resume next
                '執行Insert Into語句
                sqlStr="insert into tb_user(UserName,PassWord) value('"&txt_name&"','"&txt_pwd&"')"
                conn.Execute(sqlStr)
                '如果出現異常則調用SetAbort方法終止事務
                If error.num>0 then
                    error.clear
                    ObjectContext.SetAbort()
                End if
                '調用SetComplet方法完成事務
                ObjectContext.SetComplete()
                '事務執行成功時觸發的事件
                Sub OnTransactionCommit()
                    Response.Write("<Script language='javascript'> alert('添加信息成功'); window.location.href='index.asp';</script>")
                End sub
                
                '事務執行失敗時觸發的事件
                Sub OnTransactionAbort()
                    Response.Write("<Script language='javascript'> alert('添加信息失敗,請重新輸入'); window.location.href='index.asp';</script>")
                    Response.Flush()
                End Sub
            Else
            Response.Write("<Script language='javascript'> alert('請填寫完整信息內容!'); window.location.href='index.asp';</script>")
            End If
        End If        
    %>
<body>
</body>
</html>
View Code

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM