Servlet sendRedirect () beendet meine Sitzungsattribute

9

Ich arbeite an einer Webapp in WinXP, Eclipse Indigo und Google Web Plugin.

Ich habe ein einfaches Formular, das einen Wert vom Benutzer (z. B. E-Mail) akzeptiert, es an ein Servlet namens SignIn.java weitergibt, das es verarbeitet, und den E-Mail-Wert in der Sitzung speichert. Der SignIn Code ist sehr einfach, hier ist was doGet meistens tut:

%Vor%

Soweit so gut, ich habe überprüft, dass die Werte zu diesem Zeitpunkt nicht null sind. Jetzt kommt das Problem, ich möchte zu einem anderen Servlet ( ShowOnline.java ) umleiten, das noch mehr Verarbeitung benötigt. Wenn ich schreibe

%Vor%

ShowOnline erhält null session values ​​(das gleiche E-Mail-Attribut, das ich zuvor gespeichert habe, ist jetzt null )

Wenn ich

schreibe %Vor%

alles ist in Ordnung, das E-Mail-Attribut von vor ist nicht null !

Was ist los? sendRedirect() bewirkt nur, dass Ihr Browser eine neue Anfrage sendet. Dies sollte den Sitzungsumfang nicht beeinflussen. Ich habe die Cookies überprüft und sie sind in Ordnung (es ist die gleiche Sitzung von vorher, da es die erste und einzige Sitzung ist, die meine Webanwendung erstellt und außerdem habe ich die sesison IDs überprüft und überprüft und sie sind auf beiden Anfragen gleich) .

Warum gibt es einen Unterschied zwischen sendRedirect() und forward() ? Die einfache Lösung wäre, forward() zu verwenden, aber ich möchte dem auf den Grund gehen, bevor ich loslasse. Ich denke, es ist wichtig für mich zu verstehen, was passiert ist. Ich bin mir nicht sicher, ob mir die Idee gefällt, nicht zu wissen, was mit solchen grundlegenden Konzepten passiert (meine ganze Webapp ist zu diesem Zeitpunkt sehr einfach und grundlegend, da ich ein Anfänger bin).

Irgendwelche Gedanken Ideen oder Vorschläge wären herzlich willkommen!

    
Joel_Blum 06.11.2011, 19:44
quelle

2 Antworten

1

Wenn das Servlet SignIn nur einen Anforderungsparameter (E-Mail) speichert, können Sie das Servlet auch durch ersetzen Filter , z SignInFilter .

SignInFilter würde dieselbe Logik wie Ihr SignIn servlet enthalten (Kopieren der E-Mail von den Anfrageparametern in die Sitzung), würde aber stattdessen das nächste Element in der Kette aufrufen (das Ihr ShowOnline servlet ist) Umleiten / Weiterleiten.

%Vor%

Richten Sie Ihr Formular stattdessen auf POST für das Servlet ShowOnline ein, und konfigurieren Sie Ihr neues SignInFilter so, dass es vor ShowOnline ausgeführt wird (die Servlet-Zuordnung wird der Kürze wegen weggelassen).

%Vor%     
James Bassett 03.12.2011, 06:32
quelle
-2

Soweit ich weiß, leitet sendRedirect () das Steuerelement nur auf eine andere Seite um, ohne die zugehörige Anfrage & amp; Antwortobjekt der übergeordneten Seite, aber RequestDispatcher (Objekt) wird die ServletRequest- und ServletResponse-Nachricht an die in Pfadargument {getServletContext (). getRequestDispatcher ("Pfad")} angegebene Seite senden. Danach können Sie die Objekte entweder an diese Seite weiterleiten oder die Objekte. Durch diesen Container wird also sichergestellt, dass er das vorherige Anfrage- und Antwortobjekt von der Elternseite verwenden muss, anstatt ein neues zu erstellen. Besonders wenn Sie Session-Management verwenden, ist die beste Option RequestDispatcher.

Hoffe, dass die Frage beantwortet.

An alle: - Bitte korrigieren Sie mich, wenn ich falsch liege.

@rs

    
Ars 12.01.2012 09:50
quelle

Tags und Links