Informationen zu diesem Vorgang
Diese Informationen bilden zusammen mit dem Codierungsbeispiel SessionSample.java
ein Programmiermodell für die Implementierung von Sitzungen in Ihre eigenen Servlets.
Vorgehensweise
- Rufen Sie das HttpSession-Objekt ab.
Verwenden Sie zum
Anfordern einer Sitzung die Methode "getSession" des Objekts "javax.servlet.http.HttpServletRequest"
in der Java™ Servlet 3.0 API.
Wenn Sie zum ersten Mal ein HttpSession-Objekt
anfordern, hat die Sitzungsverwaltung drei Möglichkeiten, die Sitzung zu überwachen:
Cookies, Umschreiben von URLs oder SSL-Daten (SSL).
Veraltetes Feature: Die Sitzungsüberwachung mithilfe der SSL-ID ist seit
WebSphere Application Server
Version 7.0 veraltet. Sie können die Sitzungsüberwachung für die Verwendung von Cookies konfigurieren oder
die Anwendung für die Verwendung der URL-Umschreibung ändern.
depfeat
Angenommen, die Sitzungsverwaltung verwendet Cookies. In
diesem Fall erstellt die Sitzungsverwaltung eine eindeutige Sitzungs-ID und sendet diese in der Regel als
Cookie an den Browser zurück. Jede weitere Anfrage von diesem Benutzer (mit demselben Browser) übergibt das Cookie
mit der Sitzungs-ID, anhand derer die Sitzungsverwaltung das vorhandene
HttpSession-Objekt des Benutzers finden kann.
In Schritt 1 des Codebeispiels ist
Boolean(create) auf true gesetzt, sodass das HttpSession-Objekt erstellt wird, sofern es noch nicht vorhanden
ist. (Bei der API Servlet 2.3 und höher ist die Methode javax.servlet.http.HttpServletRequest.getSession()
ohne booleschen Wert standardmäßig auf true gesetzt und erstellt eine Sitzung, sofern für diesen Benutzer noch keine
Sitzung vorhanden ist.)
- Benutzerdefinierte Daten in der Sitzung speichern und abrufen.
Nach dem Einrichten einer Sitzung können Sie benutzerdefinierten Daten zur Sitzung hinzufügen und aus der Sitzung abrufen. Das Objekt
HttpSession besitzt ähnliche Methoden wie "java.util.Dictionary"
zum Hinzufügen, Abrufen und Entfernen von willkürlichen Java-Objekten.
In Schritt 2 des Codebeispiels liest das Servlet ein Integer-Objekt aus dem
Objekt HttpSession, erhöht es und schreibt es zurück. Sie können jeden beliebigen
Namen verwenden, um die Werte im HttpSession-Objekt anzugeben. Das Codebeispiel verwendet den Namen sessiontest.counter.
Da
das HttpSession-Objekt von den Servlets, auf die der Benutzer möglicherweise zugreift,
gemeinsam verwendet wird, sollten Sie vielleicht für die gesamte Site eine Namenskonvention verwenden,
um Konflikte zu vermeiden.
- (Optional) Ausgabe einer HTML-Antwortseite mit den Daten des
HttpSession-Objekts.
- Geben Sie dem Benutzer die Rückmeldung, dass während der Sitzung eine Aktion ausgeführt wurde. Vielleicht möchten Sie HTML-Code an den
Client-Browser übergeben, aus dem hervorgeht, dass eine Aktion
ausgeführt wurde. In Schritt 3 des Codebeispiels generiert das Servlet eine Webseite, die an den Benutzer zurückgegeben wird,
und zeigt immer, wenn der Benutzer im Laufe der Sitzung diese Webseite aufrufe, die Werte des sessiontest.counter
an.
- (Optional) Listener benachrichtigen. In einer Sitzung gespeicherte Objekte, die die Schnittstelle
javax.servlet.http.HttpSessionBindingListener implementieren, werden benachrichtigt, wenn die
Sitzung zum Abschluss kommt und ungültig gemacht werden soll.
Ausgehend von dieser Nachricht können Sie die Sitzung nachbereiten. Zu dieser Nachbereitung gehört unter anderem
das permanente Speichern der Änderungen, die während der Sitzung an einer
Datenbank vorgenommen wurden.
- Beenden Sie die Sitzung. Sie können eine Session wie folgt beenden:
- Automatisch mit der Sitzungsverwaltung, wenn eine Sitzung über einen bestimmten Zeitraum inaktiv ist. Administratoren können Ihnen sagen, wie
die Zeit angegeben wird, nach der eine Sitzung ungültig gemacht werden soll.
- Indem Sie das Servlet so codieren, dass es die Methode invalidate() für das Sitzungsobjekt aufruft.
Beispiel
import java.io.*;
import java.util.*;
import javax.servlet.*;
import javax.servlet.http.*;
public class SessionSample extends HttpServlet {
public void doGet (HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Schritt 1: Sitzungsobjekt abrufen
boolean create = true;
HttpSession session = request.getSession(create);
// Schritt 2: Sitzungsdatenwert abrufen
Integer ival = (Integer)
session.getAttribute ("sessiontest.counter");
if (ival == null) ival = new Integer (1);
else ival = new Integer (ival.intValue () + 1);
session.setAttribute ("sessiontest.counter", ival);
// Schritt 3: Seite ausgeben
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("<html>");
out.println("<head><title>Session Tracking Test</title></head>");
out.println("<body>");
out.println("<h1>Session Tracking Test</h1>");
out.println ("You have hit this page " + ival + " times" + "<br>");
out.println ("Your " + request.getHeader("Cookie"));
out.println("</body></html>");
}
}