如何在HttpSession中存储Java对象?

时间:2011-04-23 19:52:51

标签: java jsp servlets httpsession

所以当我请求这个servlet时,我试图让servlet将Java对象添加到用户的会话中。但是在servlet重定向到下一页并尝试检索对象之后,我得到了一个null对象。

以下是将对象添加到HttpSession(在servlet中)的操作:

request.setAttribute("object", obj);

然后我尝试通过(在JSP中)检索它:

 Object obj = request.getAttribute("object");

那么我如何让obj不为null?

更新: 我也没有尝试过这个:

HttpSession session = request.getSession();
session.setAttribute("object", obj);

在JSP中有以下内容:

 Object obj = request.getSession().getAttribute("object");

两种方式仍然返回null。

4 个答案:

答案 0 :(得分:46)

您没有将对象添加到会话中,而是将其添加到请求中 你需要的是:

HttpSession session = request.getSession();
session.setAttribute("MySessionVariable", param);

在Servlet中,您有4个可以存储数据的范围。

  1. 应用
  2. 会话
  3. 请求
  4. 确保您理解这些。有关详情here

答案 1 :(得分:12)

将其添加到会话,而不是请求

HttpSession session = request.getSession();
session.setAttribute("object", object);

另外,不要在JSP中使用scriptlet。请改用EL;要访问object,您只需${object}

  

JSP技术2.0版的一个主要特性是它支持表达式语言(EL)。表达式语言可以轻松访问存储在JavaBeans组件中的应用程序数据。例如,JSP表达式语言允许页面作者使用简单的语法访问bean,例如${name}用于简单变量,或${name.foo.bar}用于嵌套属性。

答案 2 :(得分:5)

您可以使用HttpRequestHttpSession来完成此操作。并且认为您的问题在JSP中。

如果您打算使用内部servlet,请执行以下操作,

Object obj = new Object();
session.setAttribute("object", obj);

HttpSession session = request.getSession();
Object obj = new Object();
session.setAttribute("object", obj);

在使用请求或会话设置属性后,使用以下命令在JSP中访问它,

<%= request.getAttribute("object")%>

<%= session.getAttribute("object")%>

看来你的问题出现在JSP中。

如果你想使用scriptlet,它应该如下,

<%
Object obj = request.getSession().getAttribute("object");
out.print(obj);
%>

或者可以使用如下表达式,

<%= session.getAttribute("object")%>

或者可以如下使用EL, ${object}${sessionScope.object}

答案 3 :(得分:1)

请求对象不是会话。

您希望使用会话对象进行存储。会话已添加到请求中,您是否希望在请求之间保留数据。会议可以从

获得
HttpSession session = request.getSession(true);

然后您可以在会话中使用setAttribute或getAttribute。

关于jsp会话的更新的教程是:http://courses.coreservlets.com/Course-Materials/pdf/csajsp2/08-Session-Tracking.pdf