Holger Schwichtenberg
ASP.NET - Entwicklerbuch
Microsoft Press
Begleittext Holger Schwichtenberg (Hrsg.) unter Mitarbeit von Sven Conrad, Thomas Gartner, Peter Krause, Oliver Scheer
Microsoft ASP .NET - Das Entwicklerbuch Die wichtigsten Bestandteile von ASP.NET kompetent erklärt Dieses Buch ist ein umfassendes Nachschlagewerk für die Programmierung robuster und leistungsfähiger Websites auf Basis der von ASP.NET. Die Autoren erklären detailliert die Konzepte und Technologien, die ASP.NET zugrunde liegen, wobei der besondere Schwerpunkt auf der praktischen Umsetzung dieser Konzepte liegt. Komplementäre Technologien, wie die Datenbankanbindung mit ADO.NET, XML und die neuen Webservices, werden in diesen praxisnahen Kontext eingebaut, wodurch ein umfassendes Standardwerk zur ASP.NET-Programmierung entsteht.
Lesen/Lernen Sie: Von ASP zu ASP.NET, von VBScript zu Visual Basic .NET Grundlagen des .NET Framework ASP.NET 1.0 vs. ASP.NET 1.1, IIS 5.0 vs. IIS 6.0 Visual Studio .NET und Microsoft Web Matrix Das objektorientierte Webforms-Programmiermodell Serverseitige Steuerelemente in Webforms Ereignisse in Steuerelementen und auf Anwendungsebene Benutzereingaben überprüfen mit Validation Controls Eingebaute Objekte und die Framework Class Library nutzen Eigene COM- und .NET-Komponenten nutzen Zustandsverwaltung und Caching Installation, Konfiguration und Sicherheitseinstellungen Datenbankzugriffe und Datenbindung mit ADO.NET XML-Daten verwenden, Daten verschlüsseln Debugging, Tracing, Fehlerbehandlung Browser- und Benutzerspezifische Ausgaben Datei-Upload, Dateisystemzugriffe, E-Mails senden Dynamische Grafiken erzeugen, Ereignisprotokolle nutzen Webanwendungen für mobile Endgeräte mit den Mobile Controls Eigene Steuerelemente entwickeln (User Controls, Custom Controls) XML-Webservices mit SOAP: Grundlagen, Nutzung, Erstellung Fallstudie: eine mehrschichtige, komponentenbasierte Anwendung mit ASP.NET
Auf der Begleit-CD-ROM: Alle Code-Beispiele aus dem Buch Das .NET Framework mit ASP.NET 1.0 Die ASP.NET-Entwicklungsumgebung "Web Matrix" SDKs: .NET Framework, .NET Passport, UDDI Add-ons: MSDE, ADO.NET-Provider, JSharp Mobile Internet Toolkit, SOAP Toolkit Terminologie-Glossar deutsch-englisch/englisch-deutsch Programmierung/ASP.NET ISBN: 3-86063-667-7 49,90 € Erscheinungstermin: August 2002 800 Seiten, 1 CD-ROM
Vorwort
XIII XIV XVI XVI XVI
Die Zielgruppe Der Inhalt Die Autoren Die Website Über die Autoren
Vorgeschichte
Mit den Active Server Pages (ASP) war Microsoft Ende der Neunziger Jahre der Vorreiter bei der Vereinfachung der serverseitigen Webprogrammierung. Die zuvor vorherrschende Programmiertechnologie für Webserver, das Common Gateway Interface (CGI), war nicht nur sehr umständlich, sondern oftmals auch nicht performant genug. ASP war die Übertragung des Gedankens der clientseitigen Browserprogrammierung mit Skriptsprachen auf dem Server. Statt eines CGI-Programms, das den kompletten Seiteninhalt dynamisch erzeugt, bietet ASP eine Mischung aus deklarativem HTML und dynamischen Code-Bausteinen, die an geeigneter Stelle in den statischen HTML-Code eingebaut sind. ASP war mit diesem Konzept Vorbild für andere serverseitigen Skriptsprachen wie Java Server Pages (JSP) und PHP.
ASP.NET
Active Server Pages .NET (kurz ASP.NET), das anfangs auch ASP Next Generation (ASPNG) und ASP+ genannt wurde, ist der Nachfolger von ASP Version 3.0. ASP.NET setzt neue Maßstäbe, weil sich die Programmierweise von Webanwendungen der von »konventionellen« Windows-Anwendungen ein großes Stück annähert und damit der Kostenunterschied zwischen der Entwicklung einer Desktop- und einer Webanwendung erheblich verringert. Manchem Entscheider mag es daher in Zukunft einfacher fallen, sich für eine webbasierte Lösung zu entscheiden.
Die Zielgruppe Fortgeschrittene und Profis
»Microsoft ASP.NET – Das Entwicklerbuch« ist ein Buch für Fortgeschrittene und Profis. Sie müssen keine Kenntnisse ASP.NET mitbringen, aber Sie sollten über Grundkenntnisse in der Entwicklung von Webanwendungen und in mindestens einem Dialekt der Programmiersprache Visual Basic verfügen. Sie müssen allerdings nicht vorher ASP programmiert haben. Wenn Sie über Erfahrung in einer anderen serverseitigen Webtechnik wie CGI, PHP und JSP verfügen, werden Sie mit Hilfe des ersten Kapitels den Einstieg finden.
XIII
Alle Beispiele in diesem Buch sind aus Gründen der Konsistenz in Visual Basic .NET geschrieben. Eine Portierung auf C# oder eine andere Sprache ist aber ohne größeren Aufwand möglich.
Visual Basic .NET
Der Inhalt Das Buch beginnt in Kapitel 1 mit einer Einführung in das klassische ASP für diejenigen Leser, die noch nicht mit ASP programmiert haben. Erfahrene ASP-Entwickler können direkt weiter blättern zur Einführung in das .NET Framework, das die Basistechnologie für ASP.NET ist. Danach folgt ein erster Überblick über ASP.NET. Dieser Überblick ist bewusst knapp gehalten: Die dort behandelten Punkte werden in späteren Kapiteln wieder aufgegriffen und praktisch vertieft.
Kapitel 1
Das zweite Kapitel führt die wichtigsten ASP.NET-Werkzeuge ein: Visual Studio .NET sowie die kostenlose »Light«-Variante davon, die den Namen Web Matrix trägt. Außerdem umfasst das Kapitel die verfügbaren ASP.NET-Debugger als Instrumente zur Fehlersuche.
Kapitel 2
Kapitel 3 behandelt das (für die Webprogrammierung neue) objekt- und ereignisbasierte Programmierparadigma von ASP.NET, das von dem HTML-Code abstrahiert. Hier erfahren Sie, wie man eine Webseite (Webform) aus einzelnen (serverseitigen) Steuerelementen (Webcontrols) zusammensetzt. Auch einen Blick hinter die Kulissen von ASP.NET gewähren wir hier.
Kapitel 3
Ab dem 4. Kapitel geht es dann um die Möglichkeiten, die Ereignisbehandlungsroutinen der Steuerelemente mit mehr Leben zu füllen. Ebenso wie das klassische ASP stellt ASP.NET einige Objekte zur Kommunikation mit dem Webserver und dem aufrufenden Webbrowser zur Verfügung. Auch die Zustandsverwaltung, also die Überwindung der Zustandslosigkeit des HTTP-Protokolls gehört zu den Fähigkeiten dieser Objekte.
Kapitel 4
In Kapitel 5 geht es weiter mit fortgeschrittenen Themen rund um ASP.NET: Dazu gehören die Konfigurationseinstellungen (einschließlich den Sicherheitsfunktionen von ASP.NET), der Umgang mit Fehlern zur Entwicklungszeit (Debugging, Tracing) und zur Laufzeit, ebenso die Browser- und landesspezifischen Ausgaben und die Verwendung von COM- und .NET-Komponenten.
Kapitel 5
Die Auseinandersetzung mit der Nutzung vom Komponenten in Kapitel 5 bildet die Grundlage für die beiden folgenden Kapitel: Ein zentrales Thema der Webprogrammierung behandelt Kapitel 6: Die Darstellung von Daten und deren Änderung. ADO.NET ist die in das .NET Framework integrierte Datenbankschnittstelle. Sie lernen kennen, wie man Daten in ADO.NET-Objekten und die ASP.NET-Steuerelemente mittels Datenbindung auf elegante Weise miteinander verbinden kann.
Kapitel 6
Die .NET Framework Class Library (FCL) bietet aber noch mehr als ADO.NET: In Kapitel 7 haben wir für Sie Klassen aus dieser riesigen Klassenbibliothek ausgewählt, die häufig in Webanwendung benutzt werden. Praktische Beispiele liefern wir, z.B. für typische Aufgaben wie dynamische Grafiken, den Dateisystemzugriff und den Versand von E-Mails aus Webanwendungen.
Kapitel 7
Wenn Ihnen die bei ASP.NET mitgelieferten Steuerelemente nicht reichen, erfahren Sie in Kapitel 8, dass Microsoft selbst noch zwei kostenlose Pakete von Steuerelementen anbietet, darunter die Mobile Web Controls zur Entwicklung für Webbrowser, die kein (vollständiges) HTML verstehen. Microsoft ist aber nicht die einzige Bezugsquelle für weitere Steuerelemente und ein zentrales Thema des 8. Kapitels
Kapitel 8
XIV
Vorwort
ist auch, wie man ASP.NET-Steuerelemente selbst entwickeln und so Wiederverwendbarkeit in Webanwendungen erreichen kann. Kapitel 9
Das 9. Kapitel ist noch ein hilfreiches »Add-on« für alle, die mit dem klassischen ASP entwickelte Anwendungen auf ASP.NET migrieren müssen oder möchten: Anhand eines praktischen Beispiels lernen Sie die Herausforderungen bei der Migration kennen. Außerdem bietet das Kapitel eine Einführung in Visual Basic .NET (auch im Vergleich zu früheren VB-Dialekten).
Kapitel 10
Kapitel 10 ist eine Soll-Bruchstelle in diesem Buch: Von den Webforms geht es nun zu den Webservices. Webservices sind Dienste, die nicht von Menschen, sondern von anderen Computern aufgerufen werden. Auf den ersten Blick mag Ihnen dieses Kapitel sehr kurz erscheinen; jedoch gelten die meisten Ausführungen zu Webforms und die Möglichkeiten, ADO.NET und andere FCL-Klassen zu nutzen, auch für Webservices. Statt das Buch mit eine überflüssigen Wiederholung aufzublähen, beschränken wir uns hier also auf die Aspekte, die Webservices von Webforms unterscheiden.
Kapitel 11
Während in den anderen Kapiteln die Beispiele bewusst überschaubar gehalten wurden, folgt nun in Kapitel 11 eine große Anwendung, die in diesem Buch aus Platzgründen auch nur in Bruchstücken wiedergegeben werden kann. Die Source Code Community (SCC) ist eine Webanwendung, die den Austausch von Programmcode zwischen Softwareentwicklern ermöglicht. Sie wurde als mustergültiges Beispiel mehrschichtig und komponentenbasiert entwickelt. Die Anwendung ist im Betrieb (siehe http://www.CodeCommunity.de) und die CD-ROM zu diesem Buch enthält den kompletten Quellcode. Das hört sich nach sehr viel Stoff an. Von diesem Buch sollte aber dennoch nicht erwartet werden, dass wirklich jede Möglichkeit von ASP.NET, jedes Objekt und jede Konfigurationsoption erwähnt wird. Wenn Sie sich jetzt fragen, warum das Buch das nicht bietet? Lassen sich mich als Antwort die Worte eines Programm-Managers aus dem IIS-Teams von Microsoft zitieren, der mir letztens in Redmond, als ich von diesem Buch als ein »umfassendes Nachschlagewerk« über ASP.NET sprach, sagte: »Wenn alles über ASP.NET in ein einziges Buch soll, werdet Ihr wohl ein neues Druckverfahren erfinden müssen.«
Grenzen dieses Buchs
Diese Feststellung ist korrekt und an dieser Stelle sei klargestellt, was in diesem Buch nicht zu finden ist: b Einsteigerwissen zur Web-Programmierung. b Ein Überblick über die Sprachsyntax der Sprache Visual Basic .NET oder eine andere in ASP.NET verwendbare Programmiersprache liefern. (Damit kann man jeweils mehrere Hundert Seiten füllen, die in diesem Buch keinen Platz gefunden hätten). b Eine vollständige Referenz aller Klassen der Framework Class Library (Auch das wäre bei 2246 öffentlichen Klassen auf 800 Seiten gar nicht zu schaffen).
Vorwort
XV
Die Autoren Sie werden in diesem Vorwort vielleicht die Verwendung des Plurals (»wir«) bemerkt haben. Das war keineswegs der Pluralis Majestatis, sondern dieses Buch ist in der Tat einer Co-Produktion mehrerer Autoren. Der Zeitplan für dieses Buch war eng, außerdem galt es einige laufende Praxis-Projekte parallel zu bewältigen. Ich bedanke mich daher herzlich bei meinen vier Co-Autoren Sven Conrad, Thomas Gartner, Peter Krause und Oliver Scheer, die mit mir innerhalb von vier Monaten dieses Buch produziert haben und die alle viel Verständnis für die von mir aus Gründen der Konsistenz ausgeführten redaktionellen Änderungen bewiesen haben.
Dank
Die Website Unter http://www.ASPNETdev.de existiert eine Website zu diesem Buch: Dort finden Sie weitere Informationen und Bugfixes zu diesem Buch (wir haben uns zwar bemüht, aber es ist genauso schwer ein bugfreies Buch wie eine bugfreie Software zu produzieren). Teile dieser Website sind nur für Sie, die Leser dieses Buchs bestimmt. Sie brauchen daher ein Kennwort, das Sie im Anhang dieses Buch finden.
ASPNETdev.de
Viel Spaß und Erfolg mit diesem Buch! Holger Schwichtenberg Herausgeber Essen-Byfang im Juli 2002
Über die Autoren Holger Schwichtenberg ist Diplom-Wirtschaftsinformatiker und Microsoft Certified Solution Developer (MCSD). Als wissenschaftlicher Mitarbeiter lehrt und forscht er an der Universität Essen im Bereich komponentenbasierter Softwareentwicklung. Auf der Praxis-Seite ist er als Technologieberater und Softwareentwickler mit den Schwerpunkten Windows, COM, .NET, Visual Basic, Webanwendungen und Scripting tätig. Er gibt sein Wissen in Schulungen und in Vorträgen auf Fachkonferenzen (BASTA!, Windows-Forum, XML-in-Action, WI) weiter. Darüber hinaus ist er Mitglied im Fachbeirat des jährlich stattfindenden Windows-Forums. Als ständiger Mitarbeiter der Fachzeitschriften »iX« und »DotNetPro«, Autor mehrerer Bücher bei Addison-Wesley (u.a. »Windows Scripting«, »COM-KomponentenHandbuch«) und Herausgeber verschiedener Nachschlagewerke im Interest-Verlag ist er als Fachjournalist bekannt.
XVI
Vorwort
Sven Conrad Nach einem Studium der Wirtschaftsinformatik an der Gesamthochschule Paderborn absolvierte Sven Conrad eine Ausbildung zum staatlich geprüften Informatikassistenten, Fachrichtung Wirtschaft, am Bildungszentrum für informationsverarbeitende Berufe in Hannover. Seit 1998 ist er als Softwareentwickler (seit 1999 im Bereich Web-Entwicklung) tätig. Nebenberuflich betätigte sich Sven Conrad als Dozent in den Bereichen Office, Datenbanken, Programmierung und Netzwerke. Als Autor hat er bereits bei den Nachschlagewerken »Praxishandbuch Windows 2000« und »Automatisierte Administraton mit Scriptsprachen« mitgearbeitet. Thomas Gartner Thomas Gartner ist Diplom-Wirtschaftsinformatiker und Microsoft Certified Systems Engineer (MCSE). Seit mehreren Jahren ist er als freiberuflicher IT-Berater, Entwickler und Trainer in den Bereichen Windows, BackOffice, Internet und Scripting tätig. Inzwischen arbeitet er auch als wissenschaftlicher Mitarbeiter am Lehrstuhl »Wirtschaftsinformatik, insbesondere betriebliche Kommunikationssysteme« an der Universität Essen. Als Autor erstellt er regelmäßig Beiträge für verschiedene Nachschlagewerke im Interest Verlag. Zu diesem Buch hat er das Fallbeispiel der Source Code Community beigetragen. Peter Krause Nach seiner Ausbildung zum Datenverarbeitungskaufmann studierte Peter Krause Wirtschaftsinformatik an der Universität Essen. Inzwischen blickt er auf mehrere Jahre Programmiererfahrung und Systemintegration bei verschiedenen Unternehmen zurück. Zuletzt arbeitete er schwerpunktmäßig im Bereich der Konzeptionisierung und Programmierung von webbasierten Content Management Systemen und wissensbasierten Unternehmensportalen. Oliver Scheer Bereits seit dem Studium der Wirtschaftsinformatik an der Universität Essen arbeitet Oliver Scheer als IT-Berater, Softwareentwickler und Systemadministrator. In diesen Tätigkeiten hat er bereits mehrjährige Erfahrungen in der Planung und Implementierung von unterschiedlichsten Systemarchitekturen und umfangreichen Softwareprojekten in unterschiedlichen Entwicklungsumgebungen gesammelt. Als Autor hat er bereits beim Nachschlagewerk »Automatisierte Administration mit Scriptsprachen« mitgewirkt. Seinen derzeitigen Schwerpunkt legt er auf datenbank- und webbasierte Anwendungssysteme jeglicher Art.
Vorwort
XVII
Von ASP zu ASP.NET
1 2 19 24 33 57
Einordnung von ASP und ASP.NET Die klassischen Active Server Pages (ASP) Praxisbeispiel: Ein Buchkatalog in ASP Das .NET Framework Einführung in ASP.NET Praxisbeispiel: Der Buchkatalog in ASP.NET
Der Weg von den klassischen Active Server Pages zu ASP.NET führt über das .NET Framework. Genauso ist dieses einleitende Kapitel auch aufgebaut. Nach einer kurzen Einordnung der serverseitigen Web-Programmiertechniken folgt zunächst ein Kapitel über ASP – für diejenigen Leser, die noch keine Programmiererfahrung damit haben. Auch das Kapitel über das .NET Framework ist grundlegend und zudem bewusst knapp gehalten. Das umfangreiche .NET Framework kann viele hundert Buchseiten füllen; an dieser Stelle sollen nur die unbedingt notwendigen Grundlagen vermittelt werden. Darauf folgt dann die Einführung in ASP.NET. Sie lernen die Architektur und Fähigkeiten von ASP.NET kennen. Damit es nicht bei der Theorie bleibt, wird dies abgerundet von einem praktischen Beispiel, bei dem die gleiche Anwendung, die zuvor in ASP entwickelt wurde, nun mit ASP.NET reimplementiert wird. Dieses Beispiel werden Sie in einer einfacheren Migrationsvariante auch in Kapitel 9 finden.
Einordnung von ASP und ASP.NET Mehrschichtige Anwendungen
Einschichtige, monolithische Software wird immer mehr von mehr-schichtigen, komponentenbasierten Anwendungen abgelöst. Sowohl das klassische ASP als auch ASP.NET bietet die Möglichkeit, komponentenbasiert und mehrschichtig zu entwickeln.
Einordnung von ASP/ASP.NET
Die folgende Abbildung zeigt, wie sich ASP und ASP.NET in die mehrschichtige Architektur einordnen lassen: ASP/ASP.NET sind Techniken zur Realisierung der Benutzerschnittstellensteuerung. In einigen Präsentationen und Büchern sieht man ASP/ASP.NET als Teil der Geschäftslogik. Das ist jedoch nicht korrekt, da ASP/ASP.NET eindeutig für die Erzeugung der Benutzerschnittstelle zuständig sind. Natürlich könnte man (auch)
1
Geschäftslogik in ASP-/ASP.NET-Seiten hinterlegen. Es ist jedoch wesentlich besseres Design, die Geschäftslogik in Komponenten auszulagern, die von ASP/ASP.NET getrennt sind und so auch anderen Anwendungstypen (z.B. klassischen WindowsAnwendungen) zur Verfügung stehen. Die Kapselung von Geschäftslogik in die ASP/ ASP.NET-Dateien verringert die Wiederverwendbarkeit. Mehrschicht-Modell (Grobsicht)
Mehrschicht-Modell (verfeinert)
COM
.NET-Framework
Darstellung
Darstellung
HTML
HTML
HTTP
Anwendung
Daten
HTTP
Benutzerschnittstellensteuerung
ASP
ASP.NET
Geschäftslogik
COM-Komponente
.NET-Komponente
Datenzugriffssteuerung
COM-Komponente
.NET-Komponente
Daten
ADO
ADO.NET
Datenbank
Datenbank
Abbildung 1.1: ASP und ASP.NET in mehrschichtigen Anwendungen
Dieses Buch fokussiert auf der Vermittlung von ASP.NET-Techniken. Die meisten Anwendungen in diesem Buch sind daher aus didaktischen Gründen nicht mehrschichtig entwickelt, um den Code überschaubarer zu halten. In Kapitel 11 finden Sie ein Fallbeispiel einer größeren Anwendung, die selbstverständlich mehrschichtig entwickelt wurde.
HINWEIS
Ebenfalls im Bereich der Benutzerschnittstellensteuerung von Web-Anwendungen einzuordnen sind clientseitige Web-Programmiertechniken wie Java Applets, Dynamic HTML-Scripting und ActiveX-Steuerelemente. Diese werden in diesem Buch jedoch nicht behandelt. Das Buch beschränkt sich auf die serverseitige Programmierung – ohne damit allerdings den Sinn clientseitiger Programmierung abwerten zu wollen.
Clientseitige Programmierung
Die klassischen Active Server Pages (ASP) Dieses Kapitel liefert eine kurze Einführung in das klassische ASP für diejenigen Leser, die bisher nicht oder nur wenig mit ASP gearbeitet haben. Als erfahrene ASPEntwickler können Sie dieses Kapitel überblättern.
Lesehinweis
Die Ausführungen in diesem Kapitel basieren auf ASP 3.0, das im Internet Information Server (IIS) 5.0 in Windows 2000 und IIS 5.1 in Windows XP enthalten ist. Frühere ASP-Versionen unterstützen einige der hier genannten Möglichkeiten nicht. Soweit nicht anders erwähnt, sind die in diesem Kapitel vorgestellten Programmiertechniken bzw. eingebauten Objekte auch unter ASP.NET verfügbar. Allerdings ergeben sich einige syntaktische Änderungen, da nicht mehr die Sprache VBScript, sondern das neue Visual Basic .NET (VB.NET) zum Einsatz kommt. Mehr über diese Änderungen erfahren Sie in Kapitel 9.
2
WICHTIG
Kapitel 1
Erzeugung dynamischer HTML-Seiten HTML vermischt mit Programmcode
Code-Blöcke
Eine ASP-Seite ist eine Datei mit der Dateiextension .asp. Eine ASP-Seite besteht aus HTML-Code und – optional – Script-Code. Es macht allerdings in der Regel keinen Sinn, eine rein statische HTML-Seite mit der Dateiextension .asp zu belegen, weil eine .asp-Seite - selbst wenn gar kein Programmcode enthalten ist - langsamer verarbeitet wird als eine .html-Seite. Sinnvoll ist dies nur, wenn zu einem späteren Zeitpunkt die Hinzufügung von Programmcode geplant ist. Dann kann später die Umbenennung der Seite vermieden werden. Um Programmcode einzubetten, gibt es drei Möglichkeiten: b ... b b
Render- vs. Display Block
Während die ersten beiden Varianten äquivalent sind (sie werden Render-Blöcke genannt), dient die dritte Variante nur der Ausgabe des Wertes eines Ausdrucks (Display-Block). Schleifen und andere Sprachkonstrukte, die keinen einzelnen Wert zurückliefern, sind hier nicht erlaubt. Innerhalb eines Render-Blocks erzeugt man eine Ausgabe mit der Methode Write(), die von dem eingebauten Objekt Response zur Verfügung gestellt wird.
Beispiel
Das erste Beispiel erzeugt dreimal die gleiche Ausgabe, jeweils unter Einsatz eines der drei verschiedenen Ausgabe-Blöcke. Dabei zeigt sich der Vorteil eines DisplayBlocks: Wenn ein nur kleiner Teil der Ausgabe dynamisch ist, ist er wesentlich übersichtlicher als die Zusammensetzung einer Zeichenkette für Response.Write().
Listing 1.1: Erste_ASP_ Seite.asp
Dies ist eine einfache ASP-Seite! Response.Write "Es ist jetzt " & time & " Uhr!" Es ist jetzt Uhr!
Abbildung 1.2: Ausgabe der obigen ASP-Seite
Active ScriptingSprachen
In diesem Beispiel wurde als Programmiersprache Visual Basic Script (VBScript) verwendet. Dies ist auch die Standardsprache für ASP-Seiten. Möglich sind alle Pro-
Von ASP zu ASP.NET
3
grammiersprachen, die der Active Scripting-Architektur (vgl. [SCH01a]) entsprechen. Dies sind neben den von Microsoft gelieferten Sprachen VBScript und JScript auch zahlreiche Sprachen von anderen Anbietern, z.B. PerlScript, PScript, Object REXX, PythonScript, HaskellScript, ActiveScriptRuby und LUAScript. Die Standardsprache kann im Internet-Dienstemanager verändert werden. Die Sprache jeder einzelnen Seite kann zu Seitenbeginn mit der @Language-Direktive festgelegt werden. Die Verarbeitung einer ASP-Seite ist linear: Die Befehle werden in der Reihenfolge ihres Vorkommens abgearbeitet. Die Linearität kann durch Unterroutinen unterbrochen werden (siehe folgendes Beispiel). Möglich sind sowohl Unterroutinen ohne Rückgabewert (Sub) als auch mit Rückgabewert (Function).
Lineare Abarbeitung
Guten Tag, herzlich Willkommen auf unserem Webserver!
Listing 1.2: ASP-Seite mit Unterroutinen
Sub Zeitausgabe Response.Write "Es ist jetzt " & time & " Uhr!" End Sub Function HoleZeitInfo HoleZeitInfo = "Es ist jetzt " & time & " Uhr!" End Function
Es sind auch Unterroutinen erlaubt, die (nur) HTML-Code enthalten. Diese als Render-Funktionen bezeichneten Unterroutinen können als wieder verwendbare Textbausteine benutzt werden.
RenderFunktionen
Diese Website wurde von Holger Schwichtenberg erstellt
Mit ASP können nicht nur HTML-Seiten dynamisch erzeugt werden, sondern auch beliebige andere Formate. Damit der Browser diese korrekt verarbeitet, muss allerdings dann der HTTP-Inhaltstyp über Response.ContentType = "inhaltstyp" gesetzt werden. Auch Nicht-Text-Formate wie »image/GIF« oder »image/JPEG« können erzeugt werden. Dann muss als Ausgabefunktion aber Response.BinaryWrite(BYTE-ARRAY) statt Response.Write("STRING") verwendet werden.
Andere Formate
Architektur ASP ist eine Erweiterung für den Internet Information Server (IIS) für NT4.0 bzw. die Internet Information Services (IIS) in Windows 2000/XP/.NET. ASP ist aber auch für
4
IIS
Kapitel 1
den Personal Web Server (PWS) in Windows 95/98/ME verfügbar. Drittanbieter haben ASP auch für andere Webserver und andere Betriebssysteme implementiert. ISAPI
ASP ist implementiert als eine Internet Server Application Programming Interface (ISAPI)-Erweiterung mit Namen asp.dll. Die asp.dll verarbeitet alle .asp- und .asaDateien und leitet die Ausgabe an den IIS weiter.
Abbildung 1.3: ASP-Architektur
Webclient (z.B. Internet Explorer) HTTPAnfrage
HTTPAntwort
IIS (InetInfo.exe) asp.dll
Zugriff auf statische Dateien im Dateisystem Optionaler Zugriff auf Datenquellen
Statische Datei (.htm, .gif, .jpg, etc.)
ASP-Datei
Datenquelle (z.B. Datenbank)
Die obige Grafik gilt für die IIS-Versionen 3.0, 4.0, 5.0 und 5.1. Ab dem IIS 6.0 läuft die asp.dll nicht mehr im Prozess des IIS, sondern in einem getrennten Prozess mit dem Namen des IIS-Arbeitsprozesses (W3WP.exe).
Objekte Attribute, Methoden und Ereignisse
Die Programmierung mit Active Server Pages (ASP) ist objektbasiert: Alle wichtigen Funktionen werden durch Attribute, Methoden und Ereignisse in Objekten bereitgestellt. Dabei gibt es zwei Arten von Objekten: eingebaute Objekte, die nicht instanziiert werden können, weil sie automatisch vorhanden sind, und externe Objekte, die vor der Verwendung instanziiert werden müssen. Eingebaute Objekte Es gibt sechs eingebaute Objekte, die der Kommunikation mit dem Webserver dienen, auf dem die ASP-Seite läuft (siehe Tabelle). Diese Objekte können direkt, also ohne vorherige Instanziierung, verwendet werden.
Request Objekt
Bedeutung
Request
Informationen über die HTTP-Anfrage des Browsers und den Webserver.
Response
Daten für die HTTP-Antwort des Webservers.
Von ASP zu ASP.NET
5
Objekt
Bedeutung
Server
Funktionen, die unabhängig von einer konkreten Anfrage sind.
Session
Zustandsverwaltung durch die Speicherung von Werten auf Sitzungsebene.
Application
Speicherung sitzungsübergreifender Werte.
ObjectContext
Dient dem Zugriff auf das Kontextobjekt, wenn die Seite im Microsoft Transaction Server (MTS) oder als COM+-Anwendung läuft.
Die folgenden Grafiken zeigen für die ersten fünf die Objektmodelle. Abbildung 1.4: Objektmodell für das RequestObjekt
Request
Cookies
IRequestDictionary
IRequestDictionary Cookie
String IRequestDictionary Form
String
IRequestDictionary QueryString
String
Item
String
IRequestDictionary ServerVariables
String
IRequestDictionary ClientCertificate
String
6
Kapitel 1
Abbildung 1.5: Objektmodell für das ResponseObjekt
Response
IRequestDictinary Cookies
IRequestDictinary Cookie
String
Abbildung 1.6: Objektmodell für das ServerObjekt
Server
GetLastError()
CreateObject()
Abbildung 1.7: Objektmodell für das ApplicationObjekt
ASPError
beliebiges COM-Objekt mit IDispatch-Schnittstelle
Application
IVariantDictionary Contents
Item
Variant (Wert oder Objektzeiger)
IVariantDictionary StaticObjects
Item
Von ASP zu ASP.NET
COM-Objekt mit IDispatch-Schnittstelle
7
Abbildung 1.8: Objektmodell für das SessionObjekt
Session
IVariantDictionary Contents Variant (Wert oder Objektzeiger)
Item
IVariantDictionary StaticObjects
Item
COM-Objekt mit IDispatch-Schnittstelle
Die folgende Tabelle listet die wichtigsten Attribute und Methoden dieser Objekte auf. Attribut/Methode
Erläuterung
Request.QueryString (Collection)
Sofern an den URL ein Querystring angehängt wurde, enthält die QueryString-Collection die übergebenen Attribute mit ihren Werten.
Request.Form (Collection)
Sofern die aufgerufene Seite ein Formular enthielt und die Navigation zu der aktuellen Seite mit einer Submit-Schaltfläche erfolgte, enthält die Form-Collection die Feldnamen und Feldwerte des aufrufenden Formulars.
Request.Cookies (Collection)
Die Cookies-Collection enthält die vom Client übergebenen Cookies für diese Site.
Request.ClientCertificate (Collection)
Sofern der Browser Zertifikate übermittelt hat, sind diese über ClientCertificate einsehbar.
Request.ServerVariables (Collection)
Die ServerVariables-Collection bietet Informationen über den Webserver und die aktuelle Anfrage.
Response.ContentType = "Inhaltstyp"
Legt den HTTP-Inhaltstyp für die Ausgabe fest. Standard ist "text/HTML". Alternativen sind zum Beispiel "text/XML" oder "image/GIF".
Response.Write("AUSGABE") Response.BinaryWrite(BYTE-ARRAY)
Ausgabe an den Client
Response.Redirect("URL")
Umlenkung des Clients auf eine andere Seite. Alle nachfolgenden Befehle und Tags auf der aktuellen Seite werden ignoriert.
Response.End()
Ende der Verarbeitung einer Seite, alle nachfolgenden Befehle und HTML-Tags werden ignoriert.
Response.Expires = 10
Verfallszeit des Seiteninhalts in Minuten (-1 = sofort) als Anweisung für das Seitencaching.
8
Kapitel 1
Attribut/Methode
Erläuterung
Response.CacheControl = "public|private" Mit der Einstellung Private verhindert man die Speicherung der Seite in einem Proxy-Server. Server.MapPath("PFAD")
Umsetzung eines relativen Pfads in einen für den lokalen Webserver absoluten Pfad.
Server.UrlEncode("WERT")
Codierung von Sonderzeichen in Werten in Querystrings.
Server.GetLastError()
Liefern eines Zeigers auf ein ASPError-Objekt mit dem letzten aufgetretenen Fehler.
Server.ScriptTimeout = 10
Festlegung der maximalen Laufzeit der Seitenverarbeitung in Sekunden
Server.Execute ("seitenname.asp")
Ausführung einer anderen Seite innerhalb des Kontextes der aktuellen Seite
Server.Transfer ("seitenname.asp")
Komplette Übergabe der Kontrolle an eine andere Seite. Alle nachfolgenden Befehle und Tags auf der aktuellen Seite werden ignoriert.
Server.HTMLEncode("STRING")
Diese Funktion muss verwendet werden, wenn Inhalte ausgegeben werden sollen, die der Browser als HTMLCode missverstehen könnte.
Server.CreateObject ("Komponente.Klassenname")
Instanziierung eines COM-Objekts
Session.Contents (Collection)
Liste der Sitzungsvariablen
Session.SessionID
Session.SessionID liefert die Sitzungs-ID der aktuellen Sitzung im Rahmen des ASP-Sitzungsmanagements.
Session.Abandon
Beendet die aktuelle Sitzung.
Application.Contents (Collection)
Liste der sitzungsübergreifenden globalen Variablen
Externe Objekte COM-Objekte
Da ASP eine Implementierung eines Active Scripting Hosts ist, kann ASP jede gemäß dem Component Object Model (COM) implementierte Klasse verwenden, die COMAutomation unterstützt (also die Standardschnittstelle IDispatch anbietet). Diese Klassen können über die Methode Server.CreateObject() instanziiert werden. Die wohl am häufigsten verwendeten externen COM-Klassen sind die Klassen der Komponente ActiveX Data Object (ADO) für den Zugriff auf Datenquellen aller Art, hauptsächlich relationale Datenbanken. Die folgende Tabelle nennt weitere COMKomponenten, die oft in ASP zum Einsatz kommen.
Von ASP zu ASP.NET
9
Name
Kürzel
Kurzbeschreibung
ActiveX Data Objects
ADO
Zugriff auf Datenbanken und andere Datenquellen
Active Directory Service Interface
ADSI
Zugriff auf Verzeichnisdienste (NT 4.0, Windows 2000, Active Directory, Exchange 5.5, Exchange 2000, Novell Directory Service, Novell Netware, Netscape Directory Server u.v.m.)
Active User Objects
AUO
Verwaltung von Benutzern im Site Server
Collaboration Data Objects Version 1.21
CDO 1.21
Zugriff auf MAPI-Mailstores, insbesondere Exchange Server 5.5/2000 und Persönliche Ordner/Persönliche Adressbücher
Collaboration Data Objects Version 3.0
CDO 3.0
Zugriff auf den Exchange Server 2000
CDO for NT Server
CDONTS
Versand von SMTP-Nachrichten unter NT Server 4.0; Empfang von SMTP-Nachrichten in Drop-Directories
CDO for Windows 2000 (heißt auch: CDO Version 2.0)
CDOSYS
Versand von SMTP-Nachrichten unter Windows 2000; Empfang von SMTPNachrichten in Drop-Directories
Distributed Management Object
DMO
Zugriff auf die Konfiguration des Microsoft SQL Server
Decision Support Objects
DSO
Zugriff auf den Microsoft OLAP Server
File System Objects
FSO
Zugriff auf das Dateisystem
Document Object Model für HTML
MSHTML
Zugriff auf HTML-Dokumente
Document Object Model für XML
MSXML
Zugriff auf XML-Dokumente
Regular Expressions Component
RegExp
Aufwertung regulärer Ausdrücke
Windows Management Instrumentation
WMI
Universelle Systemmanagement-Komponente
Microsoft Office-Objekte
MSO
Nutzung von Funktionen aus Microsoft Office (Word, Excel, PowerPoint, Access, Outlook)
Tabelle 1.1: Microsoft-Komponenten für die Entwicklung von ASP-Seiten
Neben diesen oben aufgelisteten Komponenten aus dem Hause Microsoft gibt es zahlreiche Drittanbieter, die Komponenten für die Verwendung in ASP herstellen. Weitere Informationen zu diesen COM-Komponenten finden Sie in [SCH01b].
Seitenübergänge Grundsätzlich wäre es möglich, eine Webanwendung in einer einzelnen ASP-Datei zu implementieren: Durch entsprechende Fallunterscheidungen könnte der ASPCode gemäß der übergebenen Parameter immer andere Ausgaben erzeugen. Dies wäre jedoch kein gutes Design, denn diese ASP-Datei würde schnell sehr unübersichtlich werden. Das soll nicht heißen, dass es im Einzelfall nicht sinnvoll sein könnte, dass eine Datei sich selbst wieder aufruft. Wenn die folgende Ausgabe sich von der vorherigen nicht viel unterscheidet, ist ein Selbstaufruf gegenüber einer Duplizierung großer Mengen von HTML-Code die bessere Alternative (man denke an ein
10
Kapitel 1
Formular, dessen Eingaben geprüft werden: Wenn die Fehlermeldungen direkt hinter die entsprechende Fehleingabe auf dem Bildschirm ausgegeben werden sollen, sollte man das lieber mit dem Selbstaufruf lösen). Die Regel ist jedoch, dass aus einer Seite eine andere Seite aufgerufen wird. Abbildung 1.9: Seitenübergänge
eine Code-Datei erzeugt verschiedene HTML-Dokumente
Code
pro HTML-Dokument eine Code-Datei
Code
Code
Code
Webserver
Seitenübergang
HTML
HTML
HTML
Seitenübergang
HTML
HTML
Webbrowser
(C)
[email protected] 2002
Vom Client initiierte Seitenübergänge Formular, Link, Meta-Tag
Um einen Übergang von einer zur anderen Seite zu initiieren, gibt es in ASP sowohl client- als auch serverseitige Möglichkeiten. Clientseitig stehen die Navigationsmöglichkeiten von HTML zur Verfügung: b Hyperlinks (Zielangabe mit href="ziel.asp" im -Tag) b das Absenden von Formularen mit einer Submit-Schaltfläche (Zielangabe mit action="ziel.asp" im -Tag) und b die automatische Seitenweiterleitung mit einem Meta-Tag (). Vom Server initiierte Seitenübergänge
Response.Redirect() vs. Server.Transfer()
Auch auf der Serverseite kann innerhalb des Programmcodes ein Seitenübergang initiiert werden. Durch den Befehl Response.Redirect("URL") wird der HTTP-Statuscode 302 an den Client gesendet. Dieser Statuscode veranlasst den Browser, sofort eine neue Anfrage nach der übermittelten URL an den Server zu stellen. Rein serverseitig kann ein Seitenübergang mit Server.Transfer("PFAD") ausgeführt werden. In diesem Fall wird die Programmkontrolle an eine andere Seite übergeben, ohne dass der Browser davon überhaupt etwas mitbekommen wird. Bei dem in der folgenden Abbildung dargestellten Server.Transfer() von Seite1.asp zu Seite2.asp erhält der Browser den Inhalt von beiden Seiten als Antwort auf die Anfrage nach Seite1.asp. Die URL in der Adresszeile des Browsers wechselt also nicht. Bei einem Response.Redirect() ist dies – genauso wie bei den vom Client initiierten Seitenübergängen – anders: Der Browser zeigt immer die »richtige« URL an. Sowohl bei einem Server.Transfer() als auch bei einem Response.Redirect() wird die Ausführung der aktuellen Seiten sofort beendet. Nachfolgender Programmcode wird übergangen. Unter ASP.NET kann bei Response.Redirect() durch einen zweiten Zusatzparameter erreicht werden, dass die aktuelle Seite noch zu Ende abgearbeitet wird.
Von ASP zu ASP.NET
11
vom Client initiierter Seitenübergang vom Client initierter Seitenübergang
vomServer Serverinitierter initiierterSeitenübergang Seitenübergang vom
GET | POST
Seite1.asp
Seite2.asp
ASP-Verarbeitung
GET
Seite1.asp ASPVerarbeitung
ASP-Verarbeitung
ASP-Verarbeitung
Webserver
Seite2.asp
Server.Transfer ("Seite2.aspx") Response.Redirect "Seite2.asp"
Abbildung 1.10: Seitenübergänge in ASP
GET
GET
HTTP200
HTTP200
HTTP302 Seite2.asp
HTTP200
Meta-Tag Webbrowser
Link
Browser stellt leeres Dokument nicht dar, sondern fragt direkt nach der übermittelten Seite erneut an.
(C)
[email protected] 2002
Parameterübergabe und Sitzungsverwaltung HTTP ist ein zustandsloses Protokoll; das Protokoll merkt sich also nicht, was für Daten in einer Seite vorhanden waren, um diese beim nächsten Aufruf der gleichen Seite oder erneuten Aufruf der gleichen Seite wieder bereitzustellen. Man muss sich eine Webseite wie eine Unterroutine mit lokalen Variablen vorstellen: Man kann der Unterroutine Informationen übergeben und auch einen Rückgabewert erhalten. Aber die während der Abarbeitung der Routine angefallenen Daten werden sofort nach Verlassen der Routine verworfen. Globale Variablen gibt es auf dem Server nicht. Es ist die Aufgabe des Aufrufers (also des Browsers), die relevanten Daten von einem zum nächsten Aufruf zwischenzuspeichern und weiterzureichen.
Keine globalen Variablen
Parameterübergabe bei HTTP/HTML HTML und HTTP stellen im Zusammenspiel dazu nur rudimentäre Möglichkeiten bereit:
Parameterübergabe
b In ein Formular eingegebene Daten werden über eine an die URL angehängte Zeichenkette (genannt Querystring) oder durch Speicherung im HTTP-Inhalt an die aufgerufene Seite übergeben, nachdem ein Klick auf die Submit-Schaltfläche erfolgte. b Ein Hyperlink oder ein Meta-Tag können Daten nur in Form eines Querystrings übergeben.
12
Kapitel 1
Datenübergabe per Querystring
Datenübergabe per HTTP-Inhalt
HTTP-Verb
GET
POST
Verwendung im Hyperlink
(Standard)
Nur möglich unter Einsatz von clientseitigem Script
Verwendung im Formular
(Standard)
und
Verwendung im Meta-Tag
).
Nicht möglich
Beim Formular können beide Formen der Parameterübergabe gemischt werden, indem im action-Attribut eine URL mit Querystring angegeben wird. Listing 1.3: Datenübergabe im Querystring bei HTTP-GET
GET /Kapitel01/Formular/eintragen.asp?Vorname=Holger&Name=Schwichtenberg&Firma+Name= IT-Objects+GmbH&submit=Eintragen HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Referer: http://www.IT-Visions.de/Kapitel01/Formular/form.asp Accept-Language: de,en-us;q=0.8,fr-be;q=0.6,ar-bh;q=0.4,zh-hk;q=0.2 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461; .NET CLR 1.0.3705) Host: localhost:8889 Connection: Keep-Alive
Beim Einsatz von HTTP-POST werden die Daten durch eine Leerzeile getrennt vom HTTP-Header übergeben. Listing 1.4: Datenübergabe im Querystring bei HTTP-GET
POST /Kapitel01/Formular/eintragen.asp HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Referer: http://www.IT-Visions.de/Kapitel01/Formular/form.asp Accept-Language: de,en-us;q=0.8,fr-be;q=0.6,ar-bh;q=0.4,zh-hk;q=0.2 Content-Type: application/x-www-form-urlencoded Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461; .NET CLR 1.0.3705) Host: localhost:8889 Content-Length: 78 Connection: Keep-Alive Cache-Control: no-cache Vorname=Holger&Name=Schwichtenberg&Firma+Name=IT-Objects+GmbH&submit=Eintragen
Weiterreichung an nächste Seite
Damit lassen HTTP und HTML den Entwickler aber auch schon im Stich: Damit die übergebenen Daten auf dem Server verarbeitet werden, ist dort Programmlogik notwendig. Wenn Werte von einer zur nächsten Seite weitergereicht werden sollen (z.B. der Inhalt eines Warenkorbs oder der Benutzername, der sich autorisiert hat), dann ist es Aufgabe der serverseitigen Programmlogik, die Werte, die der Server in einer Anfrage empfängt in der zugehörigen Antwort wieder an den Client zurückzusenden. Diese Rückübermittlung kann durch Einbauen der Daten in die HTML-Seite oder alternativ durch so genannte Cookies erfolgen.
Von ASP zu ASP.NET
13
Werteübermittlung im Seiteninhalt Das Einbauen in den Seiteninhalt kann auf zwei Weisen erfolgen: Die Daten werden in Formularfelder als Vorgabewert eingetragen. Eine Sonderform ist das versteckte Formularfeld (Hidden Field), das nicht nur verhindert, dass der Benutzer die Daten sieht, sondern auch, dass er sie ändert.
Hidden Fields
Ein Hyperlink kann dynamisch erzeugt werden, so dass die übergebenen Daten Teil des Querystrings werden. Diese Technik nennt man URL-Rewriting.
URL-Rewriting
Beide Verfahren sind nicht nur aufwendig, sondern auch fehleranfällig, weil jede Unterbrechung in der Weitergabe der Daten zum Verlust der Information führt. Cookies
Cookies
Als Alternative wurden daher Cookies eingeführt: Cookies sind Zeichenketten, die der Browser in einem speziellen Verzeichnis (in Windows im Benutzerprofil im Unterverzeichnis /Cookies) ablegt und bei jedem Aufruf der gleichen Webanwendung immer wieder automatisch in die HTTP-Anfrage übermittelt. Diese Technik hat die serverseitige Programmierung erheblich vereinfacht. Ein Cookie wird zwischen Client und Server im HTTP-Header ausgetauscht. Cookies werden serverbezogen abgespeichert, d.h. ein Webserver erhält nur die Cookies, die er selbst abgelegt hat. In einem Cookie kann eine Pfadangabe übertragen werden, um die Gültigkeit des Cookies auf bestimmte Bereiche eines Webservers einzuschränken. Der Benutzer hat durch die Browsereinstellungen die Möglichkeit, Annahme bzw. Rückübermittlung von Cookies zu unterbinden. HTTP/1.1 200 OK Server: Microsoft-IIS/5.1 Date: Sun, 09 Jun 2002 13:43:00 GMT Content-Length: 297 Content-Type: text/html Set-Cookie: Abrufe%5FSeite=239; expires=Wed, 19-Jun-2002 13:52:20 GMT; path=/Kapitel01 Set-Cookie: User=HS; expires=Wed, 19-Jun-2002 13:52:20 GMT; path=/Kapitel01 Cache-control: private
Listing 1.5: Beispiel für den Header einer HTTP-Antwort mit zwei Cookies
GET /Kapitel01/Counter/Session.asp HTTP/1.1 Accept: image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/vnd.ms-excel, application/vnd.ms-powerpoint, application/msword, */* Accept-Language: de,en-us;q=0.8,fr-be;q=0.6,ar-bh;q=0.4,zh-hk;q=0.2 Accept-Encoding: gzip, deflate User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461; .NET CLR 1.0.3705) Host: www.IT-Visions.de Connection: Keep-Alive Cookie: Abrufe%5FSeite=146; USER=HS
Listing 1.6: Beispiel für den Header einer HTTP-Anfrage mit zwei Cookies
Sitzungsverwaltung in ASP ASP ist nicht zuletzt deshalb so erfolgreich, weil es eine Sitzungsverwaltung bietet, die von Cookies abstrahiert: Statt den Programmierer damit zu »belasten«, jeden einzelnen Wert in einem Cookie zu speichern, erzeugt ASP eine eindeutige Nummer (so genannte Sitzungs-ID), speichert diese in einem Cookie und merkt sich serverseitig, welche Daten im Rahmen dieser »Sitzung« gespeichert wurden. Dies nennt man das ASP-Sitzungsmanagement (engl. Session Management). Eine Variable, die im Rahmen des Sitzungsmanagements abgelegt wird, nennt man Sitzungs-Variable.
14
Sitzungs-ID
Kapitel 1
Dem Entwickler steht eine Collection mit Namen Session zur Verfügung, in der er beliebige Attribut-Wert-Paare speichern kann. Sitzungsvariablen sind aus der Sicht des Entwicklers serverseitige, globale Variablen, also genau das, was eingangs dieses Kapitels schmerzlich vermisst wurde. Tabelle der Sitzungs-IDs
Tabelle 1.2: Speicherung der Sitzungsvariablen auf dem Server
Die technische Realisierung bleibt dem Entwickler verborgen. ASP verwaltet intern eine Tabelle mit der Zuordnung von Sitzungs-ID, Sitzungsvariablen und deren Werten. Die Werte können auch Arrays oder Objektzeiger sein. Sitzungs-ID
Sitzungsvariable
Wert
447208138
User
"HS"
447208138
Anmeldezeit
#12:50:10#
447208138
Warenkorb
Array { "ISBN 3-8273-1905-6", "ISBN 3-82732010-0", "ISBN 3-86063-667-7" }
447208139
User
"CB"
447208139
Anmeldezeit
#13:10:11#
An den Client wird nur die Sitzungs-ID übermittelt. Set-Cookie: ASPSESSIONIDGQGQGOUY=447208138; path=/
Da dem Sitzungs-Cookie keine Gültigkeitsdauer mitgegeben wird, wird er beim Schließen des Browser sofort verworfen. Der Client übermittelt diesen SitzungsCookie bei der nächsten Anfrage zurück an den Server. Cookie: ASPSESSIONIDGQGQGOUY=447208138
Abbildung 1.11: Anzeige des Sitzungs-Cookies im Internet Explorer
Von ASP zu ASP.NET
15
ASP baut dann anhand der im Sitzungs-Cookie übermittelten Sitzungs-ID vor dem Aufruf des Programmcodes die Session-Collection anhand der in der internen Tabelle gespeicherten Werte wieder auf. Browser
Abbildung 1.12: Ablauf des ASPSession-Managements
Webserver HTTP-Header URL
asp.dll
CookieVerzeichnis
Browser
speichert Cookie zeigt HTMLSeite an
HTTP-Header ASPSESSIONID
HTTP-Content HTML
erzeugt neue Sitzungs-ID ordnet Werte der Session-ID zu übermittelt HTML & Sitzungs-ID
Seite.asp
setzt Wert in der Session-Collection
Sitzungs-ID
Name
Wert
...
ASPSESSIONID
HTTP-Header
liest Cookie stellt Anfrage an den Server
URL ASPSESSIONID
asp.dll
liest Session-ID aus Request-Header liesst Werte aus der Session-Tabelle baut Session-Collection auf ...
Seite.asp
liesst Wert aus der Session-Collection
...
Eine Sitzung beginnt mit dem ersten Aufruf einer Seite aus der Webanwendung und endet nach einer definierbare Zeit (in der Regel 20 Minuten) nach Aufruf der letzten Seite oder durch einen ausdrücklichen Befehl sofort. Eine Sitzung ist benutzerbezogen, da die Sitzungs-ID ja benutzerbezogen gespeichert wird. ASP-Befehle Die folgenden Befehle stehen in ASP für die Parameterübergabe und Sitzungsverwaltung zur Verfügung: b VAR = Request.Form("NAME") liefert den Inhalt des Formularfeldes NAME aus der aufrufenden Seite (übermittelt via HTTP-POST im HTTP-Header).
Request-Objekt
b VAR = Request.QueryString("NAME") liefert den Inhalt des Attributs NAME aus Querystring, mit dem die aktuellen Seite aufgerufen wurde. b VAR = Request("NAME") sucht sowohl in der Form- als auch der QueryString-Collection nach einem Attribut, das NAME heißt. Wenn es in beiden vorkommt, hat der Querystring Vorrang. b Session("NAME") = WERT speichert einen Wert im Rahmen des ASP-Sitzungsmanagement.
SessionCollection
b VAR = Session("NAME") ermittelt einen Wert, der zuvor in dieser Sitzung gespeicherten Werte. Session("NAME") ist die Kurzform von Session.Contents("NAME").
HINWEIS
b Session.SessionID liefert die Sitzungs-ID der aktuellen Sitzung. b Die aktuelle Sitzung kann durch Session.Abandon per Programmcode vorzeitig beendet werden. b Application("NAME") = WERT speichert einen Wert sitzungsübergreifend. Alle Sitzungen können auf diesen Wert zugreifen.
ApplicationCollection
b VAR = Application("NAME") ermittelt einen sitzungsübergreifenden Wert. Application("NAME") ist die Kurzform von Application.Contents("NAME").
16
HINWEIS
Kapitel 1
Trotz des ASP-Sitzungsmanagements besteht der Bedarf, individuelle Cookies speichern zu können. Cookies können beim Client permanent gespeichert werden und ermöglichen so, im Gegensatz zu Sitzungs-Variablen, Werte über längere Zeit zu behalten. CookieCollection
b Response.Cookies("NAME") = WERT speichert einen Wert in einem Cookie. b VAR = Request.Cookies("NAME") liest einen Wert aus einem Cookie. b Über das Attribut Expires kann das Verfallsdatum gesetzt werden, in dem folgenden Beispiel gilt der Cookie 90 Minuten. Ohne diese Angabe gilt der Cookie nur bis zum Schließen des Browsers. b Response.Cookies.Item("NAME").Expires = now+90 b Im Rahmen eines Cookies können mehrere einzelne Werte gespeichert werden: Response.Cookies.Item("NAME")("UNTERNAME") = WERT
Beispiel Der folgende Screenshot zeigt drei verschiedene Zähler. Abbildung 1.13: Beispiel
Die Implementierung dieser Webseite ist selbsterklärend. Zu beachten ist nur, dass im Fall des Zugriffs auf den Cookie der Schreibzugriff über das Response-Objekt und der Lesezugriff über das Request-Objekt erfolgt, während bei Session- und Application-Variablen vor und nach dem Gleichheitszeichen der gleiche Ausdruck steht. Listing 1.7: Kapitel01/ASP/ Counter.asp
Sitzung beenden
Umgebungsvariablen Jeder Webserver stellt eine Reihe von Informationen in so genannten Umgebungsvariablen bereit. Diese können unter ASP durch die Collection Request.ServerVariables Zugriff auf die Umgebungsvariablen haben.
Request.ServerVariables
Das folgende Listing zeigt beispielhaft alle Umgebungsvariablen. Die Variable »ALL_HTTP« fasst alle mit »HTTP*« beginnenden Umgebungsvariablen in einer Zeichenkette zusammen. ALL_HTTP= HTTP_ACCEPT:*/* HTTP_ACCEPT_LANGUAGE:de,en-us;q=0.8,fr-be;q=0.6,ar-bh;q=0.4, zh-hk;q=0.2 HTTP_CONNECTION:Keep-Alive HTTP_HOST:localhost HTTP_USER_AGENT:Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461; .NET CLR 1.0.3705) HTTP_COOKIE:Abrufe%5FSeite=239 HTTP_ACCEPT_ENCODING:gzip, deflate ALL_RAW= Accept: */* Accept-Language: de,en-us;q=0.8,fr-be;q=0.6,ar-bh;q=0.4,zh-hk;q=0.2 Connection: Keep-Alive Host: localhost User-Agent: Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461; .NET CLR 1.0.3705) Cookie: Abrufe%5FSeite=239 Accept-Encoding: gzip, deflate
Ausgabe aller Umgebungsvariablen des IIS 5.1
APPL_MD_PATH= /LM/W3SVC/1/Root/Kapitel01 APPL_PHYSICAL_PATH= H:\Code\Kapitel01\ AUTH_PASSWORD= AUTH_TYPE= AUTH_USER= CERT_COOKIE= CERT_FLAGS= CERT_ISSUER= CERT_KEYSIZE= CERT_SECRETKEYSIZE= CERT_SERIALNUMBER= CERT_SERVER_ISSUER= CERT_SERVER_SUBJECT= CERT_SUBJECT= CONTENT_LENGTH= 0 CONTENT_TYPE= GATEWAY_INTERFACE= CGI/1.1 HTTPS= off HTTPS_KEYSIZE= HTTPS_SECRETKEYSIZE= HTTPS_SERVER_ISSUER= HTTPS_SERVER_SUBJECT= INSTANCE_ID= 1 INSTANCE_META_PATH= /LM/W3SVC/1 LOCAL_ADDR= 127.0.0.1 LOGON_USER= PATH_INFO= /Kapitel01/ws_aspLIB.asp PATH_TRANSLATED= H:\Code\Kapitel01\ws_aspLIB.asp
18
Kapitel 1
QUERY_STRING= REMOTE_ADDR= 127.0.0.1 REMOTE_HOST= 127.0.0.1 REMOTE_USER= REQUEST_METHOD= GET SCRIPT_NAME= /Kapitel01/ws_aspLIB.asp SERVER_NAME= localhost SERVER_PORT= 80 SERVER_PORT_SECURE= 0 SERVER_PROTOCOL= HTTP/1.1 SERVER_SOFTWARE= Microsoft-IIS/5.1 URL= /Kapitel01/ws_aspLIB.asp HTTP_ACCEPT= */* HTTP_ACCEPT_LANGUAGE= de,en-us;q=0.8,fr-be;q=0.6,ar-bh;q=0.4,zh-hk;q=0.2 HTTP_CONNECTION= Keep-Alive HTTP_HOST= localhost HTTP_USER_AGENT= Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.1; Q312461; .NET CLR 1.0.3705) HTTP_COOKIE= Abrufe%5FSeite=239 HTTP_ACCEPT_ENCODING= gzip, deflate
Include-Dateien HTML selbst bietet (mit Ausnahme von Frames) keine Möglichkeit, eine Seite aus verschiedenen Bestandteilen zusammenzusetzen. Dies ist aber oft sinnvoll, um Redundanzen in verschiedenen Dateien zu vermeiden. ASP bietet zwei Techniken, um eine Datei in eine andere Datei einzubinden: Server.Execute()
b Server.Execute("PFAD") ruft die angegebene Datei auf und kehrt - im Gegensatz zu Server.Transfer() nach Abarbeitung der Datei zur aufrufende Datei zurück, um die weiteren Befehle in der aufrufende Datei abzuarbeiten.
#include
b ist kein ASP-Befehl, sondern basiert noch auf einem älteren Verfahren für dynamische Webseiten, dem Server Side Includes (SSI). Die Include-Anweisung verhält sich wie Server.Execute(). Der Pfad ist entweder mit dem Attribut file oder mit dem Attribut virtual anzugeben. Das Attribut file bezieht sich auf die Dateisystemhierarchie. Die Angabe nach file ist relativ zum aktuellen Standort oder ein absoluter Pfad, der mit einem Laufwerkbuchstaben oder Rechnernamen beginnt. Mit virtual kann man im Webserver konfigurierte virtuelle Verzeichnisse ansprechen. Dazu gehören aber auch die dem Wurzelverzeichnis direkt untergeordneten Verzeichnisse, die nicht als virtuelle Verzeichnisse konfiguriert wurden. Sowohl bei der #Include-Anweisung als auch bei Server.Execute() kann die aufrufende Datei HTML-Code und/oder Programmcode enthalten. Die Dateiextension der aufgerufenen Datei ist beliebig, denn diese wird dem Browser ja nicht bekannt.
Praxisbeispiel: Ein Buchkatalog in ASP Produktliste
Die Webanwendung in diesem Praxisbeispiel ist eine Produktliste (die Produkte sind Bücher), wobei per Drop-Down-Menü aus verschiedenen Produktkategorien ausgewählt werden kann. Der Link unter den Produktnamen führt zu einer Detailseite für das einzelne Produkt. Die Daten stammen aus einer Microsoft Access-Datenbank (produktkalog.mdb), die im gleichen Verzeichnis wie die Webseite liegen soll. Für
Von ASP zu ASP.NET
19
den Datenzugriff kommt die Klasse RecordSet aus der Komponente ActiveX Data Object (ADO) zum Einsatz. Ein weiterer Link führt zu einer kontextsensitiven HilfeSeite. Abbildung 1.14: Hauptseite der ASP-Anwendung
Abbildung 1.15: Anzeige der Produktdetails
Dieses Praxisbeispiel finden Sie in diesem Buch noch in zwei weiteren Varianten als ASP.NET-Anwendung: Am Ende dieses Kapitels wird die Anwendung in ASP.NET mit serverseitigen Steuerelementen und Datenbindung unter Einsatz von ADO.NET gezeigt. Eine einfachere, rein syntaktische Migration des Praxisbeispiels wird in Kapitel 9 vorgestellt.
20
HINWEIS
Kapitel 1
Produktliste Produktliste.asp
Das Listing 1.8 zeigt die Implementierung der Produktliste (Produktliste.asp). Die verfügbaren Produktkategorien werden aus einer Datenbanktabelle gelesen. Die Seite ruft sich nach einem Klick auf die Schaltfläche selbst auf, dabei wird mit Request("PK_ID") die gewählte Produktkategorie ermittelt. Wenn dieser Wert nicht 0 ist, werden die Produkte der entsprechenden Kategorie aus der Datenbank geholt und angezeigt.
Dynamischer Hyperlink
Der Hyperlink unter dem Produktnamen führt zur Folgeseite Produktdetails.asp, wobei durch den Querystring die Nummer des gewählten Produkts übergeben wird:
Zustand des Drop-DownMenüs
Listing 1.8: Produktliste.asp
Für den Benutzerkomfort wichtig, aber für den Programmierer lästig ist, dass sichergestellt werden muss, dass nach dem Neuaufruf der Seite das Drop-Down-Menü immer noch die ausgewählte Produktkategorie zeigt. Das ist in ASP nicht selbstverständlich. Die Liste der Produktkategorien wird bei jedem Seitenaufruf neu aus der Datenbank eingelesen und durch Vergleich mit Request("PK_ID") muss ermittelt werden, welches -Tag das Attribut Selected erhält (if cint(Request("PK_ID")) = cint(rs("PK_ID")) then Response.Write " Selected ").
| |