JSP Session.getAttribute()值返回null [英] JSP Session.getAttribute() value return null

查看:448
本文介绍了JSP Session.getAttribute()值返回null的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不知道为什么几分钟后我的session.getAttribute("user")返回不为null但属性值重新调整为null,这可能是由于会话超时导致的,但是为什么只有属性值返回null但其他会话仍然存在session.getAttribute("user")返回的值不为null.

I have no idea why my session.getAttribute("user") return not null but attribute value retun null after few minutes, it might due to session time out but why only the attribute value return null but other session still there even session.getAttribute("user") return not null.

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

This is my web page flow, User Login

LoginServlet

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,而不是重定向到登录页面.我的余额和用户名会话仍然存在. 在设置其他用户之前,user =(User)session.getAttribute("user");我正在使用

It can display after the user login everything work fine, after few minutes the gender name ... will display null instead of redirect to login page. And my balance and username session still there. Before setting else user = (User) session.getAttribute("user"); I was using

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

推荐答案

我不知道为什么我的session.getAttribute("user")返回的不是空值,而是属性值在几分钟后重新调整为空值

好,因此属性"user"为空.

Ok, so attribute "user" becomes null.

这可能是由于会话超时导致的,但是为什么只有属性值返回null,而其他会话仍然存在,即使session.getAttribute("user")也不返回null.

Que?所以属性用户"不为空?

Que?? So attribute "user" is not null??

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

There are only two possibilities for changing session attributes:

  1. 如果会话超时:容器会同时清除所有属性.
  2. 如果您的会话没有超时,并且仅清除了一个属性:您的程序清除了一个属性.

附加说明A:来自javadoc的HttpServletResponse.sendRedirect:使用此方法后,应将响应视为已提交且不应写入.您上面的代码违反了此要求.

Extra Note A: from javadoc for HttpServletResponse.sendRedirect: After using this method, the response should be considered to be committed and should not be written to. Your code above violates this.

附加说明B:

   User user = new User();

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

You just populated it with a rubbish new, empty user object. Avoid that - it's a bug waiting to happen. Only set variables to useful/valid values. :)

这篇关于JSP Session.getAttribute()值返回null的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆