在Servlet中设置后,HttpSession变量为null

时间:2015-07-23 22:10:32

标签: java twitter-bootstrap servlets httpsession

这是我的环境。 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中试过这个。

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

感谢所有提前,如果有任何不清楚或需要更多代码,请告诉我。

1 个答案:

答案 0 :(得分:0)

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

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

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

所做的默认会话
<%@ page session=“false”%>

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