Inhalt 6. Anwendungsbeispiel 8. Bewertung

7.   Ergänzungen

7.1   Statuscodes

Der Response eines Webservers besteht in der Regel aus einer Statuszeile, einem oder mehreren Headern, einer Leerzeile und dem Dokument. In der Klasse HttpServletResponse sind eine Menge von Konstanten für die Statuszeile definiert, die der Methode setStatus übergeben werden können.

Die Statuscodes werden in fünf Kategorien eingeteilt. Werte von 100 bis 199 informieren, dass der Client mit einer anderen Aktion antworten soll. Bei erfolgreicher Ausführung wird ein Code zwischen 200 und 299 zurückgegeben. Ein Wert von 300 bis 399 zeigt verschobene Dateien an. Ein Code zwischen 400 und 499 repräsentiert einen Fehler des Clients, zwischen 500 und 599 einen Fehler des Servers.

7.2   Zugriff auf Variablen

Das Common Gateway Interface speichert Informationen über die Anfrage in bestimmten Variablen. Von einem Servlet aus erhält man diese Daten durch den Aufruf von Funktionen des Objekts request, das den Servicemethoden übergeben wird. Sie geben Auskunft über Autorisationsschema, Anzahl der gesendeten Bytes, Typ der Daten, Hauptverzeichnis des Dokuments und Pfadinformationen, Adresse und Domäne des Clients, Art des Requests, sowie Name, Port, Protokoll und Software des Servers.

7.3   Cookies

Bei einem Cookie handelt es sich um eine kleine Menge textueller Informationen, die ein Webserver an den Browser schickt und beim nächsten Aufruf der Seite unverändert zurückerhält. Durch diesen Mechanismus können Einstellungen des Benutzers auf seiner Festplatte gespeichert werden. Cookies werden zur Personalisierung von Webseiten, Identifikation eines Benutzers während einer Sitzung und gezielte Werbeannoncen verwendet.

Zunächst erzeugt das Servlet eine Instanz der Klasse Cookie. Name und Wert sind bereits dem Konstruktor als Zeichenkette zu übergeben, können aber später durch die Methoden setName und setValue geändert werden. Zur Angabe optionaler Attribute wie Kommentar, Pfad, maximales Alter und Versionsnummer enthält die Klasse entsprechende Prozeduren. Im Normalfall schickt der Browser ein Cookie nur an den Server zurück, von dem es erzeugt wurde. Eine Gruppe anderer Hosts, die ebenfalls Zugriff darauf haben sollen, kann mit der Methode setDomain festgelegt werden.

Cookies werden mit der Methode addCookie von HttpServletResponse in einen Anwortheader eingefügt und an den Client geschickt. Später liefert getCookies der Klasse HttpServletRequest ein Array aller in der Anfrage enthaltenen Cookies zurück, deren Namen, Werte und Attribute durch Zugriffsmethoden abgefragt werden können.

7.4   Session Tracking

Jedesmal, wenn der Client eine Webseite benötigt, wird eine neue Verbindung zum Server aufgebaut. Es ist aus diesem Grund schwierig, Informationen für die gesamte Dauer einer Sitzung zu halten. Beim Online Shopping müssen aber beispielsweise einzelne Bestellungen im virtuellen Einkaufswagen bis zur endgültigen Bestätigung aufbewahrt werden.

Der wohl verbreitetste Lösungsansatz speichert Daten der aktuellen Sitzung in Cookies. Als Alternative hängt der Client Zeichen zur Identifikation der Sitzung am Ende der Internetadresse an, die der Server mit von ihm gespeicherten Informationen verbindet. Beim Einsatz dynamisch generierter Seiten können in versteckten Formularfeldern Namen und Werte untergebracht werden, die beim Abschicken in den GET beziehungsweise POST Requests enthalten sind.

Den Entwicklern von Servlets steht die Session Tracking API zur Verfügung, die von diesen Mechanismen abstrahiert. Beim Aufruf der Methode getSession von HttpServletRequest extrahiert das System aus einem Cookie oder der Internetadresse einen Schlüssel zur Identifikation des Clients und sucht damit aus einer Tabelle das zugehörige, am Server lebende HttpSession Objekt. Wenn der Benutzer noch nicht an einer Sitzung teilnimmt, liefert die Methode in Abhängigkeit des booleschen Parameters entweder null oder ein neu erzeugtes Objekt zurück. Die Methode setAttribute dieses Objekts verbindet Informationen in Form von Namen und Werten mit dieser Sitzung, frühere Ausprägungen werden ersetzt. Mittels removeAttribute kann das Servlet Werte ersatzlos entfernen. Die Methode getAttributeNames liefert die Namen aller Attribute der aktuellen Sitzung. Zum Auslesen eines konkreten Wertes wird der Methode getAttribute der gewünschte Name übergeben.

Wenn die mit setMaxInactiveInterval festgelegte Zeit in Sekunden zwischen zwei Zugriffen des Clients verstrichen ist, wird die Sitzung beendet. Davon werden alle Objekte informiert, die das Interface HttpSessionBindingListener implementieren und entsprechend registriert waren. Durch Aufruf der Methode invalidate kann das Servlet die Sitzung auch explizit deaktivieren.

7.5   Debugging

Die Fehlersuche erweist sich als mühsam, weil Servlets nicht direkt startbar sind. Bei der Ausführung durch einen Request ist es schwierig, Breakpoints zu setzen oder Messages und Traces zu lesen. Es gibt jedoch eine Reihe bewährter Strategien, um mögliche Probleme aufzudecken.

Fehler können entweder in den Daten der Anfrage, bei deren Verarbeitung oder in der Antwort liegen. Diese Bereiche müssen getrennt betrachtet werden. Über Probleme im Servlet sollte der Benutzer durch eine einfache Seite oder unter Verwendung der Methode sendError von HttpServletResponse informiert werden. Startet man den Server von der Kommandozeile aus, erscheinen alle Ausgaben im selben Fenster, die vielleicht eine Einengung des Zeitpunkts und der Ursache eines Fehlers ermöglichen. Die Methode log der Klasse HttpServlet schreibt Einträge in die Logdatei des Servers, die später zum Debugging herangezogen werden kann. Wenn Änderungen am Servlet nicht sofort wirksam werden, muss eventuell der Webserver neu gestartet werden. Häufig sind die Fehler aber auch im Quellcode der Webseite zu finden, für dessen Validierung Tools erhältlich sind.

8. Bewertung