【问题标题】:HttpSession variable null after being set in the Servlet在 Servlet 中设置后的 HttpSession 变量为 null
【发布时间】:2015-07-24 07:03:00
【问题描述】:

这是我的环境。 Windows 7、Tomcat 8.x 和 Java 7.x 我正在编写一个应用程序,它在 servlet 中有一个入口点,而不是 JSP。在这个 servlet 中,我创建一个会话,为其分配一个变量,然后将用户重定向到一个 JSP 页面。这是JAVA代码:

HttpSession session = request.getSession();
logger.debug("Session Id: "+session.getId()+
"New Session? "+session.isNew()+
"Created: "+new java.util.Date(session.getCreationTime()));
  session.setAttribute("implementation", sImplementation);
  session.setAttribute("RequestId", sRequestId);

response.reset();
response.sendRedirect(request.getContextPath()+"/jsp/ProductSelection.jsp");

在我刚刚重定向到的 JSP 页面中,我尝试检索我刚刚在 Servlet 中设置的会话属性,该值返回为 null,但仅在我第一次使用 JSP 页面时。如果我通过在浏览器中重新提交 URL 再次调用它,那么一切正常。 :O :( 这里是相关的JSP代码,第一次命中这个JSP时sImplementation的值为null。

<% System.out.println("Session Id: "+session.getId()+
            "New Session? "+session.isNew()+
            "Created: "+new java.util.Date(session.getCreationTime()));
String sImplementation = (String)session.getAttribute("implementation"); %>

另外,如果我将系统的入口点设置为 JSP 页面,该页面除了将用户重定向到 Servlet 之外什么都不做,一切都会按预期工作。所以在 servlet 中创建的会话在此之前是无效的。仅当 JSP 页面被点击时。 :(

最后我尝试使用 dispatcher.forward 而不是 response.sendRedirect 并且会话变量在那里,但是,我用来呈现我的页面的引导框架根本无法正确呈现。 :( 我在 Internet Exploder 11.x 和 Chromium 33.x 中都试过这个

所以我的问题是我看到的行为是否正常和预期,或者这里是否有问题并且在某处有解决方案? :)

在此先感谢大家,如果有任何不清楚或需要更多代码,请告诉我。

【问题讨论】:

  • 您记录和打印什么 sysout 语句?
  • 不确定你在问我什么。但是我在 Servlet 中使用 Logger 来打印会话信息,并在 JSP 中使用 sysout 来打印相同的信息。 :)
  • 而我要问的只是他们在控制台/日志文件上打印/记录什么?
  • 哦,我明白了。 session.isNew() 对它们都返回 true,并且 session.getCreationTime() 不同。

标签: java twitter-bootstrap servlets httpsession


【解决方案1】:

如果我没有错(我可能),你应该使用

重定向到你的 jsp
request.getRequestDispatcher("ProductSelection.jsp").forward(request, response);

这样,这将是相同的请求,您将能够获得会话。顺便说一句,如果你自己创建会话,你应该禁用所有 jsp 的默认会话

<%@ page session=“false”%>

让我知道它是否有效。 :·)

【讨论】:

  • 谢谢您的建议没有人。实际上,我在原始帖子中提到了使用 Dispatcher.forward 以及为什么它对我不起作用。 :) 我确实考虑过使用 session false 指令 它仍然没有工作。 JSP 没有看到我在 Servlet 中创建的会话。因此,当我执行 request.getSession 时,我得到了 Null。 :(
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2014-10-01
  • 1970-01-01
  • 1970-01-01
  • 2016-09-28
相关资源
最近更新 更多