Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/349.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java HttpSession变量在Servlet中设置后为null_Java_Twitter Bootstrap_Servlets_Httpsession - Fatal编程技术网

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

Java HttpSession变量在Servlet中设置后为null,java,twitter-bootstrap,servlets,httpsession,Java,Twitter Bootstrap,Servlets,Httpsession,这是我的环境。Windows7、Tomcat8.x和Java7.x 我正在编写一个应用程序,它在servlet中有一个入口点,而不是JSP。在这个servlet中,我创建一个会话,为其分配一个变量,然后将用户重定向到JSP页面。以下是JAVA代码: HttpSession session = request.getSession(); logger.debug("Session Id: "+session.getId()+ "New Session? "+session.isNew()+ "Cr

这是我的环境。Windows7、Tomcat8.x和Java7.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代码,sImplementation的值在第一次命中此JSP时为空

<% 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 Explorder 11.x和Chromium 33.x中都尝试了这一点。)

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

感谢大家,如果有什么不清楚或需要更多代码,请告诉我。

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

request.getRequestDispatcher("ProductSelection.jsp").forward(request, response);
这样,它将是相同的请求,您将能够获得您的会话。顺便说一下,如果您自己创建会话,您应该禁用所有jsp的默认会话

<%@ page session=“false”%>

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

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

request.getRequestDispatcher("ProductSelection.jsp").forward(request, response);
这样,它将是相同的请求,您将能够获得您的会话。顺便说一下,如果您自己创建会话,您应该禁用所有jsp的默认会话

<%@ page session=“false”%>


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

您的logger和sysout语句打印什么?不确定您在问我什么。但我在Servlet中使用记录器打印会话信息,在JSP中使用sysout打印相同的信息。:)我要问的是,他们在控制台/日志文件上打印/记录了什么?哦,我明白了。session.isNew()对它们都返回true,并且session.getCreationTime()是不同的。logger和sysout语句打印什么?不确定您在问什么。但我在Servlet中使用记录器打印会话信息,在JSP中使用sysout打印相同的信息。:)我要问的是,他们在控制台/日志文件上打印/记录了什么?哦,我明白了。session.isNew()对它们都返回true,并且session.getCreationTime()不同。感谢您的建议,没有人知道。实际上,我在最初的帖子中提到了使用Dispatcher.forward,以及为什么它对我不起作用我确实研究过使用session-false指令,但它仍然不起作用。JSP没有看到我在Servlet中创建的会话。因此,当我执行request.getSession时,我得到了空值:(谢谢你的建议,没有人。实际上我在我的原始帖子中提到了使用Dispatcher.forward,以及为什么它对我不起作用。:)我确实研究过使用session false指令,但它仍然不起作用。JSP没有看到我在Servlet中创建的会话。因此,当我执行request.getSession时,我得到了空值:(