如何在 HttpSession 中存储 Java 对象?
Posted
技术标签:
【中文标题】如何在 HttpSession 中存储 Java 对象?【英文标题】:How do you store Java objects in HttpSession? 【发布时间】: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");而是。 这个链接很有帮助***.com/questions/123657/… 【参考方案1】:您没有将对象添加到会话中,而是将其添加到请求中。 你需要的是:
HttpSession session = request.getSession();
session.setAttribute("MySessionVariable", param);
在 Servlet 中,您有 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】:在这里您可以使用HttpRequest
或HttpSession
来完成。并认为您的问题出在 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
【讨论】:
以上是关于如何在 HttpSession 中存储 Java 对象?的主要内容,如果未能解决你的问题,请参考以下文章
在java后台服务器,如何根据HttpSession获得客户端ip?
如何获取 Web 应用程序中所有 HttpSession 对象的列表?