Was ist der Unterschied zwischen setAttribute () in HttpServletRequest und setAttribute () in HttpSession? Unter welchen Umständen werden sie benutzt? Danke für jede Hilfe!
Der eine legt ein Attribut im Anforderungsbereich fest und der andere legt ein Attribut im Sitzungsumfang fest. Der Hauptunterschied besteht in der Lebensdauer des Bereichs. Der Anforderungsbereich wird beendet, wenn die zugehörige Antwort abgeschlossen ist. Der Sitzungsbereich endet, wenn die Sitzung vom Client oder Server abgelaufen ist. Wenn ein Bereich endet, werden alle seine Attribute verworfen und sind nicht in einer anderen Anfrage oder Sitzung verfügbar.
Sie verwenden den Anforderungsbereich, um Daten zu speichern, die spezifisch für die HTTP-Anfrage sein sollten (z. B. die Datenbankergebnisse basierend auf einer bestimmten Anfrage, die Erfolgs- / Fehlermeldungen usw.). Sie verwenden den Sitzungsbereich zum Speichern von Daten, die für die HTTP-Sitzung spezifisch sein sollen (z. B. der angemeldete Benutzer, Benutzereinstellungen usw.). Alle Anfragen desselben Clients teilen sich dieselbe Sitzung (daher teilen sich alle verschiedenen Browser-Registerkarten / Fenster derselben Clientsitzung die gleiche Serversitzung).
wenn Sie httpServletRequest.setAttribute () verwenden; Dann wird das Attribut an das Anfrageobjekt gebunden,
in httpServletSession.setAttribute();
bindet attr. in Sitzung.
Wenn Sie möchten, dass der Umfang dieser Daten für die Sitzung verwendet wird, verwenden Sie session
. Wenn Sie den Umfang dieser Daten für die Anforderung nur verwenden möchten, verwenden Sie request
Beispiel:
Der Benutzername des angemeldeten Benutzers sollte in der gesamten Sitzung geteilt werden, also behalten Sie ihn in session
while, Fehlernachricht, die Sie dem Benutzer geben, während Sie den Fall des Authentifizierungsfehlers berücksichtigen, der für diese Anforderung nur dann benötigt wird, wenn er nicht benötigt wird, also behalten Sie ihn in request
Wenn Sie ein Attribut für das Request-Objekt festlegen, ist die Variable nur für den Bereich der Anfrage verfügbar. Auf diese Variable können andere jsp / resources zugreifen, die Sie als Teil dieser Anfrage weiterleiten.
Das Festlegen eines Attributs für den Sitzungsumfang steht allen Anforderungen in der Benutzersitzung zur Verfügung (es sei denn, Sie entfernen sie aus der Sitzung).
Der größte Unterschied ist also der Umfang / die Lebensdauer des Attributs.
Versuchen Sie immer Anforderungsbereichsvariablen zu verwenden, es sei denn, Sie müssen sie über die Benutzersitzung hinweg verwenden: zB Benutzerrollen. Wenn mehr Daten für die Sitzung mit mehr Benutzern gleichzeitig gespeichert werden, kann dies zu Problemen mit dem Arbeitsspeicher führen. Auch wenn Sie die Sitzungsfreigabe verwenden, die von einer Datenbank unterstützt wird (wie in der Websphere), führt dies zu Leistungsproblemen.