一尘不染

在部署中丢失:session.getAttribute()在某些Tomcat配置中返回NULL

tomcat

乍一看,我遇到了一些无法理解的问题。这个故事很简单,但是我想解决方案背后是一些实际的配置/部署问题/不一致。

我定义了一个JSP和两个servlet。JSP在会话中放入一些内容,并且servlet应该获取数据并进行操作。主要症状是,当在Chrome和Firefox中看到JSP时,servlet看不到会话数据。有趣的是,当使用Eclipse内部浏览器以及使用Internet
Explorer(在Win7上运行)时,JSP / servlet确实共享数据。

这是一个简短的描述,以及一些有关本地配置(以及我认为存在问题的信息)的信息(和后续症状):我已经在c:\ labs \
eclipse下安装了Eclipse(Helios),并解压缩了Tomcat( 7.0.12)在c:\ labs \
tomcat下。我还安装了启动Tomcat的Sysdeo插件。

首先,当我使用Sysdeo Eclipse插件按钮启动Tomcat,然后尝试从外部浏览器访问一些与应用程序相关的URL时-
找到了主要的Tomcat页面,但没有找到应用程序JSP /页面。然而,当我使用“播放/运行”
Eclipse的按钮(当选择来自Eclipse的Web项目的一些JSP页面)启动Tomcat -那么我 可以 看到呈现的JSP页面
在Eclipse内部浏览器从任何外部浏览器。这两种启动模式有什么区别?

其次,仅通过“播放/运行” Eclipse按钮启动Tomcat,并从内部Eclipse浏览器或外部Internet
Explorer浏览器调用JSP和Servlet时, 所有
数据将被JSP和Servlet正确共享。但是(仅适用于相同的启动模式)如果我尝试从外部Chrome / Firefox浏览器访问JSP /
servlet,则找到了JSP / servlet,但数据似乎未通过http会话共享(打印了会话ID并确认它是正确的)。

第三,当我通过“ pay / run”按钮启动Tomcat时,只有使用内部Eclipse浏览器时,我 才能 在Eclipse控制台中看到servlet
log()打印内容。从外部浏览器调用JSP / servlet时-我找不到日志打印内容(但是Tomcat日志目录中的文件中只有几行与访问相关的行)。

试图总结对我来说看起来很奇怪的技术问题-
我很可能会错过一些有价值的与部署/配置相关的信息。请告知我我做错了什么,哪一种是更好/正确的配置,当从所有外部浏览器调用应用程序资源时,该配置将允许共享会话数据。如果您需要有关我的配置/环境的其他详细信息,请询问。

欣赏


阅读 535

收藏
2020-06-16

共1个答案

一尘不染

确保您使用的是针对Java EE
开发人员的
Eclipse,而不是针对Java开发人员的Eclipse。它已经内置了Tomcat服务器插件。Sysdeo插件已经很老了,您根本不需要它,如果这毕竟是某些描述的问题的罪魁祸首,我也不会感到惊讶。

至于使用内部Eclipse浏览器而不是普通的Web浏览器运行JSP /
Servlet,我对内部浏览器有不好的经验,我不建议将其用于“快速测试”之外。但是,它不与其他浏览器共享会话是正常行为。它们不会共享相同的浏览器实例。会话不是特定于计算机的,而是特定于浏览器的。

我只是使用EE提供的插件将Tomcat集成到Eclipse中,通过服务器属性来启动和停止(而 不是 通过右键单击JSP / Servlet并选择_“运行”_ 或其他方式),然后使用真正的Web浏览器来访问页面。为了正确地开始使用Eclipse和Tomcat开发JSP /Servlet,我热烈建议您使用Coreservlets.com教程。在我们的servlets
Wiki页面的底部,您可以找到几个直接链接。

2020-06-16