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:
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
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!
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.
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).
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
Tags und Links java attributes session servlets