2012-08-12 31 views
7

Estoy tratando de escribir mi primera aplicación en Google App Engine, estaba tratando de mantener una sesión, creé una página de inicio de sesión en submit, call a servlet, servlet valida al usuario y crea una nueva sesión usando el siguiente código.Si la sesión existe o no

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

la página de inicio de sesión después de llamar al servlet vuelve a dirigir a alguna página es decir abc.jsp, mi página de abc.jsp contiene

<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> 

funciona bien, pero cuando accedo abc.jspsin crear una sesión que está lanzando una excepción en esta línea if (session.getAttribute("Username").equals("")), no sé por qué amablemente me ayude. Creo que no detecta si la sesión existe. pero he leído tantos hilos como this Me dio esta solución, no sé qué estoy haciendo mal.

Respuesta

13

Por lo que yo recuerdo

session.getAttribute("xyz") 

vuelve null si el atributo no existe ... por lo que su NullPointerException se debe a que intenta llamar equals en null.

puedo sugerir que hacer un control sobre su propio atributo antes de validar su contenido:

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

gracias que funcionó, pero esto me dice una historia diferente >> http://stackoverflow.com/questions/2818251/how-to-check-if-session-exists-or-not << Estaba pensando si no hay daño en usar ese código? –

+1

Bien ... un objeto de sesión se crea automáticamente cuando un usuario solicita un sitio en su servidor, incluso si no se llama 'getSession ()' manualmente. Pero, por supuesto, esta "sesión predeterminada" está vacía, lo que significa que no tiene atributos, por lo que 'getAttribute ()' devuelve 'null'. – Pr0gr4mm3r

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

antes para comprobar los atributos de la sesión, lo que tiene que ver la sesión en sí.

Así, primera:

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

y luego ,

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

mejor solución podría sertanto en una línea:

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

devuelve nulo si el atributo no existe ... por lo que su NullPointerException se produce porque intenta llamar a iguales en nulo.

Obviamente, es estrictamente recomendado a comprobar su atributo, antes de validar su contenido (como el anterior).

Cuestiones relacionadas