2016-07-19 13 views
-2

Ich entwickle eine Java Web Application und habe einige Probleme mit der Freigabe von Variablen. Nach meinem besten Wissen gibt es zwei Möglichkeiten: (1) mithilfe von statischen Variablen, dann kann jede Klasse auf die angegebene Variable zugreifen, (2) mithilfe von Setter und Getter.Freigabe von Variablen zwischen Klassen in Java EE

Ich habe ein Problem für jede Methode. Mit der ersten teilen sich alle Benutzer (auch mit unterschiedlichen Sitzungs-IDs) die gleichen Werte. Und für die zweite, den Zugriff über Getter erzwingen das Programm Konstruktoren zu verwenden und in diesem Fall verlieren wir die Werte, die wir zuvor für den aktuellen Benutzer erhalten haben.

Also kann mir jeder erklären, wie man Informationen nur für eine bestimmte SessionID teilt?

Um deutlicher:

ich das Modell aus der Sicht Aspekte meiner Anwendung zu trennen versucht. So enthält das Paketmodell beispielsweise alle Datenbankzugriffe oder Webdienstanforderungen, und das Ansichtspaket enthält alle Servletseiten und Benutzerinteraktionen mit dem Programm. Wenn der Benutzer eine Option auswählt, wird diese Information in einer öffentlichen statischen Variablen gespeichert, auf die die anderen Klassen zugreifen können. Konflikte treten jedoch auf, wenn zwei Benutzer zwei verschiedene Optionen auswählen. Ursache die Variable ist statisch ... Ich brauche eine Variable, die zwischen Klassen geteilt werden kann und ihren Wert nur für einen bestimmten Benutzer

+0

Wir brauchen wirklich eine gute Menge mehr Details, um Ihnen zu helfen. Welche Art von Variablen? Sind sie privat pro Benutzer? Sind sie global für die gesamte Anwendung? Vielleicht bearbeiten Sie Ihren Beitrag und bieten mehr Details. – stdunbar

Antwort

1

Die erste aufgelistete Option, die statische Variablen zum Speichern des veränderbaren Status verwendet, funktioniert nicht in einer Java EE-Webanwendung. Sie haben Recht, dass verschiedene Benutzer auf demselben Server dieselben Werte sehen. Wenn mehrere Instanzen Ihrer Anwendung bereitgestellt werden, können die statischen Variablen auf einem Server außerdem andere Werte enthalten als die, die sie auf einem anderen Server enthalten. Wenn Sie also mehrere Felder mit jeweils einer Instanz Ihrer Webanwendung haben, und a Load Balancer vor ihnen senden Anfragen Round-Robin, Benutzer können unterschiedliche Status für verschiedene Anfragen zu sehen. So können Sie diese Option ausschließen.

Ihre zweite Option, "(2) mithilfe von Setter und Getter", ist überhaupt nicht klar.

Wenn Sie den Status für nur einen Benutzer sichtbar machen möchten, können Sie ihn in die HttpSession einfügen. Die in der HttpSession gespeicherten Dinge sind spezifisch für den angemeldeten aktuellen Benutzer. Dies ist nur ein vorübergehender Speicherbereich, wenn die Sitzungszeit abläuft und der Inhalt der Sitzung gelöscht wird. Es kann ein Problem sein, zu viele Dinge in die HttpSession zu bringen; Es kann viel Speicher belegen und kann Verlangsamungen in einer Clusteranwendung verursachen, da die Knoten versuchen, Informationen zwischen Knoten zu kopieren, um den Sitzungsinhalt jedes Servers aktuell zu halten. (Eine Alternative ist das Anheften von Benutzern an einen bestimmten Server mit der Folge, dass die Last ungleichmäßig verteilt wird.)

Es kann vorzuziehen sein, benutzerspezifische Informationen in der Datenbank zu speichern. Auf diese Weise befinden sich die Daten an einer Stelle, die allen Instanzen der Anwendung zur Verfügung steht. Sie können sie wie alle anderen Daten aus der Datenbank zwischenspeichern und Ihre Anwendung kann sicherstellen, dass nur der entsprechende Benutzer sie sieht. Die Daten sind auch persistent, anstatt zu verschwinden, wenn die Sitzung abläuft.

+0

Vielen Dank, ich kannte httpSession nicht, eigentlich ist es sehr nützlich, dass wir alle Daten, die wir für jeden Benutzer benötigen, speichern (setzen und abrufen) können – pseudo2188

1

Ich würde die HttpSession verwenden. Sie können Attribute festlegen und abrufen.