Zugriff auf Session-Variablen zwischen zwei servlets
Habe ich zwei servlets. In der ersten servlet-ich bin das abrufen des userId aus der Datenbank und speichern Sie es in dieser session-variable:
String uId = function.getLogin(username, password); //method getting the id
HttpSession session = request.getSession();
session.setAttribute("userId", uId); //here I'm setting the session variable with the id
Nun in der zweiten servlet, das ich abrufen möchten, die userId aus der session-variable, sondern eine java.lang.NullPointerException wird geworfen.
HttpSession session = request.getSession(true);
String uId = session.getAttribute("userId").toString();
int userId = Integer.parseInt(uId); //this is the code that I'm using in the second servlet, and throwing the NullPointerException
Bin ich was falsch mache bitte? Vielen Dank für Ihre Hilfe
- Kann man prüfen/drucken Sie den Wert
uId
vor der Besetzung? - Ist
function.getLogin(username, password)
null zurückgeben? - Nein, ich bin mit der gleichen session-variable in einer JSP-Seite und ich habe da auch keine Probleme..
- Sind die servlets in der gleichen webapp? Sind Sie mit dem selben browser aufrufen, der zwei servlets. Wie viel Zeit haben Sie, warten Sie zwischen den beiden anrufen? Warum verwenden nicht Sie eine Ganzzahl überall für den Benutzer, da es scheint, eine ganze Zahl sein?
- Es schafft nur eine neue Sitzung, wenn es nicht bereits eine für diesen client.
- es erzeugt eine neue session, nur wenn es keine bereits vorhandenen. Es sollte unwichtig sein, viel hier, es sei denn, die Sitzung wurde überschritten.
- Sind Sie sicher, dass diese Zeile wirft den NPE, weil es unmöglich ist, für Integer.parseInt werfen eine NPE. Alle, die es wirft, wird eine NumberFormatException.
- 1. Check-servlet-Aufruf um. 2. Sitzung ausdrücklich für ungültig erklärt, bevor die zweite servlet aufgerufen wurde, überprüfen Sie bitte diese.
- Vielen Dank für die Informationen. "Wenn es keine aktuelle Sitzung und erstellen Sie wahr ist, gibt eine neue Sitzung". Gedruckt in der java-doc 🙂
- Wenn das Attribut null ist, würde ich erwarten, dass die toString() zu werfen, die NullPointerException. Ist es definitiv geworfen auf die Zeile mit dem parseInt? Als Viruzzo oben gesagt, können Sie drucken, uId, bevor Sie die parseInt?
- Nein, ich konnte daher nicht die toString() wirft die Ausnahme...
- Ihre servlets zu tun mit zwei verschiedenen Sitzungen.
- wenn der null-Zeiger-Ausnahme wird geworfen, sollten Sie die Nummer der Zeile, die zeigt, wo der null-Zeiger gefunden wird.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Sollten Sie die Ausnahme, die sollten Sie geben die Nummer der Zeile die NPE. Im Hinblick auf Ihre code:
Anfrage könnte null sein. Dies ist höchst unwahrscheinlich.
Die Sitzung könnte null sein. Dies bedeutet, dass der client nicht senden zurück, das session-cookie oder vielleicht haben Sie mehrere frontends und ein anderes aufgezeichnet ist, die Sitzung. Würden wir mehr Informationen benötigen, um in der Lage sein, um herauszufinden, was das problem ist da.
Könnte es auch sein, dass
session.getAttribute("userId")
ist die Rückgabe null. Ich würde sagen, dies ist wahrscheinlich. Vielleicht ist es eine andere Sitzung, bei der diesession.setAttribute("userId", uId);
genannt wurde. Oder vielleicht Ihre ersten Aufruf zufunction.getLogin(username, password);
null zurück, damit Sie waren Einstellungnull
in der Sitzung?Sind Sie falsch. Wie lese ich die Java 1.6 code
parseInt
nie NPE werfen. Hier ist die erste Zeile in der Methode:Ich Wette, es ist etwas falsch mit Ihrer Sitzung. Ich würde vorschlagen, mit den debugger, um herauszufinden, was falsch eingestellt ist. Printf-debugging würde auch helfen.
In der Einstellung für das Attribut müssen Sie sicherstellen, dass bis dann keine Antwort geschrieben. Ferner, dass nach der Antwort geschrieben (keine Ausnahme).