3
Übersicht
• Attribute und Gültigkeitsbereiche• Motivation für Sessions• Verwendung von Sessions
5
Welchen Zweck habenAttribute?
• Attribute erlauben die Zwischenspeicherungvon Werten, die vom Programm angelegt undgeändert werden können
• Attribute können verschiedeneGeltungsbereiche haben
6
Motivation
Informations-austauschzwischen
verschiedenenElementen
7
Attribute Konzept
• Servlets können trotz ZustandslosigkeitWerte zwischenspeichern– um sie später selbst wieder zu verwenden– um sie mit anderen Servlets auszutauschen
• Diese Werte können einen beliebigenTyp haben (d.h. Rückgabewert istObject!)
• Attribute werden in verschiedenenBereichen abgelegt, je nach Gültigkeit
8
Attributsbereiche
Gültigkeitsbereich Lebensdauer Verwendung
Context GanzeWebanwendung
Wie dieAnwendung ?
RequestAlle Elemente inder Kette dieser
Request
Bis die Requestnicht mehr
weitergegebenwird (dispatch!)
?
Session
Für einenAnwender, bis er
die Web-App„verlässt“
Bis die Sessionbeendet ist ?
9
Verwendungszweck derAttributsbereiche
Gültigkeitsbereich Lebensdauer Verwendung
Context GanzeWebanwendung
Wie dieAnwendung
Datenbank-verbindung
RequestAlle Elemente inder Kette dieser
Request
Bis die Requestnicht mehr
weitergegebenwird (dispatch!)
Zwischen-ergebnisse
Session
Für einenAnwender, bis er
die Web-App„verlässt“
Bis die Sessionbeendet ist Einkaufswagen
10
Attribut-API: Context
• Im Interface ServletContext• Im Servlet über getServletContext()
verfügbar• Methoden:
– getAttribute(String)– setAttribute(String,Object)– removeAttribute(String)– getAttributeNames()
11
Attribut-API: Request
• Im Interface ServletRequest (und damitauch in der Klasse HttpServletRequest)
• Methoden:– getAttribute(String)– setAttribute(String,Object)– removeAttribute(String)– getAttributeNames()
12
Attribut-API: Session
• Im Interface HttpSession (mehr dazuspäter in der Vorlesung)
• Methoden:– getAttribute(String)– setAttribute(String,Object)– removeAttribute(String)– getAttributeNames()
13
Wichtige Anmerkungen zuAttributen
• Rückgabetyp ist Object, also ist ein Castnotwendig
• Nicht thread-sicher:– Komplexes Thema– Faustregel: Es sollten nie mehrere
Anwender gleichzeitig auf ein Attributzugreifen
– Vorgriff: Session Beans bieten uns diegleiche Funktionalität mit Threadsicherheit
14
Verwendung von Attributen –Setzen (z.B. im Context)
ServletContext!
Klasse: init.SampleContextListener
15
Verwendung von Attributen -Auslesen
Klasse: init.ContextUser2
Frage: Warumder Cast aufSharedData?
17
Problem: Das http-Protokoll ist inReinform zustandslos
Request
Response
Verbindungsaufbau
Verbindung beendet
Im http-Protokoll wird nach jeder Anfrage die Verbindung beendet.Zustandslosigkeit
18
Konsequenzen derZustandslosigkeit
• Jede Anfrage ist eine neue Verbindung• Der Inhalte der Anfrage wird dann
vergessen• Es gibt keine „Historie“:
– Welche Seite wurde vorher besucht– Welche Werte wurden vor der aktuellen
Anfrage in ein Webformular eingegeben– ….
19
Wann Zustandslosigkeit keinProblem ist!
• Bei „normalen“ Webseiten (reines HTML)• Beispiel: Es ist egal, von welcher Seite ich komme,
http://web.fh-ludwigshafen.de/index.nsf/de/imagefilmsieht immer gleich aus!
• Früher bestand das Internet nur aus statischen Seiten
20
Wann Zustandslosigkeit einProblem wird!
Kaufe Buch X
Zeige EinkaufwagenUser: Cowboy Bill
Im http-Protokoll wird nach jeder Anfrage die Verbindung beendet.Zustandslosigkeit
Die Seite „Zeige Einkaufwagen“ kann nicht wissen, dass vorherein Buch X gekauft wurde
21
Vorschlag:Naive Lösung
• Wir speichern Zustandsinformationen imServletcontext
• Beim nächsten Aufruf haben wir alleDaten wieder da!
• (Wir können jetzt heimgehen undmüssen nichts über Sessions lernen!)
22
Gruppendiskussion: Was würde hierpassieren?
Kaufe Buch X
Zeige EinkaufwagenUser: Cowboy Bill
Kaufe Buch X
Zeige Einkaufwagen
Kaufe Buch YUser: Gentleman Dave
User: Cowboy Bill
User: Cowboy Bill
Die
Wel
taus
der
Sich
tBill
sD
ieW
elta
usde
rSi
chtd
esSe
rver
s
23
Bewertung der naiven Lösung
• Die naive Lösung trägt nicht derTatsache Rechnung, dass ein Servermehrere Anwender hat
• Wir brauchen für jeden Anwender eineeigene Umgebung für Attribute
24
Session IDs
CB Kauft Buch X
Zeige Ek-Wagen CB
GD Kauft Buch YUser: Gentleman Dave
User: Cowboy Bill
User: Cowboy Bill
Anmelden als CBUser: Cowboy BillCB
CB
Anmelden als GDUser: Gentleman Dave
GD
GD
CB
25
Hinweis : Cookies
• Cookies speichern Informationen auf der ClientSeite
• Diese Information wird mit jeder Anfrage anden Server übertragen
• Über einen Cookiewert („Session ID“) kann derServer erkennen, wer die Anfrage gestellt hat
• Im Servlet werden über die Session ID dieAttribute identifiziert, die zur Session desAnwenders gehören
27
Was macht eine Session?
Beginn Aktiv Terminiert
Wird durch einenMethodenaufruf imServlet gestartet!
Attribut 1
….
Attribut n
„Private“ Attributenur für einen
Anwender
Attribute werden gelöscht.User muss eine neue
Session beginnen!
28
Typischer Anwendungsfall
Session explizitbeenden
Session abfragen &Attribute ändern
Session erzeugenNutzer kommt aufder Startseite an
Nutzer kommt auf einerSeite an
Nutzer meldet sich ab
Session TimeoutNutzer verlässt Seiteohne sich abzumelden
29
Typischer Anwendungsfall
Session explizitbeenden
Session abfragen &Attribute ändern
Session erzeugenNutzer kommt aufder Startseite an
Nutzer kommt auf einerSeite an
Nutzer meldet sich ab
Session TimeoutNutzer verlässt Seiteohne sich abzumelden
30
Session erzeugen/abfragen
• Wird mit dem gleichen „Befehl“ erreicht• Wenn keine Session existiert, dann wird
eine neue erzeugt
• request.getSession()• Rückgabewert: HttpSession
31
Beispiel für Sessionverwaltung
Attribute anlegen, die später verändert werden sollen
Werte anpassen (z.B. basierend auf denübergebenen Parameters)
Klasse: session.BeanCounterServlet (Aufruf über: BeanCounter.html)
32
Typischer Anwendungsfall
Session explizitbeenden
Session abfragen &Attribute ändern
Session erzeugenNutzer kommt aufder Startseite an
Nutzer kommt auf einerSeite an
Nutzer meldet sich ab
Session TimeoutNutzer verlässt Seiteohne sich abzumelden
33
Beispiel: Attribute in Session neuanlegen
z.B. einMethodenaufruf!
34
Beispiel: Zielmethode
Ich speichere denUser Namen (aus
Web Formular) undein eigenes Objekt
35
Typischer Anwendungsfall
Session explizitbeenden
Session abfragen &Attribute ändern
Session erzeugenNutzer kommt aufder Startseite an
Nutzer kommt auf einerSeite an
Nutzer meldet sich ab
Session TimeoutNutzer verlässt Seiteohne sich abzumelden
36
Beispiel: Attribute ändern
z.B. einMethodenaufruf!
37
Beispiel: Attribute ändern
38
Typischer Anwendungsfall
Session explizitbeenden
Session abfragen &Attribute ändern
Session erzeugenNutzer kommt aufder Startseite an
Nutzer kommt auf einerSeite an
Nutzer meldet sich ab
Session TimeoutNutzer verlässt Seiteohne sich abzumelden
39
Session explizit beenden• Beispiel:
– User klickt auf einen Link oder einen Submitt-Knopf um sichAbzumelden
– Der Link ruft die Methode invalidate() auf
Die Session endet sofort,Zugriffe auf das SessionObjekt nicht mehr legitim(IllegalStateException)
Klasse: session.SessionInvalidator
40
Typischer Anwendungsfall
Session explizitbeenden
Session abfragen &Attribute ändern
Session erzeugenNutzer kommt aufder Startseite an
Nutzer kommt auf einerSeite an
Nutzer meldet sich ab
Session TimeoutNutzer verlässt Seiteohne sich abzumelden
41
Steuerung des Timeout (1):Deployment Descriptor
Timeout-Zeitspannefür alle Servlets in
der Web-Applikationin Minuten
42
Steuerung des Timeout (2):Über Methodenaufruf
Timeout-Zeitspannefür diese Session in
Sekunden
Klasse: session.BeanCounterServlet (Aufruf über: BeanCounter.html)
44
Lernziele
• Attribute verwenden können und dieverschiedenen Geltungsbereichekennen.
• Verstehen, warum man Sessions braucht• Sessions verwenden können
46
Aufgabenstellung
• Programmieren Sie eine Eingabe fürPersonendaten
• Mit einer zweiten Webseite soll man inder Lage sein, beliebig viele Hobbieseinzugeben
• Die Informationen sollen in der Sessiongespeichert werden
47
Eingabeformular
Formular wie beim letzten Mal
48
Eingabe der Hobbies
49
Eingabe der Hobbies
50
Vorgehensweise
• Legen Sie ein eigenes Dynamic WebProject an
• Sie können die HTML Datei für diePersonendateneingabe und dieHilfsklassen in „Uebung-13-04.zip “verwenden – Achtung: kein vollständigesProjekt, bitte Einzelfiles importieren
51
Existierende Hilfsklassen:Person
52
Existierende Hilfsklasse:HTMLCreator
Schreibt über den PrintWriter die auf Folie 46 gezeigte HTML-Seite.Man muss nur das zielServlet übergeben, auf das die Seite verweisensoll und das Personen-Objekt übergeben, das angezeigt wird.
53
Grobstruktur
PersonalDatenEingabe.html
HobbyProcessingServlet
AddHobbyServlet
Session erzeugenPerson-Objekt anlegenHobby-Seite (Folie 46)
Session aufrufenPerson-Objekt auslesenHobby-Seite (Folie 46)
HTMLCreator
Person {