1

我有两个 servlet 在同一个 Tomcat 服务器上运行,我需要将数据从一个 servlet 的实例传递到另一个 servlet 的相应实例。似乎我可以通过执行以下操作来做到这一点:

getServletContext().getContext("/path").setAttribute("varName", variable)

我同样应该能够通过使用 getAttribute 从另一个 servlet 接收它。但是,这是我的问题:

其他 servlet 如何知道该属性何时设置?数据可以在任何时间点多次进入。那么我如何“通知”另一个 servlet 现在有数据等待它抓取呢?

谢谢,

埃里克

编辑:

这是我想要做的更多内容:我正在尝试使用两个不同的应用程序构建一个聊天程序。有客户端,它可以将消息发送到另一个应用程序,聊天接收器应用程序。我在前端使用 Vaadin。聊天接收器应用程序包含两个 servlet:另一个 Vaadin 应用程序和一个用于从客户端应用程序接收消息的基本 servlet(这部分已经在工作)。现在我想将它转发给聊天接收器应用程序的 Vaadin 应用程序,该应用程序与接收消息的 servlet 位于同一个 war 文件中。希望这可以解决问题。如果您认为 Vaadin 论坛是发布此问题的更好地方,请告诉我。谢谢你的帮助,我主要是核心java程序员,所以我很困惑。对此,我真的非常感激!

4

1 回答 1

2

调用 servlet 的唯一机制是发出 HTTP 请求。此外,仅允许 servlet 容器调用您的 servlet,处理它们的生命周期。

这意味着您可以在一个 servlet 中设置一些 servlet 上下文属性,然后等待用户调用第二个 servlet - 这将看到全局值。您不能从另一个调用一个 servlet。

不确定你想达到什么目标。也许从第一个 servlet 转发/重定向到第二个就足够了?

request.setAttribute("varName", variable);
getServletContext().getRequestDispatcher("servlet2").forward(request,response);

变量可以servlet2通过以下方式访问:

request.getAttribute("varName");

顺便说一句,您的代码不必要地复杂且容易出错,试试这个:

getServletContext().setAttribute("varName", variable);
于 2012-08-18T18:20:30.337 回答