2011-06-22 84 views
2

我不知道为什么我的session.getAttribute(“用户”)返回非空,但属性值在几分钟后retun null,它可能是由于会话超时,但为什么只有属性值返回null,但其他会话仍然存在甚至session.getAttribute(“user”)返回非空。JSP Session.getAttribute()返回null

这是我的网页流量,用户登录

LoginServlet

User s = new User(); 
s.retriveuser(); 
session.setAttribute("balance", s.getBalance()); 
session.setAttribute("username", s.getUsername()); 
session.setAttribute("user", s); 

我的个人资料

 User user = new User(); 
     if (session.getAttribute("user") == null) { 
      response.sendRedirect("login.jsp"); 
     } else { 
      user = (model.User) session.getAttribute("user"); 
     } 

<tr> 
     <th>Gender:</th> 
       <td><%=user.getGender()%></td> 
</tr> 
<tr> 
     <th>Name:</th> 
     <td><%=user.getName()%></td> 
</tr> 

它可以显示在用户登录的一切工作正常,几分钟后性别名称...将显示为空而不是重定向到登录页面。而我的余额和用户名会话仍在那里。 设置其他用户之前=(用户)session.getAttribute(“用户”);我正在使用

<jsp:useBean id="user" class="model.User" scope="session" /> 
+1

我没有同样的问题。但是,我的问题是相似的。我在表单中设置了id属性(id =“name”)。我将这个表单提交给一个servlet。 servlet接受id并使用request.getParameter(“name”)获取参数。该参数设置为会话属性。当我尝试访问这个,最终使用JSP的属性,我得到一个null。为什么? –

回答

2

我不想随时测试。但我猜测user对象不会在会话中创建,因此不会设置为null

if (session.getAttribute("user") == null) { 
      response.sendRedirect("login.jsp"); 
      user=null; 
} else { 
    user = (model.User) session.getAttribute("user"); 
} 

应该解决你的问题。

编辑此外,简单的打印user.Gender()会在这种情况下返回Null,所以你最好从会话变量打印出来直。

+0

你能告诉我为什么session.getAttribute(“someId”);在JSP中可能会返回null?也就是说,当你得到这个错误时,这个问题的原因是什么? –

+0

原因通常是因为会话通过注销或超时而失效。可能还有另外一个原因,那就是'someid'对象首先在会话中没有被设置。 –

+0

那么,我该如何解决这件事?我尝试使用getSession(true)并失败。我猜我所有的代码都很好。不知道为什么我仍然得到这个空。请参阅下面的评论。谢谢。 –

0

你在bean代码中使用了什么?你确定你已经创建了一个空构造函数,getters,setter,java类实现了Serializable吗?然后,在jsp页面上,最好使用<jsp:setProperty name="the_same_you_used_in_bean_id" property="*"/>。如果你想了解更多有关豆腐的信息,请告诉我!

1

我不知道为什么我的session.getAttribute(“用户”)返回不为空,但几分钟

确定后属性值retun空,所以属性“用户”变为零。

可能由于会话超时,但为什么只有属性值返回空但其他会话仍然存在,即使session.getAttribute(“用户”)返回不为空。

Que?那么属性“user”不是空的?

只有两种可能改变会话属性:

  1. 如果您的会话超时:所有属性由容器在同一时间被清除。
  2. 如果您的会话没有超时,并且只有一个属性被清除:一个属性被程序清除。

特别注意事项A:从javadoc中获得HttpServletResponse.sendRedirect:使用此方法后,响应应被视为已提交且不应写入。上面的代码违反了这个规定。

额外注B:

User user = new User(); 

你只是一个垃圾新的空用户对象填充它。避免这种情况 - 这是一个等待发生的错误。只将变量设置为有用/有效值。 :)