Damit sie ordnungsgemäß funktionieren, müssen sie in einer virtuellen Anwendung auf dem Server abgelegt werden und die bereitgestellte Datei global.asa muss im Stammverzeichnis der Anwendung abgelegt werden. Die einfachste Möglichkeit besteht darin, die Datei global.asa im Stammverzeichnis der Standardwebsite abzulegen (standardmäßig C:/InetPub/WWWRoot).
Es empfiehlt sich, alle vorhandenen global.asa-Dateien umzubenennen, damit sie später wiederhergestellt werden können.
1. Anzeigen des Inhalts der Application-Sammlung
Das ASPCounter-Objekt ist Mitglied der StaticObjects-Sammlung (definiert durch das <OBJECT>-Element), der Rest (instanziiert durch Server.CreateObject) ist jedoch Mitglied der Contents-Sammlung.
Sie können die in diese Sammlungen eingefügten Werte anhand der Beispielwebseite global.asa sehen, die wir zuvor gesehen haben:
<!-- Declare-Instanz der ASPCounter-Komponente mit
Geltungsbereich auf Anwendungsebene //-->
<OBJECT ID=“ASPCounter“ RUNAT=“Server“ SCOPE=“Applicatoin“
PROGID=“MSWC.Counters“>
</OBJEKT>
...
...
<SCRIPT LANGUAGE=“VBScript“ RUNAT=“Server“>
Sub Application_onStart()
'Erstellen Sie eine Instanz einer ADO-Verbindung mit Geltungsbereich auf Anwendungsebene
Set Application("ADOConnection") = Server.CreateObject("ADODB.Connection")
Dim varArray(3) 'Erstelle ein Variant-Array und fülle es
varArray(0) = „Das ist ein“
varArray(1) = „Variantenarray“
varArray(2) = „gespeichert in“
varArray(3) = „Anwendungsobjekt“
Application("Variant_Array") = varArray 'In der Anwendung speichern
Application(“Start_Time”) = CStr(Now) 'Speichern Sie das Datum/die Uhrzeit als String
Application(“Visit_Count”) = 0 'Zählervariable auf Null setzen
Sub beenden
...
...
</SCRIPT>
(1) Code zum Durchlaufen der Contents-Auflistung
Zum Durchlaufen der Contents-Auflistung können Sie eine For Each...Next-Struktur verwenden. Jedes Element in der Sammlung kann eine einfache Variable vom Typ Variant, ein Array vom Typ Variant oder ein Verweis auf ein Objekt sein. Da jeder Werttyp unterschiedlich behandelt werden muss, muss jeder Wert überprüft werden, um seinen Typ zu bestimmen.
Sie können die VarType-Funktion in VBScript verwenden, um diese Arbeit zu erledigen. Verwenden Sie stattdessen die Funktionen IsObject und IsArray:
Für jedes objItem in Application.Contents
Wenn IsObject(Application.Contents(objItem)) Dann
Response.Write "Objektreferenz: '" & objItem & "'
"
ElseIf IsArray(Application.Contents(objItem)) Then
Response.Write "Array: '" & objItem & "' Inhalte sind:
"
VarArray = Application.Contents(objItem)
'Hinweis: Das Folgende funktioniert nur mit einem eindimensionalen Array
Für intLoop = 0 To UBound(varArray)
Response.Write „ Index(“ & intLoop & „) = „ & _
VarArray(intLoop) & „
"
Nächste
Anders
Response.Write "Variable: '" & objItem & "' = " _
& Application.Contents(objItem) & „
"
Ende wenn
als Nächstes,
wie das Programm dieses Array aus dem Anwendungsobjekt abruft. Weisen Sie es einer lokalen Variablen (Variant) zu und verwenden Sie die folgende Anweisung:
varArray = Application.Contents(objItem)
Verwenden Sie die UBound-Funktion, um die Größe des Arrays (Anzahl der Elemente) zu ermitteln. Dieser Wert kann als Abschlussbedingung verwendet werden für die Durchquerung:
For intLoop = 0 UBound(varArray)
Dieses Beispiel ist ein eindimensionales Array und zeigt nur den Inhalt eines solchen Arrays an. Bearbeiten Sie den Code nach Bedarf, um mehrdimensionale Arrays zu verarbeiten, zum Beispiel:
For intLoop = 0 To UBound(varArray)
IntNumberOfDimensions = UBound(varArray, 1)
Für intDimension = 0 bis intNumberOfDimensions
Response.Write „ Index(“ & intLoop & „) = „ _
& varArray(intLoop, intDimension)
Nächste
Response.Write „“
Weiter
(2) Code zum Durchlaufen der StaticObjects-Sammlung
Die StaticObjects-Sammlung enthält alle Objektverweise, die mit dem <OBJECT>-Element in global.asa deklariert wurden. Da es sich bei jedem Eintrag um eine Objektvariable handelt, kann das Array mit einfacherem Code iteriert werden. Wir geben den Namen des Objekts aus (wie ursprünglich in der ID-Eigenschaft definiert):
Für jedes objItem in Application.StaticObjects
Wenn IsObject(Application.StaticObjects(objItem)) Dann
Response.Write "<OBJECT> element: ID='" & objItem & "'
"
Ende wenn
Weiter
2. Operationen an Sammlungen
1) Werte zur Contents-Sammlung hinzufügen
Die Methode zum Hinzufügen von Werten zur Contents-Sammlung ist die gleiche wie im Skriptcode der global.asa-Webseite. Ermöglicht das Hinzufügen eines neuen Variant-Werts zum Anwendungsobjekt mit einem vorgeschlagenen Namen und Wert (der nach Bedarf bearbeitet werden kann). Klicken Sie auf die Schaltfläche, laden Sie die Seite neu, fügen Sie den Wert zur Application.Contents-Sammlung hinzu und zeigen Sie in der Liste an .
Fügen Sie den Code für den neuen Inhaltseintrag hinzu,
um alle Schaltflächen und anderen HTML-Steuerelemente in einem Formular auf der Beispielwebseite zu platzieren. ACTION legt den Pfad der aktuellen Webseite fest und lädt diese neu, wenn das Formular gesendet wird. Das METHOD-Attribut ist „POST“, sodass der Wert im Steuerelement in der Request.Form-Sammlung angezeigt wird. Diese beiden Techniken wurden in vorherigen Kapiteln verwendet:
<FORM ACTION="<% = Request.ServerVariables("SCRIPT_NAME") %>" METHOD="POST">
Die Schaltflächen in diesem Formular sind gewöhnliche HTML-INPUT-Steuerelemente und haben den gleichen Titel (drei Leerzeichen), aber ein anderer Name. Der Code zum Erstellen der ersten Schaltfläche (Hinzufügen des Werts zum Anwendungsobjekt) lautet beispielsweise:
<INPUT TYPE="SUBMIT" NAME="cmdAdd" VALUE="">
Überprüfen Sie beim Neuladen der Webseite die Request.Form-Sammlung , Stellen Sie fest, auf welche SENDEN-Schaltfläche geklickt wurde, und behandeln Sie sie entsprechend. Wenn es sich um eine Schaltfläche handelt, die dem Anwendungsobjekt einen Wert hinzufügt (die Schaltfläche heißt im HTML-Element <INPUT> cmdAdd), verwenden Sie das folgende Programmsegment:
If Len(Request.Form("cmdAdd")) Then
strVarName = Request.Form("txtVarName")
strVarValue = Request.Form("txtVarValue")
Anwendungssperre
Anwendung("strVarName") = strVarValue
Anwendung.Entsperren
End If
Beachten Sie, wie die Anwendung die Methoden Application.Lock und Application.Unlock verwendet, um sicherzustellen, dass diese Werte nicht durch zwei Benutzer verwechselt werden, die gleichzeitig darauf zugreifen. Dies ist im Allgemeinen nicht möglich, wenn Sie nur einen bestimmten Wert festlegen. Es ist jedoch ratsam, immer die Methoden „Sperren“ und „Entsperren“ zu verwenden.
2) Löschen Sie Werte aus der Contents-Sammlung.
Erstellen Sie diese Liste, wenn Sie die ASP-Webseite ausführen, indem Sie die Contents-Sammlung durchlaufen (wie wir es zuvor getan haben). Wir sammeln jedoch nur die Namen der einzelnen Elemente und fügen sie in das Element <OPTION> innerhalb des Listenelements <SELECT> ein:
…
<SELECT NAME=“lstRemove“ SIZE=“1“>
<%
Für jedes objItem in Application.Contents
Antwort. Schreiben Sie „<OPTION>“ & objItem & „</OPTION>“
Nächste
&>
</SELECT>
…
Nachdem der ASP-Code ausgeführt wurde, ist das im Browser angezeigte Ergebnis:
<SELECT NAME="lstRemove" SIZE="1">
<OPTION>ADOConnection</OPTION>
<OPTION>Variant_Array</OPTION>
<OPTION>Start_Time</OPTION>
<OPTION>Visit_Count</OPTION>
<OPTION>Mein_Neuer_Wert</OPTION>
</SELECT>
(1) Einen einzelnen Wert löschen
Wenn Sie auf die Schaltfläche zum Löschen eines einzelnen Werts klicken, wird das Formular erneut an dieselbe Webseite gesendet, dieses Mal wird jedoch eine SENDEN-Schaltfläche für cmdRemoveThis eingerichtet und anschließend die Schaltfläche „Entfernen“. Die Methode der Application.Contents-Sammlung wird aufgerufen:
If Len(Request.Form("cmdRemoveThis")) Then
strToRemove = Request.Form("lstRemove")
Response.Write "strToRemove = " & strToRemove
Anwendungssperre
Application.Contents.Remove(strToRemove)
Anwendung.Entsperren
End If
Beachten Sie, dass es sich dabei um eine Methode der Contents-Auflistung und nicht um das Application-Objekt handelt. Die Syntax lautet Application.Contents.Remove, nicht Application.Remove.
Das Ergebnis des Entfernens des Start_Time-Werts aus der Contents-Auflistung.
(2) Löschen Sie alle Werte.
Wenn Sie auf die letzte der drei Schaltflächen vom Typ SUBMIT klicken, erkennt der Code auf der Webseite, dass es sich bei der angeklickten Schaltfläche um cmdRemoveAll handelt, und führt die RemoveAll-Methode der Application.Contents-Sammlung aus:
Wenn Len( Anfrage. Form("cmdRemoveAll")) Dann
Anwendungssperre
Application.Contents.RemoveAll
Anwendung.Entsperren
End If
erinnert Sie noch einmal daran, dass es sich um eine Methode der Contents-Sammlung und nicht um Application handelt. Die Syntax lautet Application.Contents.RemoveAll, nicht Application.RemoveAll.