我在JSP页面中设置了一个包含一些数据的bean,但是当我尝试访问该值时,在我的servlet中,我得到一个null值。我在两个页面中打印了会话ID,但我得到了不同的值。有谁知道可能会发生什么?感谢。
答案 0 :(得分:1)
我最好的猜测是你的会话在某处失效。如果你的代码中某处有session.invalidate()
个语句,那么在那里放置断点并在调试模式下验证它们是否被击中。
您还可以在项目中实施和设置HttpSessionListener
。实现回调接口并将实现类添加到web.xml
:
<listener>
<listener-class>com.xyz.AppSessionListener</listener-class>
</listener>
在sessionDestroyed
方法中放置一个断点,看看它何时在调试模式下被击中。
答案 1 :(得分:0)
我没注意到你为此开了一个新问题。您previous question的评论已回答了此问题。以下是相关摘录:
会话取决于域和上下文。如果servlet侦听与JSP不同的域和/或上下文的URL,那么它确实会使用不同的会话。但是,您可以通过相应地配置servletcontainer来让不同的上下文共享同一个会话(在Tomcat中,将
emptySessionPath
的{{1}}属性设置为<Connector>
)。但由于HTTP规范中的安全限制,您无法在不同域之间共享会话。
另一个原因确实是您通过HttpSession#invalidate()
明确地使会话无效,但这在您的代码中显而易见。