我不知道为什么我的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" />
答案 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 ??
更改会话属性只有两种可能性:
额外注释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的信息,请告诉我们!