Announcement

Collapse
No announcement yet.

Falsche DB-Transaktion bei forward nach Refresh vom Browser

Collapse
X
  • Filter
  • Time
  • Show
Clear All
new posts

  • Falsche DB-Transaktion bei forward nach Refresh vom Browser

    User 1 führt durch eine JSP eine Transaktion durch.<br>
    Nach einem erfolgreichen DB-Update in einer JSP leite ich mit forward zu einer anderen Seite.<br>
    - Datenbankzustand 1 -<br>
    Danach führt User 2 ebenfalls ein Update durch. <br>
    - Datenbankzustand 2 -<br>
    Die erste Transaktion muss nun auch für User 1 gültig sein.<br>
    <br>
    <b>Problem:</b> Durch das forward kennt der Client die aktuelle Seite nicht. --> Serverintern<br>
    Aktualisiert nun der User 1 die Seite zu der weitergeleitet wurde z.B. mit F5.,<br> lädt der Browser nicht die aktuelle Seite neu, sondern führt fälschlicherweise eine neue Transaktion mit dem Datenbankzustand 1 durch.<br>
    Das ist ganz großer Käse.<br>
    Die Lösung, dass ich nach erfolgeichen Update eine Zwischenseite mit einem Form, Mata-Refresh usw. einbaue, wollte ich eigentlich damit umgehen.<br>
    Gibt es Hilfe?
    danke

  • #2
    Ich habe die Lösung selbst gefunden
    Die beiden Statements <jsp:forward> und response.sendRedirect() scheinen zunächst recht ähnlich zu sein. Beide ermöglichen, den User zu einer anderen URL (z.B. JSP, Servlet, Web-Page) zu schicken als der, die er ursprünglich angefordert hat.
    Der <jsp:forward>-Tag leitet serverseitig das HttpServletRequest-Objekt mit allen gesetzten Parametern an die neue Zielseite weiter, d. h. alle Parameter sind auf der neuen Page verfügbar. Bei Verwendung von response.sendRedirect() gehen alle Parameter verloren.
    response.sendRedirect() sendet einen Redirect HTTP Code 301 mit der neuen URL-Adresse zurück an den Browser. Der Browser(!) sendet dann einen Request mit der neuen URL an den Server. response.sendRedirect() ist daher gegenüber <jsp:forward> erheblich inperformanter.
    Die Verwendung von response.sendRedirect() ist wegen der Nachteile in Performanz und Dynamik eigentlich nur dann sinnvoll, wenn sich die Root-URL einer Page geändert hat. Browser (bzw. Crawler, Search Engines usw.) können dadurch automatisch die verzeichnete URL ändern. Für das normale dynamische Verzweigen innerhalb einer Anwendung ist immer <jsp:forward> zu bevorzugen.
    Manche Servlet-Enignes haben Probleme mit <jsp:forward> und response.sendRedirect(), wenn vorher schon ein Output erzeugt wurde. Daher sollte darauf geachtet werden, dass vor dem Forward bzw. Redirect() nur reiner Java-Code steht (z. B. zur Ermittlung irgendwelcher Daten, die dann als Value-Bean an ein JSP geforwardet werden) und keine HTML oder out.println("")-Anweisungen.
    (Vielen Dank an Gero für diesen Beitrag)

    Comment

    Working...
    X