# Session Daten pro User merken



## Bluevelvet64 (6. Dez 2007)

Hallo

auf welchem Weg merke ich mir unter Tomcat und JSF 1.2, feste Sitzungsdaten pro User ( Session )

Ich benötige z.B eine Bean, die beim start der Anwendung mit festen Startparametern gestartet wird. Bei jeder Aktion des Users ändern sich diese parameter. Allerdings muss diese Bean für jede gestartete Applikation neu erstellt werden.

Z.B statefulSessionBeans.

Allerdings bekomme ich dies unter tomcat 6.x nicht hin. Als IDE nehme ich NetBeans 6.0 und verwende JSF 1.2

Kann mir jemand einen Tip geben, auf welche Art und weise ich sitzungsspezifische Daten Serverseitig halte und weiterverwenden kann.

Danke im Voraus


----------



## byte (6. Dez 2007)

Die Session bekommst Du über HttpServletRequest#getSession(). Dort kannst Du mittels #setAttribute() Objekte speichern.


----------



## HLX (6. Dez 2007)

Du kannst einer Managed-Bean in der faces-config.xml den Session-Scope zuweisen.

An die HttpSession kommst du über

```
FacesContext.getCurrentInstance().getExternalContext().getSession()
```


----------



## Bluevelvet64 (6. Dez 2007)

aber so ganz verstanden habe ich das noch nicht.

Wo setze ich welchen Code ein.

was in der xxx.jsp

was in der face-config.xml

was in der bean.

Wichtig ist !!! Es gibt keine Objekte in den jsp Seiten, deren Werte ich halten will. Ich muss statusdaten pro Session ( user ) halten.

Kannst Du mir ein kurzes beispiel für einen Wert geben.bg


----------



## Bluevelvet64 (8. Dez 2007)

Wenn ich das ganze richtig verstanden habe, benötige ich eine Java-Klasse die ich in der faces-config bekannt mache. Welche Basisklasse implementiere ich in diese und warum

Wie wird ( wenn überhaupt ) diese Klasse beim starten der Applikation gestartet.

Wenn ich nun z.B  ein Objekt vom Typ String z.B nameST in der Bean für eine Sitzung halten will,

was ist in der Bean zu machen

was ist in der faces-config zu machen:  ich nehme an folgendes soltte genügen :
    <managed-bean>
        <managed-bean-name>User</managed-bean-name>
        <managed-bean-class>Bean.UserBean</managed-bean-class>
        <managed-bean-scope>session</managed-bean-scope>
    </managed-bean>

Was ist in welchen JSP Files zu machen. Wie lese ich die Werte aus und wie verändere ich diese.

Eine zeile würde mir schon genügen. Oder ein Link, der dieses Thema behandelt.

Danke für eine Antwort


----------



## maki (8. Dez 2007)

Da scheint es an den Grundlagen zu fehlen, ein gutes Buch ist imho ein muss.
Unterschätze die komplexität von JSF nicht, "learning by doing" führt zu nix ausser Frust ohne die Grundlagen zu kennen.

Einleitungen gibt es auch hier:
http://www.jsftutorials.net/jsf-reading-guide/articles-and-presentations.html


----------



## Bluevelvet64 (8. Dez 2007)

Hallo

ich entwickle seit 12 Jahren in Java, davon 3 Jahre Webentwicklung.

Allerdings habe ich bisher immer bestehende Projekte unterstützt, das Thema um das es gerade geht, habe ich nur als fertige Resource genutzt aber nicht entwickelt. Mit EJB's bekomme ich das auch hin, aber ich muss TomCat verwenden. das Projekt das ich gerade entwickle lüft schon ganz gut, aber ich benötige einfach einen kleinen Einblick wie ich eine "Stateful Bean" unter Tomcat hin bekomme. 

Daher wäre ein Beispiel für ein einziges String Objekt schon ausreichend.

Trotzdem Danke für Deine Antwort

PS: ich besitze 6 Bücher über JSF und J2EE. Allerdings keines behadelt dieses Thema mit einem beispiel, da alle auf EJB unter GlassFish oder JBoss verweisen.


----------



## maki (8. Dez 2007)

> ich entwickle seit 12 Jahren in Java, davon 3 Jahre Webentwicklung.


Das ist ja beeindruckend, seit Version 1.0! 
in den 3 jahren Webentwicklung bist du noch nie auf JSPs oder Servlets gestossen???
Kann man denn in Java Webentwicklung machen ohne die zwei? Bin echt neugierig...



> das Projekt das ich gerade entwickle lüft schon ganz gut, aber ich benötige einfach einen kleinen Einblick wie ich eine "Stateful Bean" unter Tomcat hin bekomme.


Es gibt so etwas wie ein stateful Session bean nicht im Tomcat 



> PS: ich besitze 6 Bücher über JSF und J2EE. Allerdings keines behadelt dieses Thema mit einem beispiel, da alle auf EJB unter GlassFish oder JBoss verweisen.


Ist da irgendein Kapitel über Servlets oder JSPs drinnen?
JSF baut (ausser man nimmt Facelets) auf Servlets und JSPs auf, schwer bis unmöglich zu verstehen ohne Kenntnisse in Servlets und JSPs.



> Daher wäre ein Beispiel für ein einziges String Objekt schon ausreichend.


Wie schon in diesem Thread erwähnt, mit request.getSession() bekommst du das Session Objekt, mit session.saveAttribute( "name", wert) kann man Objekte darin ablegen.

Meine Empfehlung wäre sich in Servlets und JSPs einzuarbeiten, da wie gesagt diese zwei die Grundlage für JSF sind, ohne geht's nicht.


----------



## Bluevelvet64 (9. Dez 2007)

Zitat
Das ist ja beeindruckend, seit Version 1.0! icon_wink.gif   in den 3 jahren Webentwicklung bist du noch nie auf JSPs oder Servlets gestossen???  Kann man denn in Java Webentwicklung machen ohne die zwei? Bin echt neugierig..

Wer sagt das ich  nie mit Servlets gearbeitet habe. Ich hatte in allen Projekten dummerweise immer keine berührung mit dem Problem das ich jetzt habe. Es waren immer Projekte bei VW und Audi und ähnlichen Firmen in denen der Teil der WebApplikationen die den Start bestimmen nicht von den Abteilungen in denen ich war bearbeitet wurden sondern über EAR eingebunden wurden. Zudem liefen alle diese Projekte unter Websphere oder JBoss und dort worden EJB verwendet. So hatte ich eben nie den Bedarf das zu entwickeln, was ich jetzt benötige. Alle diese Projekte verwendeten JSF, Servlets, Struts, Spring. Und ich hatte keine Probleme Fehler zu finden, zu korrigieren oder diese Projekte zu erweiteren.


Zitat:
  das Projekt das ich gerade entwickle lüft schon ganz gut, aber ich benötige einfach einen kleinen Einblick wie ich eine "Stateful Bean" unter Tomcat hin bekomme. 
 Zitat  
 Es gibt so etwas wie ein stateful Session bean nicht im Tomcat icon_wink.gif 

Das weiss ich selbst, ich meinte ja auch, ich benötige etwas das im technischen Sinn dem entspricht , was eine StateFulSessionBean wäre. Also eben Sitzungsdaten zu merken.


Zitat:
 PS: ich besitze 6 Bücher über JSF und J2EE. Allerdings keines behadelt dieses Thema mit einem beispiel, da alle auf EJB unter GlassFish oder JBoss verweisen.

Zitat  
 Ist da irgendein Kapitel über Servlets oder JSPs drinnen? 
 JSF baut (ausser man nimmt Facelets) auf Servlets und JSPs auf, schwer bis unmöglich zu verstehen ohne Kenntnisse in Servlets und JSPs. 

Es gibt da "nur" Kapitel über Servlets und JSP. Und alle schreiben auch das man dieses Problem auf diese Art zu lösen ist, wie es hier mir schon einige Male angeführt wurde. Aber eben alle ohne Beispiel. Ich "weiss" das es über request.getSession() zu machen ist, das wusste ich schon, bevor ich diesen Thread eröffnet habe. Aber mir fehlt ein konkretes Beispiel, für einen einfachen Wert.

Zitat:
  Daher wäre ein Beispiel für ein einziges String Objekt schon ausreichend. 

 Wie schon in diesem Thread erwähnt, mit request.getSession() bekommst du das Session Objekt, mit session.saveAttribute( "name", wert) kann man Objekte darin ablegen. 

Anstatt sich die Zeit zu nehmen mich ständig zu belehren, was ich zu tun habe und in was ich mich ein zu lesen habe, wäre es doch einfacher gewesen, ein kleinen Beispiel zu geben wie es konkret und nicht theoretisch zu machen ist. 

Nochmal zum mitschreiben : Ich benötige eine oder zwei Zeilen auf jsp(Client)Seite und ein beispiel auf Java(Server)Seite

Sollte jemand hier im Forum in der Lage sein mir ein solches Beispiel zu geben, wäre das ganz toll. Theoretische Erwägungen finde ichg in meinen Büchern genügend


----------



## Bluevelvet64 (9. Dez 2007)

Hier mal ein kurzer Überblick was ich machen will.

es gibt folgende Dateien im verzeichnis web.

eine index.jsp die beimStart der APP gestartet wird
eine start.jsp die einen Dynamischen Aufbau mit subview besitz.

dazu 3 JSP im verzeichnis pages die als Subview in die start.jsp eingebunden werden. Allerdings nicht gleichzeitig sondern abhängig vom Wert eines Stringobjektes -modusST- in der Bean -Start.java-

Beim Start der Applikatioin wird die Start.java initailisiert und stellt das Stringobjekt modusST auf den Wert "LOGON"

Die index.jsp verweisst über einen forward auf die Start.jsp. Diese baut den Screen über subviews auf. Dabei wird der Inhalt der Bean Start.modusST abgefragt. Beim Start steht dieser Wert auf "LOGON"  daher wird in die Subview das File pages/logon.jsp  eingebunden.

Wenn nun ein erfolreiches Login erfolgt, wird über eine Aktion zum einen der Wert modusST in der Bean auf "SYSTEM" geändert und über die navigation-rule in der faces-config.xml  die start.jsp erneut aufgerufen. Diese fragt wieder das Objekt modusST in der Start Bean abgefragt. Dieser steht nun auf "SYSTEM".  Daher bindet die start.jsp an der Stelle in der zuerst die pages/logon.jsp über die Subview eingebunden wurde, nun die pages/system.jsp ein. Und so geht es weiter. Das Objekt "modusST" in der Start bean hat so immer einen Zustand der der start.jsp mitteilt welche Seite eingeblendet werden soll. Auf diese Weise habe ich nur eine jsp die unterschiedliche Rollen als Navigationsseite übernimmt. Aber auch andere Objekte steuere ich so. Zum Beispiel den Inhalt eines labelobjektes einer anderen JSP. 

Das funktioniert auch für einen User. Allerdings ist der Wert statisch, so das alle User immer den gleichen modus haben.

Daher benötige ich ein "statefulSessionBean". Da aber Tomcat verwendet werden soll, gibt es eben keine "statefulSessionBean". Ich hatte bisher nie den Bedarf den Context aus zu lesen oder zu verändern. Ausserdem bin ich mir nicht sicher das dies was ich ereichen will, über Tomcat zu machen ist. Denn die Startwerte müssen vom Server generiert werden und dann der Session zu gewiesen werden. Daher habe ich ja auch die index.jsp die sofort auf die start.jsp weiterleitet und nur beim starte der APP aufgerufen wird. Ich denke ich kann in der index.jsp meine startobjekte wir - modus-  seitenname  userid  erstellen kann und diese dann über eine bean über den context aufrufen kann.

ich benötige einfach nur eine kleinen Tip wie dieses Aussehen könnte.

Kann mir jemand diesen kleinen Tip geben


----------

