如何在HttpSession中存储Java对象?

Tam*_*mer 34 java jsp servlets httpsession

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

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

request.setAttribute("object", obj);
Run Code Online (Sandbox Code Playgroud)

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

 Object obj = request.getAttribute("object");
Run Code Online (Sandbox Code Playgroud)

那么我如何让obj不为null?

更新:我也没试过这个:

HttpSession session = request.getSession();
session.setAttribute("object", obj);
Run Code Online (Sandbox Code Playgroud)

在JSP中有以下内容:

 Object obj = request.getSession().getAttribute("object");
Run Code Online (Sandbox Code Playgroud)

两种方式仍然返回null.

Rom*_*eau 46

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

HttpSession session = request.getSession();
session.setAttribute("MySessionVariable", param);
Run Code Online (Sandbox Code Playgroud)

在Servlet中,您有4个可以存储数据的作用域.

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

确保你理解这些.在这里看看更多

  • @Tamer:你有没有**读过**这行代码?它说`request`,它不说`session`.如果你在`session`上设置了属性,那么你也需要从`session`中获取它! (12认同)
  • 你可以从request.getSession()获得会话 (6认同)

Mat*_*all 12

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

HttpSession session = request.getSession();
session.setAttribute("object", object);
Run Code Online (Sandbox Code Playgroud)

另外,不要在JSP中使用scriptlet.改用EL ; 访问object所有你需要的是${object}.

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


Cha*_*ana 5

在这里你可以使用HttpRequest或来做HttpSession.并认为您的问题在JSP中.

如果你打算使用内部servlet做以下,

Object obj = new Object();
session.setAttribute("object", obj);
Run Code Online (Sandbox Code Playgroud)

要么

HttpSession session = request.getSession();
Object obj = new Object();
session.setAttribute("object", obj);
Run Code Online (Sandbox Code Playgroud)

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

<%= request.getAttribute("object")%>
Run Code Online (Sandbox Code Playgroud)

要么

<%= session.getAttribute("object")%>
Run Code Online (Sandbox Code Playgroud)

所以看来你的问题出现在JSP中.

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

<%
Object obj = request.getSession().getAttribute("object");
out.print(obj);
%>
Run Code Online (Sandbox Code Playgroud)

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

<%= session.getAttribute("object")%>
Run Code Online (Sandbox Code Playgroud)

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