Bei Weiterleitung von Servlet zu JSP: URL der JSP anzeigen

Status
Nicht offen für weitere Antworten.

MichiM

Bekanntes Mitglied
Guten Abend,

vorwiegend zu Übungszwecken bastle ich grad an einem Kontaktformular.
Drei Felder: Name, Email, Nachricht.

Hierbei möcht ich mich ans MVC-Konzept halten.

Die JSP enthält das Formular. Beim Abschicken wird ein Servlet aufgerufen, das die Daten verarbeitet (u.a. die Mail verschickt, ggf. Fehlercodes generiert, etc.), Ergebnis im Bean ablegt, anschließend (zunächst mal pauschal, ist ja nur ein Test) zur aufrufenden JSP weiterleitet, welche das Ergebnis präsentiert.

Funktioniert alles recht schön, allerdings bekomme ich dann, wenn ich den Scope auf "request" setze:

Code:
<jsp:useBean id="emailAbsenderBean" class="servlet.EmailAbsenderBean" scope="request" />

und im Servlet am Ende auf diese Weise:

Code:
        RequestDispatcher dispatcher = request.getRequestDispatcher ( "kontakt.jsp" );
        dispatcher.forward ( request, response );

zur JSP weiterleite, in der Browser-Adresszeile die URL des gemappten Servlets angezeigt. Unschön.

Bei Verwendung von Scope "Session" (an sich ja unnötig) und Weiterleitung durch

Code:
response.sendRedirect( "/java/kontakt.jsp" );

ließe sich (zumindest) das zwar zunächst schöner hinkriegen, allerdings ist der Scope dann eben auch "Session" und ich krieg bei jedem Neubetreten des Formulars diejenigen Daten in die Felder gesetzt, die beim letzten Absenden des Formulars drinstanden. Auch wieder unschön. :wink:

Wie macht man das jetzt am Schönsten? Lässt sich das auch irgendwie so hinbiegen bzw. zurechtmappen, dass bei der Weiterleitung über Statuscode 302 vom Servlet zur JSP dann wirklich der Name der JSP angezeigt wird und nicht der des gemappten Servlets?

Gruß Michi
 

bronks

Top Contributor
Das ist eine klassische Falschanwendung des MVC-Pattern, wie sie fast überall im Internet und in vielen Büchern herumgeistert.

Richtigerweise wird immer nur der Controller aufgerufen, welcher entscheiden muß was angezeigt werden soll. Bei WebApps wird das in fast allen fällen vermurxt dargestellt, weil die Möglichkeit zur Schlamperei offensteht und als erstes die JSP aufgerufen wird.


In Zusammenhang mit meinem ersten Absatz: http://www.java-forum.org/de/topic60683_jeder-depp-schreibt-cher.html
 

ms

Top Contributor
Irgendwie scheinen in letzter Zeit die URLs wichtiger zu sein als der Inhalt.
Gebe bronks völlig recht.
Was wenn der Inhalt nicht von Jsp's sondern von sagen wir Velocity-Templates oder per XML-XSLT-Transformation generiert wird?

ms
 
M

maki

Gast
Code:
response.sendRedirect( "/java/kontakt.jsp" );
Pfui! :bloed:

Schliesse ich mich bronks und ms an.
 

MichiM

Bekanntes Mitglied
Kennt jemand von Euch einen Artikel, der die Umsetzung des hier favorisierten Pattern (ausschließlicher Controlleraufruf) mit mustergültigem (möglichst kurzen) Beispiel unter Beteiligung aller drei Schichten beschreibt?

Den eigentlichen Kritikpunkt hab ich mangels Horizontbreite aus dem oben Gesagten noch nicht richtig erfasst, zumal ja - wie angedeutet - der Großteil der Literatur eben anderes zur konkreten Umsetzung der Idee propagiert. :wink:

Vorteilhaft für den Anfänger wäre auch, wenn dabei knapp und präzise darüber aufgeklärt wird, wo die praktischen Schwachstellen der Literaturvariante (JSP ruft Servlet auf, Servlet speichert Daten in Bean, leitet weiter zu JSP und JSP stellt Daten aus Bean dar) und die Stärken der alternativen Variante (ausschließlicher Controlleraufruf) liegen.

(Das Pfui ist da im Moment noch bisschen zu abstrakt für mich. :D )
 
M

maki

Gast
(Das Pfui ist da im Moment noch bisschen zu abstrakt für mich. icon_biggrin.gif )
Das Pfui erklärt:
Du machst einen redirect, keine Weiterleitung:
response.sendRedirect( "/java/kontakt.jsp" );
D.h. du schickst dem Client (Browser) die Anweisung, direkt auf die JSP zu gehen, das verletzt die Regeln des MVC Prinzips, wo alle(!) Client anfragen über den Controller laufen müssen.

Der Controller (Servlet) "besorgt" dann die Daten (Model) und leitet den Request an die passende View (JSP) intern weiter.
Das ist einer der Gründe, warum die URL immer "falsch" ist bzw. ignoriert werden sollte, ein andere ist, das Daten auf per POST geschickt werden können (und meistens auch sollen).
 

Ralf Ueberfuhr

Bekanntes Mitglied
Ihr mögt ja alle Recht haben, aber eine Möglichkeit habt ihr nicht betrachtet.

Für Webanwendungen gibt es zwei Mechanismen: Push und Pull. Webframeworks wie Struts und JSF nutzen den Push-Mechanismus, d.h. es wird der Controller aufgerufen, der leitet weiter an die JSP.

Es gibt aber auch Frameworks, die den Pull-Mechanismus anwenden (auch "komponentenbasiert"), z.B. JBoss Seam oder Tapestry. Bei denen wird der View aufgerufen, und der View holt sich dann Informationen von sogar mehreren Controllern.

Das würde für den Threadstarter heißen, direkt auf die JSP zu verlinken und dort das Servlet/die Servlets zu inkludieren.
Ist eben auch ein wenig Geschmackssache.

@Threadstarter: URLs sollen doch nur wegen Suchmaschinen und Lesezeichen schön sein. Das kannst du auch mit nem URL-Mapping schaffen. Mappe eine URL "irgendwas.jsp" auf ein Servlet. Dann hast du MVC2 UND ne schöne URL.
 
Status
Nicht offen für weitere Antworten.
Ähnliche Java Themen
  Titel Forum Antworten Datum
D Servlet Servlet Weiterleitung static html Web Tier 5
T JSF Primefaces: DataTable Ajax Update - Weiterleitung von anderer Seite Web Tier 11
D Sessiontimeout Exception bei Weiterleitung Web Tier 10
Q JSF bei Session-Timeout Weiterleitung auf spezielle Login-Seite Web Tier 15
F JSP Weiterleitung Web Tier 7
S Weiterleitung, wenn angemeldet Web Tier 8
A JSF Weiterleitung funktioniert einfach nicht Web Tier 2
I Automatische Weiterleitung JSF mit Aufruf einer Methode Web Tier 2
Tandibur JSF: Verlinkung mittels Button, bedingte Weiterleitung Web Tier 4
J [JSP] Abfrage der URL und automatische Weiterleitung Web Tier 6
D JSF+Weiterleitung zu einer Login-Page Web Tier 1
E Java Servlet doPost request, Mehrere Parameter mit demselben Namen aus Tabellenzeilen Web Tier 2
R servlet-mapping führt zu 404-Fehlern Web Tier 0
B Servlet mit TomCat9 Web Tier 0
A redirect mit servlet-mapping in web.xml Web Tier 4
J Wie Mouse Event in Servlet einbinden? Web Tier 1
D JSF Servlet Mapping Web Tier 3
J Session Servlet - JavaScript Web Tier 6
D Servlet 1 Servlet für alles - Wie Cookies per Ajax? Web Tier 1
S Problem mit Checkboxen im Servlet erkennen Web Tier 3
Todesbote Servlet MVC Design Pattern Web Tier 1
A Anfänger-Frage Servlet/Applet/JSP Web Tier 0
Shams Allgemeine Verständnisfrage zum Thema Servlet (in Vaadin) Web Tier 2
H File Output Servlet Web Tier 6
I vTiger Astersik Connector: NO JSP Support for , did not find org.apache.jasper.servlet.JspServlet Web Tier 0
OnDemand Servlet oder JSP Web Tier 12
H Servlet/JSP und OSGI Web Tier 2
L Servlet Datenbank Web Tier 0
D Java EE Servlet login Problem Web Tier 1
W Servlet SPEICHERN UNTER-Dialog für mehrere Dateien Web Tier 4
A Faces Context nicht mehr erreichbar nach Servlet Aufruf Web Tier 1
S Java Bean und Java Servlet Web Tier 2
G GWT 404 - Servlet nicht gefunden Web Tier 6
H Applet wirft AccessControlException bei File von Servlet Web Tier 3
H Servlet lässt sich nicht deployen Web Tier 7
C Kommunkation Servlets/Browseraufruf Servlet Web Tier 4
F.S.WhiTeY Servlet Servlet wird nicht angesprochen Web Tier 3
J Servlet Zugriff Servlet Web Tier 11
A JSON von JavaScript an Servlet Web Tier 9
K Servlet + JSP: JSP-Seite ein Array/ArrayList überliefern vom Controller-Servlet Web Tier 8
0 Servlet.Properties Web Tier 3
P Servlet Wo gibt es das javax.servlet.Servlet? Web Tier 2
H Servlet Servlet nimmt HTTP-GET mit Parameter entgegen Web Tier 2
5 Bild Pfad Servlet Web Tier 2
D Datenbankzugriff im Servlet Web Tier 5
H Servlet Apache Geronimo: Servlet nicht erreichbar Web Tier 2
S Ich brauche Buchempfehlung über JSP und Servlet Web Tier 2
A Parameterübergabe an Servlet und Aufruf von Servlets per Java Code Web Tier 7
S Auswahl eine Zeile von einer HTML Tabelle im Servlet Web Tier 4
K Servlet URL Mapping Web Tier 3
S ClassPath für Servlet Web Tier 3
reibi Servlet Logging - Standard Servlet Web Tier 5
K Portlet, Servlet doGet und doPost Web Tier 4
reibi Servlet Alleinlaufendes Servlet bauen Web Tier 6
P Servlet wird nicht gefunden - HTTP Error 503 Web Tier 7
lukas24680 Servlet pro Request Web Tier 2
C Pageing mit JSp&Servlet Web Tier 5
D JSP JSP integriert ein Servlet... Wie? Web Tier 7
I Servlet vor Browser URL-Direktzugriff schützen Web Tier 3
N Servlet ausführen Web Tier 26
B statische Html Seite als response erhalten (Servlet) Web Tier 3
A javax/servlet/jsp/jstl/core/Config Web Tier 1
F Servlet mapping ;-) Web Tier 3
H Servlet Mapping mit JSF Web Tier 8
B (JSP)+(Struts2)+(Servlet) Konfiguration web.xml Web Tier 2
W MVC mit Bean, JSP und Servlet Web Tier 6
T Button im Servlet - Werte übergeben Web Tier 2
J werte per post an servlet übergeben und auswerten Web Tier 3
ruutaiokwu HttpServletRequest-instanz in servlet und JSP unterschiedlich? Web Tier 5
T Bild durch anderes Bild ersetzen mit Servlet Web Tier 3
E Mein erstes Servlet Web Tier 8
S Servlet automatisch aufrufen Web Tier 2
J Kommunikation zwischen Servlet und EJB Web Tier 6
C Image in Servlet Web Tier 2
S Servlet File Upload (API oder JSPSmart download) Web Tier 4
N API Nutzung SERVLET Web Tier 12
J Memory Leak in Servlet nach längere Laufzeit Web Tier 6
ruutaiokwu template engine gesucht ohne abhängigkeit zum servlet container Web Tier 2
G Servlet Ausgabe richtig benutzen Web Tier 4
W Servlet auf sich selbst verweisen lassen (Anfängerfrage) Web Tier 6
M Servlet Ausführungsfehler Web Tier 4
D Servlet alle 6h ausführen Web Tier 5
M Servlet & JSP Organisation Web Tier 2
J seltsames Auslastungsproblem bei Servlet Web Tier 7
ruutaiokwu JSF - läuft ausserhalb des servlet-containers? Web Tier 5
R Direkten Servlet-Aufruf verhindern (JSP) Web Tier 3
K Formularweiterleitung an Servlet Web Tier 5
N Servlet: Problem mit getParameterValues Web Tier 4
J Dateiupload- Servlet Web Tier 14
H Probleme beim Aufrufen von Java- oder Servlet-Methoden aus Javascript Web Tier 2
G Kommunikation Servlet + Applikation Web Tier 4
megachucky Welche Servlet-Version benötigt GWT 2.0? Web Tier 13
X Servlet Select box Web Tier 6
S Java Servlet Content Type Web Tier 3
E Servlet zum speichern einer Datei in einer Datenbank Web Tier 3
M Servlet neuladen Web Tier 2
H Wie wurde ein Servlet aufgerufen Web Tier 2
J Servlet soll XML ausgeben und Javascript soll dieses einlesen Web Tier 3
H servlet fehlermeldung Web Tier 3
W JSP/Servlet Web Applikation programmierung Web Tier 9

Ähnliche Java Themen

Neue Themen


Oben