從本篇開始作者從 ASP 內建對象著手,為大家詳細剖析 ASP 的六個內建對象和各種組件的特性和方法。
在正式開始學習 ASP 的內建對象和組件之前,先讓我們來認識一些基本概念,這將對各位今後的學習大有協助。請看下錶 :
Active Server |
隨 Windows NT 交付的伺服器方技術的集合。這些 技術為組件應用程式管理、資料庫訪問、事務和訊息 提供一致的伺服器方組件、指令碼模型和一套整合的系 統服務。 |
Active Server Pages (ASP) |
在伺服器上運行 ActiveX 指令碼和 ActiveX 組件的服 務器方指令碼環境。開發人員可以將指令碼和組件結合在 一起建立基於 Web 的應用程式。 |
ActiveX |
允許開發人員為 World Wide Web 建立互動式組件的 內涵豐富的Microsoft 技術術語。允許用不同語言編寫的軟 件組件在網路環境中一起工作的一組不依賴語言的 互操作技術。ActiveX 的關鍵元素是元件物件模型 (COM) 和 分布元件物件模型 (DCOM)。這些技術已得到開放組織的 許可,已移植到許多平台上。 |
ADO |
Active 資料對象。為基於 Internet 以資料為中心的 應用程式而最佳化的一組基於對象的資料提供者。ADO 基於發行的規範並且隨帶在Microsoft Internet Information Server 和 Microsoft Visual InterDev 中。 |
DSN |
資料來源名稱。開放式資料庫介面 (ODBC)用於引 用訪問資料所需的驅動程式或其他資訊的邏輯名稱。Internet信 息伺服器用於串連到 ODBC 資料來源(如 SQL Server 資料庫)的 名稱。 |
event: 事件 |
由使用者或 ActiveX 控制項產生的程式響應的任何 操作。一般事件包括按鍵盤鍵、通過使用按一下滑鼠選 擇按鈕和其他滑鼠操作。編程人員編寫響應這些操作 的代碼。 |
object: 對象 |
在物件導向編程中,由當作完整實體的操作 和資料群組成的變數。對象是基於特定模型的,在對象 中客戶使用對象的服務通過由一組方法或相關函數 的介面訪問對象的資料。然後用戶端可以調用這些方 法執行某中操作。 |
ODBC |
開放式資料庫介面。允許應用程式從各種跨 平台資料訪問的已有資料來源標準規格中訪問資料的 API。 |
SQL |
結構化查詢語言 (SQL) Structured Query Language。定義和訪 問關係型資料庫的國際標準。 |
什麼是對象?它可不是指你戀愛的男伴或女伴。在物件導向編程中,對象就是指由當作完整實體的操作和資料群組成的變數。對象是基於特定模型的,在對象中客戶使用對象的服務通過由一組方法或相關函數的介面訪問對象的資料,然後用戶端可以調用這些方法執行某中操作。ActiveX 組件是建立 Web 應用程式的關鍵,組件提供了在指令碼中執行任務的對象。ActiveX 組件是一個檔案,該檔案包含執行某項或一組任務的代碼,由於組件可以執行公用任務,這樣程式員們就不必自己去建立執行這些任務的代碼。可以利用組件作為指令碼和基於 Web 應用程式的基本構造塊。只要知道如何訪問組件提供的對象,即使是位編寫指令碼的新手,也可以在不瞭解組件運作方式的情況下編寫指令碼。總之,組件使您不用學習編程就能夠編寫強大的指令碼。組件是包含在動態連結程式庫 .dll 或可執行檔 .exe 中的可執行代碼。組件可以提供一個或多個對象以及對象的方法和屬性。要使用組件提供的對象,請建立對象的執行個體並將這個新的執行個體分配變數名。使用 ASP 的 Server.CreateObject 方法可以建立對象的執行個體,使用指令碼語言的變數分配指令可以為對象執行個體命名。如下例:
Set db=Server.CreateObject("ADODB.Connection")
這裡的變數 db 就是 ASP 程式建立的訪問資料庫的對象執行個體。
Active Server Pages 提供了可在指令碼中使用的內建對象。這些對象使使用者更容易收集通過瀏覽器請求發送的資訊、響應瀏覽器以及儲存使用者資訊 , 從而使對象開發人員擺脫了很多煩瑣的工作。目前的 ASP 版本總共提供了六個內建對象,下面讓我們將通過執行個體分別來進行學習。
一、Request 對象
可以使用 Request 對象訪問任何基於 HTTP 要求傳遞的所有資訊,包括從 HTML 表格用 POST 方法或 GET 方法傳遞的參數、cookie 和使用者認證。Request 對象使您能夠訪問用戶端發送給伺服器的位元據。
Request 的文法 :
Request[. 集合 | 屬性 | 方法 ]( 變數 )
在這裡作者將挑選一些常用的對象文法進行分析
1、Form
Form 集合通過使用 POST 方法的表格檢索郵送到 HTTP 要求本文中的表格元素的值。
文法
Request.Form(element)[(index)|.Count]
參數
element 指定集合要檢索的表格元素的名稱。
index 選擇性參數,使用該參數可以訪問某參數中多個值中的一個。它可以是 1 到 Request.Form(parameter).Count 之間的任意整數。
Count 集合中元素的個數
Form 集合按請求本文中參數的名稱來索引。Request.Form(element) 的值是請求本文中所有 element 值的數組。通過調用 Request.Form(element).Count 來確定參數中值的個數。如果參數未關聯多個值,則計數為 1。如果找不到參數,計數為 0。要引用有多個值的表格元素中的單個值,必須指定 index 值。index 參數可以是從 1到Request.Form(element).Count 中的任一數字。如果引用多個表格參數中的一個,而未指定 index 值,返回的資料將是以逗號分隔的字串。
可以使用重述符來顯示表格請求中的所有資料值。例如,使用者通過指定幾個值填寫表格,見下圖。
對於 hobby 參數,您可以使用下面的指令碼檢索這些值。 < html> < head>< title>< /title>< /head> < body> < p> 請填寫你的愛好 < /p> < form method="POST" action="form.asp"> < p>< input type="text" name="hobby" size="20">< br> < input type="checkbox" name="hobby" value=" 足球 "> 足球 < input type="checkbox" name="hobby" value=" 乒乓球 "> 乒乓球 < /p> < p>< input type="submit" value=" 發送 " name="B1">< input type="reset" value=" 重填 " name="B2">< /p> < /form> < % For Each i In Request.Form("hobby") Response.Write i & "< BR>" Next %> < /body>< /html>
將以上代碼剪貼到記事簿中(注意將“< ”後面的空格去掉),儲存為 form.asp 檔案並運行,request 對象可以根據你在 form 中填入或選擇元素內容的不同將元素逐個顯示出來。
當然使用 For...Next 迴圈也可以產生同樣的輸出,如下所示 :
< %
For i = 1 To Request.Form("hobby").Count
Response.Write Request.Form("hobby")(i) & "< BR>"Next
%>
2、QueryString
QueryString 集合檢索 HTTP 查詢字串中變數的值 ,HTTP 查詢字串由問號 (?) 後的值指定。如:
< A HREF= "example.asp?string=this is a sample">string sample< /A>
產生值為 "this is a sample" 的變數名字串。通過發送表格或由使用者在其瀏覽器的地址框中鍵入查詢也可以產生查詢字串。
文法
Request.QueryString(variable)[(index)|.Count]
QueryString 集合可以讓您以名稱檢索 QUERY_STRING 變數。Request.QueryString( 參數 ) 的值是出現在 QUERY_STRING 中所有參數的值的數組。通過調用Request.QueryString(parameter).Count 可以確定參數有多少個值。
我們也可以使用 QueryString 來達到與前一個範例相同的功能。只需要將 request.form 部分替換如下:
< %
For Each i In Request.querystring("hobby")
Response.Write i & "< BR>"
Next
%>
3、Cookies
什麼是 Cookie?Cookie 其實是一個標籤,當你訪問一個需要唯一標識你的站址的 WEB 網站時,它會在你的硬碟上留下一個標記,下一次你訪問同一個網站時,網站的頁面會尋找這個標記。每個 WEB 網站都有自己的標記,標記的內容可以隨時讀取,但只能由該網站的頁面完成。每個網站的 Cookie 與其他所有網站的 Cookie 存在同一檔案夾中的不同檔案內(你可以在 Windows 的目錄下的 Cookie 檔案夾中找到它們)。一個 Cookie 就是一個唯一標識客戶的標記,Cookie 可以包含在一個對話期或幾個對話期之間某個 WEB 網站的所有頁面共用的資訊,使用 Cookie 還可以在頁面之間交換資訊。Request 提供的 Cookies 集合允許使用者檢索在 HTTP 要求中發送的 cookie 的值。這項功能經常被使用在要求認證客戶密碼以及電子公告板、WEB 聊天室等 ASP 程式中。
文法
Request.Cookies(cookie)[(key)|.attribute]
參數
cookie 指定要檢索其值的 cookie。
key 選擇性參數,用於從 cookie 字典中檢索子關鍵字的值。
attribe 指定 cookie 自身的有關資訊。如:HasKeys 唯讀,指定 cookie 是否包含關鍵字。
可以通過包含一個 key 值來訪問 cookie 字典的子關鍵字。如果訪問 cookie 字典時未指定 key,則所有關鍵字都會作為單個查詢字串返回。例如,如果 MyCookie 有兩個關鍵字 ,First 和Second,而在調用 Request.Cookies 時並未指定其中任何一個關鍵字,那麼將返回下列字串。
First=firstkeyvalue&Second=secondkeyvalue
如果用戶端瀏覽器發送了兩個同名的 cookie,那麼 Request.Cookie 將返回其中路徑結構較深的一個。例如,如果有兩個同名的的 cookie,但其中一個的路徑屬性為 /www/ 而另一個為 /www/home/,用戶端瀏覽器同時將兩個 cookie 都發送到 /www/home/ 目錄中,那麼 Request.Cookie 將只返回第二個 cookie。
要確定某個 cookie 是不是 cookie 字典(cookie 有否有關鍵字),可使用下列指令碼。
< %= Request.Cookies("myCookie").HasKeys %>
如果 myCookie 是一個 cookie 字典,則前面的賦值為 TRUE。否則,為 FALSE。下面我們來看看一個 cookie 的應用執行個體:
< %
nickname=request.form("nick")response.cookies("nick")=nickname ' 用 response 對象將使用者名稱寫入 Cookie 之中 response.write " 歡迎 "&request.cookies("nick")&" 光臨小站!"
%>
< html>< head>< meta http-equiv="Content-Type" content="text/html; charset=gb2312">
< title>cookie< /title>
< meta name="GENERATOR" content="Microsoft FrontPage 3.0">< /head>
< body>
< form method="POST" action="cookie.asp">
< p>< input type="text" name="nick" size="20">
< input type="submit" value=" 發送 " name="B1">< input type="reset" value=" 重填 " name="B2">< /p>< /form>
< /body>< /html>
這其實是一個在基於 WEB 的 BBS 或 CHAT 的 ASP 程式中常用的手法,它將使用者在起始頁面上填入的姓名儲存在 cookie 中,這樣後面的程式就可以很容易地調用該使用者的 nick 了。
4、ServerVariables
大家都知道在瀏覽器中瀏覽網頁的時候使用的傳輸協議是 HTTP,在 HTTP 的標題檔案中會記錄一些用戶端的資訊,如 : 客戶的 IP 位址等等,有時伺服器端需要根據不同的用戶端資訊做出不同的反映,這時候就需要用 ServerVariables 集合擷取所需資訊。
文法
Request.ServerVariables ( 伺服器環境變數 )
由於伺服器環境變數較多,作者僅將一些常用的變數在下表中列出 :
ALL_HTTP |
用戶端發送的所有 HTTP 標題檔案。 |
CONTENT_LENGTH |
用戶端發出內容的長度。 |
CONTENT_TYPE |
內容的資料類型。如:“text/html”。同附加資訊 的查詢一起使用,如 HTTP 查詢 GET、POST 和 PUT。 |
LOCAL_ADDR |
返回接受請求的伺服器位址。如果在綁定多 個 IP 位址的多重主機機器上尋找請求所使用的地址 時,這條變數非常重要。 |
LOGON_USER |
使用者登入 Windows NT 的帳號。 |
QUERY_STRING |
查詢 HTTP 要求中問號(?)後的資訊。 |
REMOTE_ADDR |
發出請求的遠程主機 (client) 的 IP 位址。 |
REMOTE_HOST |
發出請求的主機 (client) 名稱。如果伺服器無此 資訊,它將設定為空白的 MOTE_ADDR 變數。 |
REQUEST_METHOD |
該方法用於提出請求。相當於用於 HTTP 的 GET、HEAD、POST等 等。 |
SERVER_NAME |
出現在自引用 URL 中的伺服器主機名稱、DNS 化名 或 IP 位址。 |
SERVER_PORT |
發送請求的連接埠號碼。 |
我們可以使用以下指令碼列印出所有的伺服器環境變數。
< TABLE>
< TR>< TD>< B>Server Variable< /B>< /TD>< TD>< B>Value< /B>< /TD>< /TR>< % For Each name In Request.ServerVariables %>
< TR>< TD> < %= name %> < /TD>< TD> < %= Request.ServerVariables(name) %> < /TD>< /TR>< /TABLE>
< % Next %>
今天我們詳細學習了 ASP 內建對象中的 request 對象,這也是 ASP 程式中使用最頻繁的對象,希望大家在課後多多實踐。