home  |  suche  |  kontakt/johner  |  institut 
studierende  |  tech-docs  |  mindmailer 

Einführung

HTTP ist ein zustandsloses Protokoll. Typische Webanwendungen müssen jedoch einen Zustand speichern können. Ohne dies wäre es nicht möglich,

     

  • einen Warenkorb zu betreiben
  • Authentifizierung über eine Webseite hin zu haben
  • die Rückkehr eines Benutzers zu erkennen (Hier nennt das Buch "Java ist auch eine Insel" das schöne Beispiel einer Partnervermittlung, die ihren Kunden mit der Meldung überraschen kann: "Schön, Sie nach zwei Wochen zum fünften Mal bei unserer Partnervermittlung wieder zu sehen. Hat es wieder nicht geklappt?")

Es gibt mehrere Möglichkeiten, den Zustand einer Sitzung zu speichern:

     

  1. Cookies
  2. URL Encoding
  3. Versteckte Felder (hidden fields)
  4. Authentifizierung am Webserver (eigentlich keine wirkliche Alternative, sonst müsste der Administrator alle Kunden als echte Accounts einrichten, was nicht nur bei ebay an der Menge der Kunden scheitern dürfte)

ad 1. Cookies

Cookies sind kleine Informationseinheiten. Der Webserver kann den Client veranlassen diese zu speichern. Der Client schickt diese Cookies dann als Kennung zum Server, woraufhin der Server den Client einer Session zuordnen kann.

Allerdings muss der Client die Cookies nicht annehmen. Sie können über die Einstellungen der gängigen Browser unterdrückt werden.

ad 2. URL-Encoding

Das Servlet übergibt die Session-Id dem erzeugten HTML Dokument. Beim "submit" dieses Dokuments wird diese Id dann als Parameter an die URL angehängt:

http://adomain.com/Servlets/MyServlet.jsessionid=c09393jdc

Damit werden Lesezeichen (Bookmarks) im Browser erschwert.

ad 1. und 2. HttpSession

Die HttpSession ist ein sehr eleganter Mechanismus, mit dem der Entwickler von der Fallunterscheidung verschont bleibt, ob der Client nun Cookies akzeptiert oder nicht. Er nutzt einfach javax.servlet.http.HttpSession, welche er sich vom Request holen und darauf sogar Objekte speichern kann (s. Methodenliste).

TODO: Für HttpSession und Cookies Beispielcode und Screenshots