这是我的网页流程,用户登录。
LoginServlet
/>我的个人资料
User s = new User();
s.retriveuser();
session.setAttribute("balance", s.getBalance());
session.setAttribute("username", s.getUsername());
session.setAttribute("user", s);
用户登录后一切正常,它可以显示,几分钟后,性别名称将显示为null,而不是重定向到登录页面。而且我的余额和用户名会话仍然存在。
在设置其他用户之前= user(user)session.getAttribute(“ user”);我正在使用
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>
#1 楼
我不知道为什么我的session.getAttribute(“ user”)返回不为null,而是属性值在几分钟后重新调整为null
可能是由于会话超时导致的,但是为什么只有属性值返回null但其他会话仍然存在,即使session.getAttribute(“ user”)也不返回null。
队列?因此属性“用户”不为空吗?
只有两种可能性更改会话属性:
如果您的会话没有超时,并且只清除了一个属性:您的程序清除了一个属性。
附加说明A:来自javadoc对于
HttpServletResponse.sendRedirect
:使用此方法后,应将响应视为已提交且不应写入。上面的代码违反了此规则。避免这种情况-这是一个等待发生的错误。仅将变量设置为有用/有效值。:)
#2 楼
我没有机会进行测试。但是我猜想q4312079q对象不是在会话中创建的,因此它不会设置为user
。if (session.getAttribute("user") == null) {
response.sendRedirect("login.jsp");
user = null;
} else {
user = (model.User) session.getAttribute("user");
}
应该可以解决您的问题。
编辑同样,只需打印
null
即可返回user.Gender()
在这种情况下,最好还是直接从会话变量中进行打印。评论
你能告诉我为什么session.getAttribute(“ someId”);在JSP中可能返回null?也就是说,当您收到此错误时,导致此问题的原因列表是什么?
–大卫·布莱恩
2013年6月17日在22:59
原因通常是由于注销或超时使会话无效。可能还有另一个原因,并且不是在会话中首先设置了someid对象。
–Vaishak Suresh
2013年6月17日23:06
那么,我该如何解决呢?我尝试使用getSession(true),但失败了。我想我所有的代码都很好。不知道为什么我仍然得到那个空值。另请参阅下面的评论。谢谢。
–大卫·布莱恩
2013年6月17日23:11
我以一种形式设置id属性(id =“ name”)。我将此表单提交到servlet。小服务程序获取id并使用request.getParameter(“ name”)获取参数。该参数设置为会话属性。当我尝试最终在JSP中访问此属性时,我得到一个空值。为什么呢
–大卫·布莱恩
2013年6月17日23:12
我猜您只是在设置id属性,而不是name属性。不看代码就不能说太多。要解决上述问题,您需要在尝试获取属性之前检查会话是否实际可用。如果不是,则将用户重定向到超时页面。
–Vaishak Suresh
2013年6月17日23:37
#3 楼
您在bean代码内部使用了什么?确定要为java类实现Serializable创建一个空的构造函数,getters,setters,然后在jsp页面上最好使用<jsp:setProperty name="the_same_you_used_in_bean_id" property="*"/>
。如果您需要有关bean结构的更多信息,请告诉我!
评论
我没有同样的问题。但是,我的问题是相似的。我以一种形式设置id属性(id =“ name”)。我将此表单提交到servlet。小服务程序获取id并使用request.getParameter(“ name”)获取参数。该参数设置为会话属性。当我尝试使用JSP最终访问此属性时,我得到一个空值。为什么?