【问题标题】:How do you store Java objects in HttpSession?如何在 HttpSession 中存储 Java 对象?
【发布时间】:2011-08-11 14:41:05
【问题描述】:

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

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

request.setAttribute("object", obj);

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

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

那么我怎样才能让 obj 不为空呢?

更新: 我也尝试过这个:

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

在 JSP 中包含以下内容:

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

两种方式仍然返回 null。

【问题讨论】:

  • 您正在设置为 HttpRequest。但问题是HttpSession。你想做什么?
  • 还要确保在您的 JSP 顶部有:
  • obj 是否为空?我发现我无法从 request.getSession() 获得任何对象来解析,我必须在我的第二页上创建另一个会话对象,我需要做 session.getAttribute("object");而是。
  • 这个链接很有帮助stackoverflow.com/questions/123657/…

标签: java jsp servlets httpsession


【解决方案1】:

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

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

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

  1. 应用
  2. 会话
  3. 请求
  4. 页面

确保您了解这些内容。更多请看here

【讨论】:

  • 可以从request.getSession()获取会话
  • <%Object obj = request.getAttribute("object");%>
  • @Tamer:你读过这行代码吗?它说request,它没有说session。如果您在session 上设置了属性,那么您还需要从session 获取它!
  • 是的,但我也尝试过:<%Object obj = request.getSession().getAttribute("object");%>。但是,两者都不适合我。
  • @Romain Hippeau 你能发布一些有用的链接,如何将数据存储在会话、应用程序、请求范围中吗?
【解决方案2】:

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

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

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

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

【讨论】:

    【解决方案3】:

    请求对象不是会话。

    您想使用会话对象来存储。会话被添加到请求中,并且您想要跨请求保留数据。会话可以从

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

    然后你可以在会话上使用 setAttribute 或 getAttribute。

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

    【讨论】:

    • 我遇到了类似的问题,使用 EL,我可以从应用程序和请求范围访问属性,但不能访问会话范围。我使用了正确的语法。
    【解决方案4】:

    在这里您可以使用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}

    【讨论】:

      猜你喜欢
      • 2016-06-17
      • 2017-12-20
      • 2017-12-30
      • 2011-08-15
      • 2018-07-03
      • 2016-03-26
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多