# Grundlegende Frage zu Servlets und JSPs



## mad-din (21. Nov 2007)

Hi!

Was ist so die gängigste Methode (wenn weder Struts noch JSF) zur Verfügung stehen, um Daten in einer JSP darzustellen, die sich bei jedem Aufruf ändern können? Momentan ist es so, dass ich ein Servlet habe, das aufgerufen wird und das die Daten aus einer Datenbank holt und dann auf die JSP weiterleiten soll. Nur wie kommen dann die Daten vom Servlet zum JSP? Ich kann ja schlecht eine HashMap erstellen und die in die Session speichern und dann im Servlet wieder auslesen... 

Wie ist da so die gängingste Methode und was wird hier mehr oder weniger als "Referenz" verwendet?

Danke & viele Grüße
Martin


----------



## SlaterB (21. Nov 2007)

speichere sie in den Request, nicht in die Session, wenn nur für diesen Request gedacht

oder wenn dich das genauso stört wie 'in die Session speichern',
was stört dich daran?

ist mir so als normaler Weg bekannt


----------



## mad-din (21. Nov 2007)

Hm,

was mich daran stört? Ich finds irgendwie unsauber  In die Session gehören sich zum Beispiel Daten wie angemeldeter Benutzer, ausgewählte Daten, aber nicht die Daten, die zur Verfügung stehen. Zum Beispiel wäre es doch Schwachsinn alle Personen eines Adressbuchs in die Session zu speichern, um diese dann anzuzeigen. 

Wäre es denn z.B. möglich, dass das Servlet die Daten aus der Datenbank holt und in eine Bean speichert, auf die dann die JSP zugreift?

Hintergrund ist folgender: Der Benutzer bekommt eine Liste mit Ländern, eines davon muss er auswählen. Er ruft also das Servlet auf, das liest die aktuellen Länder aus und leitet weiter an die JSP, die alles darstellt. Jetzt kann es aber sein, dass der Benutzer schon ein Land gewählt hat, dann sollte dieses natürlich hervorgehoben werden. Das heißt, das Servlet muss auch prüfen, ob in der Session schon ein ausgewähltest Land vorhanden ist. 

Wie löst man sowas im Normalfall?

Viele Grüße
Martin


----------



## SlaterB (21. Nov 2007)

wie gesagt, die nur anzuzeigenden Daten kannst du auch in den Request schreiben,
ich kenne spontan keine andere Möglichkeit, Daten an das JSP weiterzureichen,
außer Java-Tricks wie statische Operation

-----

ein ausgewähltes Land über mehrere Requests gehört nun garantiert in die Session, hast du ja selber gesagt
('In die Session gehören sich zum Beispiel Daten wie angemeldeter Benutzer, ausgewählte Daten')
oder meinst du nur die Auswahl, die mit dem letzten Request im aktuellen Formular mitgesendet wurde?
die wiederum in den Request, immer das gleiche Spiell 

sowohl Servlet als auch JSP können auf Session und Request zugreifen


----------



## mad-din (21. Nov 2007)

Hi!

Es ist so: Benutzer ruft Servlet auf und bekommt eine Liste mit Ländern angezeigt, diese Liste kommt aus der Datenbank. Der Benutzer wählt ein Land aus, dieses muss dann in die Session und geht einen Schritt weiter. Wenn er aber irgendwann zurück zur Länderauswahl will, soll es so sein, dass wiederum alle Länder dargestellt werden und das bereits ausgewählte hervorgehoben wird.

Und meiner Meinung nach gehört sich nur das ausgewählte Land in die Session, aber nicht die Liste aller möglichen Länder.

Viele Grüße,
Martin


----------



## SlaterB (21. Nov 2007)

zum 3. Mal: ich schlage auch nicht vor, die Liste aller möglichen Länder in die Session zu schreiben, sondern in den Request..


----------



## mad-din (21. Nov 2007)

Ich finde aber, dass es auch nicht in den Request gehört. Angenommen du müsstest eine Liste von Artikeln aus einer Datenbank in einer JSP darstellen. Wie würdest du das auf die einfachste Art machen ohne dabei unsauberen Code zu produzieren?

Ich weiß auch nicht, aber mir gefällt es, das in den Request zu speichern, weil dann kann ich es auch gleich in die Session speichern. 

Viele Grüße
Martin


----------



## SlaterB (21. Nov 2007)

und auch hier zum 2. Mal



			
				SlaterB hat gesagt.:
			
		

> ich kenne spontan keine andere Möglichkeit, Daten an das JSP weiterzureichen,
> außer Java-Tricks wie statische Operation





aber vielleicht antwortet noch wer anders


----------



## mad-din (21. Nov 2007)

Hi!

Sorry, wenn ich mich so sträube, aber ich finds einfach nicht sauber und Java muss doch da sicherlich mehr zur Verfügung stellen (ich gebe zu, bisher hab ichs immer in die Session geschrieben, aber das ist mir mittlerweile zu unsauber und man verliert auch leicht den Überblick). In JSF gibt es ja zum Beispiel die Möglichkeit eine ArrayList an eine DataTable zu binden bzw. ein Objekt an eine DataTable binden. Und so will ich es eigentlich auch haben. Damit wäre alles schön getrennt. Das Servlet kümmert sich darum alles zu verarbeiten, die Daten zu holen, das ausgewählte zu kennzeichnen und die JSP würde einfach nur die Darstellung übernehmen und nicht lange prüfen müssen, ob in der Session schon ein ausgewähltes Land vorhanden ist und dieses dann mit den möglichen Ländern vergleichen und hervorheben.

Viele Grüße
Martin


----------



## SlaterB (21. Nov 2007)

sicher, mit entsprechenden Frameworks kann man alles mögliche verstecken,
letztlich schreiben aber auch diese in die Session/ in den Request (wage ich zu behaupten),
kochen auch nur mit Wasser


----------



## HLX (21. Nov 2007)

mad-din hat gesagt.:
			
		

> ...und die JSP würde einfach nur die Darstellung übernehmen und nicht lange prüfen müssen, ob in der Session schon ein ausgewähltes Land vorhanden ist und dieses dann mit den möglichen Ländern vergleichen und hervorheben.



Für solche Dinge gibt es das Mittel der Tag-Libraries. Damit kannst du deine Tabellendarstellung auslagern. Schreib einfach ein Tag, dass die Darstellung für dich übernimmt.

Frameworks machen im Prinzip nichts anderes. Struts, JSF...die ganze Darstellung läuft über Tag-Libraries um die JSP-Seite von Code zu befreien.


----------



## mad-din (21. Nov 2007)

Hm,

da könnte was wahres dran sein. Vielleicht finde ich ja noch eine Möglichkeit es "eleganter" zu lösen, ansonsten speicher ichs halt wieder in der Session bzw. im Request 

Viele Grüße
Martin


----------



## ms (21. Nov 2007)

Der Requestscope ist doch genau dafür da, wenn Objekte an weitere Komponenten, die der Request durchläuft, weitergeben werden sollen.
Wenn du innerhalb einer JSP eine Variable benötigst (und nur innerhalb der JSP) dann wäre der PageScope zu verwenden.
In die Session sollten nur dann Objekte, wenn sie über mehrere Requests hinaus verfügbar sein sollen.

ms


----------

