2012-08-12 15 views
7

Ich versuche, meine erste App auf Google App Engine zu schreiben, versuchte ich eine Sitzung zu verwalten, erstellte ich eine Anmeldeseite auf Senden, rufen Sie es auf servlet, Servlet überprüft den Benutzer und erstellt eine neue Sitzung Verwenden Sie den folgenden Code.Wenn Sitzung existiert oder nicht

void createSession(String Username) { 
     getThreadLocalRequest().getSession(true).setAttribute("Username", Username); 
    } 

Anmeldeseite nach dem Servlet-Aufruf leitet zu einem gewissen Seite dh abc.jsp, meine abc.jsp Seite enthält

<body><% 
     try { 
      if (request.getSession(false) == null) { 

      } else { 
    %> 
    Welcome to 
    <%=session.getAttribute("Username")%> 
    <% 
     if (session.getAttribute("Username").equals("")) { 
    %> 
    <a href="login.jsp"><b>Login </b></a> 
    <% 
     } else { 
    %> 
    <a href="logout.jsp"><b>Logout</b></a> 
    <% 
     } 
      } 
     } catch (Exception e) { 

     } 
    %></body> 

es funktioniert gut, aber wenn ich abc.jsp Zugriff ohne Erstellen einer Sitzung es wirft ein Ausnahme an dieser if (session.getAttribute("Username").equals("")) Linie, weiß ich nicht, warum bitte mir helfen. Ich denke, es erkennt nicht, ob eine Sitzung existiert. aber ich habe so viele Threads gelesen wie this Es gab mir diese Lösung, ich weiß nicht was ich falsch mache.

Antwort

13

Soweit ich erinnere

session.getAttribute("xyz") 

kehrt null wenn das Attribut nicht existiert ... so Ihre Nullpointer tritt auf, weil Sie versuchen, equals auf null zu nennen.

Ich schlage vor, eine Kontrolle über Ihre Attribut selbst zu tun, bevor sein Inhalt Validierung:

if (session.getAttribute("Username") == null || session.getAttribute("Username").equals("")) 
+0

danke das hat funktioniert, aber das ist mir eine andere Geschichte >> http://stackoverflow.com/questions/2818251/how-to-check-if-session-exists-or-not << Ich dachte, wenn schadet es nicht, diesen Code zu verwenden? –

+1

Nun .. ein Session-Objekt wird automatisch erstellt, wenn ein Benutzer eine Site auf Ihrem Server anfordert, auch wenn Sie 'getSession ()' nicht manuell aufrufen. Aber natürlich ist diese "default-session" leer, das heißt, sie hat keine Attribute, also liefert 'getAttribute () '' null' zurück. – Pr0gr4mm3r

0
<% 
    if (session.getAttribute("Username") != null) { 
     … 
    } 
    %> 
0

Bevor Sitzung Attribute zu überprüfen, müssen Sie die Sitzung selbst sehen.

So erste:

HttpSession session = request.getSession(false); 
if(session != null){...} 

und dann,

if(session.getAttribute("xyz") != null){...} 

Bessere Lösung könnte sowohl in einer Zeile:

if(session != null && session.getAttribute("xyz") != null) 

gibt NULL zurück, wenn das Attribut nicht existiert ... also NullPointerException tritt auf, weil Sie versuchen, equals auf null aufzurufen.

Offensichtlich ist es streng zu empfohlen überprüfen Sie Ihre Attribut, bevor sein Inhalt Validierung (wie oben).

Verwandte Themen