Java 报告不同会话ID的JSP页面和Servlet

Java 报告不同会话ID的JSP页面和Servlet,java,jsp,session,servlets,Java,Jsp,Session,Servlets,我在JSP页面中使用一些数据设置一个bean,但是在我的servlet中,当我尝试访问该值时,我得到了一个空值。我在两个页面中打印了会话ID,得到了不同的值。有人知道会发生什么吗?谢谢。我最好的猜测是您的会话在某个地方失效了。如果代码中确实有session.invalidate()语句,请将断点放在那里,并在调试模式下验证是否有任何断点被命中 您还可以在项目中实现和设置。实现回调接口并将实现类添加到web.xml: <listener> <listener-class&

我在JSP页面中使用一些数据设置一个bean,但是在我的servlet中,当我尝试访问该值时,我得到了一个空值。我在两个页面中打印了会话ID,得到了不同的值。有人知道会发生什么吗?谢谢。

我最好的猜测是您的会话在某个地方失效了。如果代码中确实有
session.invalidate()
语句,请将断点放在那里,并在调试模式下验证是否有任何断点被命中

您还可以在项目中实现和设置。实现回调接口并将实现类添加到
web.xml

<listener>
    <listener-class>com.xyz.AppSessionListener</listener-class>
</listener>

com.xyz.AppSessionListener

sessionDestroyed
方法中放置一个断点,并查看它在调试模式下何时被命中。

我没有注意到您为此打开了一个新问题。这个问题已经在你们的评论中得到了回答。以下是一段相关摘录:

会话依赖于域和上下文。如果servlet侦听不同于JSP的域和/或上下文的URL,那么它确实将使用不同的会话。但是,通过相应地配置servletcontainer,您可以让不同的上下文共享相同的会话(在Tomcat中,将
emptySessionPath
属性设置为
true
)。但由于HTTP规范中的安全限制,您无法在不同域之间共享会话


另一个原因确实是您通过显式地使会话无效,但这太明显了,无法在代码中发现。

您是否在某些可能执行的代码路径中的任何位置调用session.invalidate()?