ASP-Vorlesungsreihe (8) Verwendung von Sammlungen
Autor:Eve Cole
Aktualisierungszeit:2009-05-30 19:59:11
Die meisten in ASP integrierten Objekte unterstützen Sammlungen. In Sammlungen werden Zeichenfolgen, Zahlen, Objekte und andere Werte gespeichert. Sammlungen sind Arrays sehr ähnlich, außer dass die Sammlung automatisch erweitert und durchsucht wird, wenn Elemente gespeichert oder abgerufen werden. Im Gegensatz zu Arrays verschiebt sich die Position der Elemente, wenn eine Sammlung geändert wird. Auf Elemente kann über ihren Namen, Index oder durch Durchlaufen aller Elemente in der Sammlung zugegriffen werden.
Zugreifen auf Elemente nach Name und Index Sie können auf bestimmte Elemente in einer Sammlung zugreifen, indem Sie den Elementnamen verwenden. Die Contents-Auflistung enthält beispielsweise alle im Session-Objekt gespeicherten Variablen. Besitzt außerdem alle von Server.CreateObject erstellten Objekte. Gehen Sie davon aus, dass die folgenden Benutzerinformationen im Sitzungsobjekt gespeichert sind:
<%
Session.Contents("FirstName") = "Sam"
Session.Contents("LastName") = "Woo"
Session.Contents("Alter") = 29
%>
Auf Elemente kann über den Namen zugegriffen werden, der mit dem Element verknüpft war, als es in der Sammlung gespeichert wurde. Der folgende Ausdruck gibt beispielsweise die Zeichenfolge „Sam“ zurück:
<%= Session.Contents("FirstName") %>
Auf Elemente kann auch über den mit dem Element verknüpften Index oder die Nummer zugegriffen werden. Der folgende Ausdruck ruft beispielsweise die im zweiten Speicherbereich des Session-Objekts gespeicherten Informationen ab und gibt „Woo“ zurück:
<%= Session.Contents(2) %>
ASP-Sammlungen werden beginnend mit 1 nummeriert. Wenn Elemente zur Sammlung hinzugefügt oder daraus entfernt werden, ändert sich der mit dem Element verknüpfte Index. Daher kann nicht davon ausgegangen werden, dass der Index des Artikels unverändert bleibt. Wie in den folgenden Themen erläutert wird, wird der Zugriff mithilfe von Indizes im Allgemeinen verwendet, um eine Sammlung zu durchlaufen oder auf Elemente in einer schreibgeschützten Sammlung zuzugreifen.
Der Zugriff auf Projekte erfolgt über ihre Kurznamen. ASP durchsucht die mit Objekten verknüpften Sammlungen in einer bestimmten Reihenfolge. Wenn ein Element mit einem bestimmten Namen nur einmal in einer Objektsammlung vorkommt, können Sie den Namen der Sammlung entfernen:
<%= Session("FirstName") %>
Beim Zugriff auf Elemente, die in Anwendungs- oder Sitzungsobjekten gespeichert sind, ist es im Allgemeinen sicher, den Sammlungsnamen zu entfernen. Für Request-Objekte ist es jedoch besser, den Sammlungsnamen anzugeben, da die Sammlung wahrscheinlich doppelte Namen enthält.
Durchlaufen einer Sammlung Durchlaufen Sie alle Elemente einer Sammlung, um mehr über die in der Sammlung gespeicherten Elemente zu erfahren oder Elemente zu ändern. Beim Durchlaufen einer Sammlung muss ein Sammlungsname angegeben werden. Sie können beispielsweise die For...Each-Anweisung in VBScript verwenden, um auf Elemente zuzugreifen, die in einem Session-Objekt gespeichert sind:
<%
'Deklarieren Sie eine Zählervariable.
Element dimmen
'Zeigen Sie für jedes Element in der Sammlung seinen Wert an.
Für jedes Element in Session.Contents
Response.Write Session.Contents(Item) & „<BR>“
Nächste
%>
Sie können die For...Next-Anweisung in VBScript verwenden, um eine Sammlung zu durchlaufen. Um beispielsweise die drei in der Sitzung im obigen Beispiel gespeicherten Elemente aufzulisten, würden Sie die folgende Anweisung verwenden.
<%
'Deklarieren Sie eine Zählervariable.
Element dimmen
'Wiederholen Sie die Schleife, bis der Wert des Zählers gleich 3 ist.
Für Artikel = 1 bis 3
Response.Write Session.Contents(Item) & „<BR>“
Nächste
%>
Da die Anzahl der in einer Sammlung gespeicherten Elemente im Allgemeinen nicht bekannt ist, unterstützt ASP die Count-Eigenschaft von Sammlungen, die die Anzahl der Elemente in der Sammlung zurückgibt. Mit der Count-Eigenschaft können Sie den Endwert des Zählers angeben.
<%
'Deklarieren Sie eine Zählervariable.
Element dimmen
'Wiederholen Sie diese Schleife, bis der Zähler der Anzahl der Elemente entspricht
'in der Sammlung.
Für Item = 1 bis Session.Contents.Count
Response.Write Session.Contents(Item) & „<BR>“
Nächste
%>
Sie können die for-Anweisung in einem Skript verwenden, um eine Sammlung zu durchlaufen. Wenn Sie die Count-Eigenschaft in einer JScript-for-Anweisung verwenden, sollten Sie zur Erzielung besserer Ergebnisse den Count-Wert einer lokalen Variablen zuweisen und diese Variable verwenden, um den endgültigen Zählerwert festzulegen. Auf diese Weise muss die Skript-Engine nicht bei jeder Schleife den Wert von Count nachschlagen. Das folgende Beispiel demonstriert diese Technik:
<%
var item, numitems;
numitems = Session.Contents.Count;
for (item = 1; item <= numitems; item++) {
Response.Write(Session.Contents(item) + „<BR>“)
}
%>
Mit Microsoft JScript 3.0 wurde das Enumerator-Objekt eingeführt. Mit diesem Objekt können Sie ASP-Sammlungen durchlaufen. Die atEnd-Methode gibt an, ob noch Elemente in der Sammlung vorhanden sind. Die Methode moveNext bewegt sich zum nächsten Element in der Sammlung.
<%
// Erstelle ein Enumerator-Objekt
var mycoll = new Enumerator(Session.Contents);
//Durchlaufe die Sammlung und zeige jedes Element an
while (!mycoll.atEnd()) {
var x = mycoll.item();
Response.Write(Session.Contents(x) + "<BR>");
mycoll.moveNext();
}
%>
Das Skript, das eine Sammlung von Unterschlüsseln durchläuft, bettet relevante Werte in ein einzelnes Cookie ein, um die Anzahl der zwischen dem Browser und dem Webserver gesendeten Cookies zu reduzieren. Daher kann die Cookie-Sammlung von Request- und Response-Objekten mehrere Werte in einem einzigen Element haben. Auf diese Unterpunkte bzw. Unterschlüsselwörter kann einzeln zugegriffen werden. Nur die Sammlungen „Request.Cookies“ und „Response.Cookies“ unterstützen Unterschlüssel (Subkeys). Request.Cookies unterstützt nur Lesevorgänge; Response.Cookies unterstützt nur Schreibvorgänge.
Sie können alle Cookies in der Request.Cookie-Sammlung und alle Unterschlüssel (Subkeys) im Cookie aufzählen. Das Durchlaufen von Unterschlüsseln in einem Cookie ohne Unterschlüssel führt jedoch zu keinen Ergebnissen. Sie können dies vermeiden, indem Sie mithilfe der .HasKeys-Syntax zunächst prüfen, ob das Cookie Unterschlüssel enthält. Das folgende Beispiel demonstriert diese Technik.
<%
'Zählervariablen deklarieren
Dunkles Cookie, Unterschlüssel
'Zeigt die gesamte Cookie-Sammlung an.
Für jedes Cookie in Request.Cookies
Response.Write-Cookie & „<BR>“
Wenn Request.Cookies(Cookie).HasKeys Dann
'Zeigen Sie die Unterschlüssel an
Für jeden Unterschlüssel in Request.Cookies(Cookie)
Response.Write Subkey & "=" & Request.Cookies(Cookie)(Subkey) & "<BR>"
Nächste
Anders
Response.Write „Keine Unterschlüssel in diesem Cookie <BR>“
Ende wenn
Nächste
%>
Iterieren Sie über eine Sammlung von Objekten
Sitzungs- und Anwendungssammlungen können quantitative Variablen oder Objektinstanzen enthalten. Die Contents-Sammlung enthält Mengenvariablen und Objektinstanzen, die durch den Aufruf von Server.CreateObject generiert werden. Die StaticObjects-Sammlung enthält Objekte, die mit dem HTML-Element <OBJECT> in der Datei Global.asa erstellt wurden.
Beim Durchlaufen einer Sammlung, die ein Objekt enthält, können Sie auf den Bezeichner des Objekts oder auf die Methoden und Eigenschaften des Objekts zugreifen. Angenommen, Ihre Anwendung verwendet eine Reihe von Objekten, um Benutzerkonten zu erstellen, und jedes Objekt verfügt über eine Initialisierungsmethode. Sie können die StaticObjects-Sammlung durchlaufen, um jede Initialisierungsmethode aufzurufen:
<%
Für jedes Objekt in Session.StaticObjects
Session.StaticObjects(Object).InitializeUser
Nächste
%>
Wie unterscheiden sich ASP-Sammlungen?
Obwohl die in diesem Thema behandelten ASP-Sammlungen den Collection-Objekten von Visual Basic sehr ähnlich sind, gibt es einige Unterschiede. ASP-Sammlungen unterstützen die Count-Eigenschaft und die Item-Methode, nicht jedoch die Add- und Remove-Methoden.