38

因此,当请求此 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。

4

4 回答 4

50

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

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

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

  1. 应用
  2. 会议
  3. 要求

确保你理解这些。更多看这里

于 2011-04-23T19:57:43.553 回答
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}嵌套属性。

于 2011-04-23T19:58:01.210 回答
7

在这里,您可以使用HttpRequestor来完成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}

于 2011-04-24T15:02:16.250 回答
2

请求对象不是会话。

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

HttpSession session = request.getSession(true);

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

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

于 2011-04-23T20:05:54.163 回答