JSP Session.getAttribute()值返回null

时间:2011-06-22 09:26:31

标签: jsp session

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

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

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>

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

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

3 个答案:

答案 0 :(得分:2)

我无法轻易获得测试结果。但我猜测会话中没有创建user对象,因此不会设置为null

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

应该解决你的问题。

修改此外,在这种情况下,只需打印user.Gender()即可返回Null,因此最好直接从会话变量中打印出来。

答案 1 :(得分:2)

  

我不知道为什么我的session.getAttribute(“user”)返回非null但属性值在几分钟后返回null

好的,所以属性“user”变为空。

  

可能是由于会话超时,但为什么只有属性值返回null但其他会话仍然存在,甚至session.getAttribute(“user”)也不返回空。

阙??所以属性“user”不是null ??

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

  1. 如果会话超时:容器会同时清除所有属性。
  2. 如果您的会话没有超时,并且只清除了您的一个属性:您的程序已清除了一个属性。
  3. 额外注释A:来自HttpServletResponse.sendRedirect的javadoc:使用此方法后,应认为响应已提交且不应写入。您的上述代码违反了此规定。

    额外注释B:

       User user = new User();
    

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

答案 2 :(得分:0)

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