所以当我请求这个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。
答案 0 :(得分:46)
您没有将对象添加到会话中,而是将其添加到请求中 你需要的是:
HttpSession session = request.getSession();
session.setAttribute("MySessionVariable", param);
在Servlet中,您有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)
您可以使用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}
答案 3 :(得分:1)
请求对象不是会话。
您希望使用会话对象进行存储。会话已添加到请求中,您是否希望在请求之间保留数据。会议可以从
获得HttpSession session = request.getSession(true);
然后您可以在会话中使用setAttribute或getAttribute。
关于jsp会话的更新的教程是:http://courses.coreservlets.com/Course-Materials/pdf/csajsp2/08-Session-Tracking.pdf