• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • ASP 3.0高級編程(十)

    發表于:2007-06-30來源:作者:點擊數: 標簽:
    (1) 遍歷Contents集合的代碼 為了遍歷Contents集合,可使用一個For Each ... Next結構。集合中的每一項可以是一個簡單的Variant類型變量、一個Variant數組或者一個對象的引用。因為需要對每種類型的值進行不同的處理,所以就不得不對每一個進行檢查來判別其類
    (1) 遍歷Contents集合的代碼
    為了遍歷Contents集合,可使用一個For Each ... Next結構。集合中的每一項可以是一個簡單的Variant類型變量、一個Variant數組或者一個對象的引用。因為需要對每種類型的值進行不同的處理,所以就不得不對每一個進行檢查來判別其類型。
    在VBScript中可使用VarType函數完成這個工作。這里使用IsObject和IsArray函數代替:
    For Each objItem in Application.Contents
    If IsObject(Application.Contents(objItem)) Then
    Response.Write “Object reference: ‘” & objItem & “’

    ElseIf IsArray(Application.Contents(objItem)) Then
    Response.Write “Array: ‘” & objItem & “’ contents are:

    VarArray = Application.Contents(objItem)
    ‘Note: the following only works with a one-dimensional array
    For intLoop = 0 To UBound(varArray)
    Response.Write “ Index(“ & intLoop & “) = “ & _
    VarArray(intLoop) & “

    Next
    Else
    Response.Write “Variable: ‘” & objItem & “’ = “ _
    & Application.Contents(objItem) & “

    End If
    Next
    注意程序如何從Application對象檢索該數組。將其分配給一個局部(Variant)變量,使用下面的語句:
    varArray = Application.Contents(objItem)
    使用UBound函數可以查找出數組的大?。ㄔ氐臄盗浚?,這個值可以作為遍歷的終止條件:
    For intLoop = 0 UBound(varArray)
    這個例子是一維數組,并將只顯示這樣的一個數組的內容??筛鶕枰庉嫶a以處理多維數組,例如:
    For intLoop = 0 To UBound(varArray)
    IntNumberOfDimensions = UBound(varArray, 1)
    For intDimension = 0 To intNumberOfDimensions
    Response.Write “ Index(“ & intLoop & “) = “ _
    & varArray(intLoop, intDimension)
    Next
    Response.Write “

    Next
    (2) 遍歷StaticObjects集合的代碼
    StaticObjects集合包含了所有在global.asa中使用<OBJECT>元素聲明的對象引用。因為每個條目都是一個對象變量,可用簡單些的代碼對這個數組進行遍歷。我們將輸出對象的名字(在ID屬性中原有的定義):
    For Each objItem in Application.StaticObjects
    If IsObject(Application.StaticObjects(objItem)) Then
    Response.Write “<OBJECT> element: ID=’” & objItem & “’

    End If
    Next
    1. 增加值到Contents集合
    增加值到Contents集合的方法,與在global.asa網頁的腳本代碼中使用過的方法相同。示例網頁允許把一個新的Variant值增加到Application對象中,并已有建議的名字和值(可根據需要進行編輯),如圖3-15所示:

    圖3-15 增加值到Contents集合的屏幕
    單擊按鈕,重新載入這個網頁,把值增加到Application.Contents集合中,并且在列表中顯示,如圖3-16所示:

    圖3-16 顯示Contents集合內容的屏幕
    增加新的Contents條目的代碼
    所有的按鈕和其他HTML控件放置在示例網頁中的一個窗體上。ACTION設置了當前網頁的路徑,提交該窗體時,重新裝入。METHOD屬性為“POST”,所以控件中的值出現在Request.Form集合中。在以前的章節中采用過這兩種技術:
    <FORM ACTION=”<% = Request.ServerVariables(“SCRIPT_NAME”) %>” METHOD=”POST”>
    該窗體上的按鈕都是普通的HTML INPUT控件,具有相同的標題(三個空格)但名字不同。例如,創建第一個按鈕(把值增加到Application對象中)的代碼是:
    <INPUT TYPE=”SUBMIT” NAME=”cmdAdd” VALUE=” ”>
    重新載入該網頁時,檢查Request.Form集合,判定單擊的是哪個SUBMIT按鈕,并進行相應的處理。如果是增加一個值到Application對象的按鈕(該按鈕在HTML的<INPUT>元素中被命名為cmdAdd),使用下面的程序段:
    If Len(Request.Form("cmdAdd")) Then
    strVarName = Request.Form("txtVarName")
    strVarValue = Request.Form("txtVarValue")
    Application.Lock
    Application("strVarName") = strVarValue
    Application.Unlock
    End If
    注意程序如何使用Application.Lock和Application.Unlock方法,確保這些值不會因兩個用戶并發地訪問而產生混亂。如果只是對一個特定的值進行設置,一般不可能發生這種情況。但一直使用Lock和Unlock方法是明智的。
    2. Contents集合中刪除值
    在例子網頁的底部有兩個按鈕,如圖3-17所示:

    圖3-17 顯示在網頁底部的兩個按鈕
    這兩個按鈕允許從Application.Contents集合中刪除值。第一個按鈕從集合中刪除單個的指定值,下拉列表框顯示的是Contents集合值的名字的列表(記住,不能從StaticObjects集合中刪除值,因為它們是靜態的)。
    通過遍歷Contents集合(如前面我們所做的)執行ASP網頁時,創建該列表。但是,我們僅收集每項的名字并把它們放到<SELECT>列表元素內的<OPTION>元素中:

    <SELECT NAME=”lstRemove” SIZE=”1”>
    <%
    For Each objItem in Application.Contents
    Response.Write “<OPTION>” & objItem & “</OPTION>”
    Next
    &>
    </SELECT>

    該ASP代碼執行以后,在瀏覽器中看到的結果是:
    <SELECT NAME=”lstRemove” SIZE=”1”>
    <OPTION>ADOConnection</OPTION>
    <OPTION>Variant_Array</OPTION>
    <OPTION>Start_Time</OPTION>
    <OPTION>Visit_Count</OPTION>
    <OPTION>My_New_Value</OPTION>
    </SELECT>
    (1) 刪除單個值
    當單擊按鈕刪除單個值時,該窗體再次提交給相同的網頁,但是這一次將查找名為cmdRemoveThis的SUBMIT按鈕。如果存在(即單擊了這個按鈕),則使用列表框的值,調用Application.Contents集合的Remove方法:
    If Len(Request.Form("cmdRemoveThis")) Then
    strToRemove = Request.Form("lstRemove")
    Response.Write "strToRemove = " & strToRemove
    Application.Lock
    Application.Contents.Remove(strToRemove)
    Application.Unlock
    End If
    注意這是Contents集合的一個方法,而不是Application對象的。語法是Application.Contents.Remove,而不是Application.Remove。
    從Contents集合中刪除Start_Time值的結果如圖3-18所示:

    圖3-18 刪除Start_Time值后的屏幕
    (2) 刪除所有的值
    如果單擊三個SUBMIT類型按鈕中的最后一個(如圖3-18所示),該網頁中的代碼將檢測到單擊的按鈕為cmdRemoveAll,將執行Application.Contents集合的RemoveAll方法:
    If Len(Request.Form("cmdRemoveAll")) Then
    Application.Lock
    Application.Contents.RemoveAll
    Application.Unlock
    End If
    再次提醒,這是Contents集合的一個方法,而不是Application。語法是Application.Contents.RemoveAll,而不是Application.RemoveAll。
    圖3-19所示的是從Contents集合中刪除所有值的結果(記住在運行時間不能從StaticObjects集合刪除項):

    圖3-19 刪除Contents集合中所有值的屏幕

    3.3.5 活動中的ASP Session對象
    示例網頁的第二個示例頁面show_session.asp,示范了如何使用Session對象??稍贑hapter03子目錄中的開始菜單(Default.asp)中打開它。
    1. 顯示和更新Session集合
    Session對象示例頁面看起來與剛剛使用過的Application對象示例頁面相似。它遍歷Session對象的Contents和StaticObjects集合,顯示其名字和(可能的話)相應的值。如果把這些值與Application對象頁面進行比較,將會看到不同之處。
    這里還能夠看到客戶端IP地址的一些其他值。這是當會話啟動時global.asa中的代碼從Request.ServerVariables集合中得到的。這個頁面還顯示四個會話屬性的值,如圖3-20所示:

    圖3-20 Session對象顯示屬性的屏幕
    下面是例子中使用的golbal.asa文件的相關段落,它把缺省值增加到圖3-20所示的屏幕上所看到的會話中:
    ...
    <!-- Declare instance of the ASPContentLink component
    with session-level scope //-->
    <OBJECT ID="ASPContentLink" RUNAT="Server" SCOPE="Session"
    PROGID="MSWC.NextLink">
    </OBJECT>

    <SCRIPT LANGUAGE="VBScript" RUNAT="Server">
    ...
    ...
    Sub Session_onStart()

    ‘’Create an instance of the AdRotator component with session-level scope
    Set Session("ASPAdRotator") = Server.CreateObject("MSWC.AdRotator")
    Dim varArray(3) ‘’Create a Variant array and fill it
    varArray(0) = "This is a"
    varArray(1) = "Variant array"
    varArray(2) = "stored in the"
    varArray(3) = "Session object"
    Session("Variant_Array") = varArray ‘’Store it in the Session
    Session("Start_Time") = CStr(Now) ‘’Store the date/time as a string

    ‘’We can aclearcase/" target="_blank" >ccess the contents of the Request and Response in a Session_onStart
    ‘’event handler for the page that initiated the session. This is the *only*
    ‘’place that the ASP page context is available like this.
    ‘’as an example, we can get the IP address of the user:
    Session("Your_IP_Address") = Request.ServerVariables("REMOTE_ADDR")

    Application.Lock ‘’Prevent concurrent updates
    intVisits = Application("Visit_Count") + 1 ‘’Increment counter variable
    Application("Visit_Count") = intVisits ‘’Store back in Application
    Application.Unlock ‘’Release lock on Application

    End Sub
    ...
    ...
    </SCRIPT>
    遍歷Contents和StaticObjects集合的代碼與前面在Application對象示例中使用的代碼一樣,只不過這里引用了Session.Contents和Session.StaticObjects集合,而不是Application.Contents和Appliction.StaticObjects集合。
    靠近頁面底部的按鈕的功能是把值增加到Session.Contents集合和從Session.Contents集合刪除值。這些按鈕與在Application對象示例頁面中相應的按鈕工作方式相同,這里訪問的是Session.Contents集合,以及相應的Remove和RemoveAll方法。我們不再重復解釋。
    2. 終止一個用戶會話
    在Session對象頁面的底部有一個按鈕,該按鈕終止當前的用戶會話,這通過調用Session對象的Abandon方法實現。它與其余的HTML控件在相同的窗體上,名為cmdAbandon。當該窗體再次被提交給這個網頁時,在Request.Form集合中查找這個值(如同在Application對象例子中做的一樣)。如發現這個值,則將該用戶重定向到另一個網頁:
    If Len(Request.Form("cmdAbandon")) Then
    Response.Clear
    Response.Redirect "abandon.asp"
    Response.End
    End If
    新的頁面名為abandon.asp,十分簡單,除了創建消息的文本和HTML以外只有如下的代碼:
    <% Session.Abandon %>
    該網頁的其余部分只是一個包含單個SUBMIT按鈕的窗體。注意如何使用來自Request.ServerVariables集合的引用網頁(HTTP_REFERER)的URL的值,以確保重新載入前一個網頁(Session對象例子網頁):
    <FORM ACTION="<% = Request.ServerVariables("HTTP_REFERER") %>" METHOD="POST">

    <DIV CLASS="subhead">Your Session Has Been Terminated</DIV>
    A new <B>Session</B> will be started when you load another

    ASP page. It will contain any values that are defined in

    the <B>global.asa</B> file for this application.

    <INPUT TYPE="SUBMIT" NAME="cmdOK" VALUE=" ">
    Return to the previous page

    </FORM>
    結果如圖3-21所示。這時,當前的用戶會話已經被終止(放棄),并且該用戶不能引用原先的Session集合或屬性的內容:

    圖3-21 終止一個用戶會話后的屏幕
    然而,記住這一切是在調用Abandon方法的網頁執行時,甚至在對該方法的調用已經完成以后,仍能夠從Session對象中獲得用戶的會話內容。當此網頁結束時,會話才結束。
    當然,當返回到顯示會話內容的Session對象示例網頁時,將啟動一個新的ASP會話。它將有一個不同的Start_Time值和通過執行global.asa中的代碼創建的其他缺省的會話值,如圖3-22所示:

    圖3-22 重新建立一個用戶會話后的屏幕
    注意,Session.SessionID屬性值沒有改變。ASP試圖重新分配相同的會話ID,因此不能依靠該值來判定一個新的會話已經啟動。

    3.4 小結
    本章介紹了兩個ASP內置對象:Application和Session對象。這些對象引入了ASP的應用程序和用戶會話的概念(兩者都是特定的術語,并且不是通常談話時的意義)。ASP應用程序允許分配專門的屬性給頁面集,定義了IIS和ASP如何管理這些網頁及所使用的其他組件。
    然而,使用ASP應用程序和會話的主要原因是需要自動地獲得狀態。換句話說,存儲信息和變量引用的能力,要么對用戶裝載的所有網頁是全局和可用的(即在一個應用程序中),要么僅僅對一個指定的用戶的所有網頁是可用的(在一個會話中)。這使建立Web應用程序變得非常簡單(即應用程序在Web上工作,但能夠像傳統的編譯的應用程序一樣能完成指定的任務)。
    本章通過一些示例頁面,詳細介紹如何使用ASP的Application和Session對象。這些頁面示范了這兩個對象可用的所有技術。

    原文轉自:http://www.kjueaiud.com

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>