【发布时间】: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