ralf gitzel 1 ralf gitzel@hotmailralf-gitzel.info/jee-16-03-attribute-und-sessions.pdf ·...

Post on 30-Apr-2020

11 Views

Category:

Documents

0 Downloads

Preview:

Click to see full reader

TRANSCRIPT

Ralf Gitzelralf_gitzel@hotmail.de

1

Sessions und Attribute

Ralf Gitzelralf_gitzel@hotmail.de

2

Themenübersicht

3

Übersicht

• Attribute und Gültigkeitsbereiche• Motivation für Sessions• Verwendung von Sessions

Ralf Gitzelralf_gitzel@hotmail.de

4

Attribute

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?

Ralf Gitzelralf_gitzel@hotmail.de

16

Motivation für Sessions

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

Ralf Gitzelralf_gitzel@hotmail.de

26

Verwendung von Sessions

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)

Ralf Gitzelralf_gitzel@hotmail.de

43

Lernziele

44

Lernziele

• Attribute verwenden können und dieverschiedenen Geltungsbereichekennen.

• Verstehen, warum man Sessions braucht• Sessions verwenden können

Ralf Gitzelralf_gitzel@hotmail.de

45

Übungsaufgabe

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 {

top related