我有两个servlet在同一个Tomcat服务器上运行,我需要将数据从一个servlet的实例传递到另一个servlet的相应实例。看起来好像我可以通过做这样的事情来做到这一点:
getServletContext().getContext("/path").setAttribute("varName", variable)
我也应该能够通过使用getAttribute从其他servlet接收它。但是,这是我的问题:
其他servlet如何知道何时设置了此属性?数据可以在任何时间点进入,也可以多次进入。那么如何“通知”另一个servlet现在有数据等待它抓取?
谢谢,
埃里克
编辑:
以下是我想要做的更多内容:我正在尝试使用两个不同的应用程序构建聊天程序。有客户端,可以发送消息到另一个应用程序,聊天接收器应用程序。我使用Vaadin作为前端。聊天接收器应用程序包含两个servlet:另一个Vaadin应用程序,以及一个从客户端应用程序接收消息的基本servlet(此部分已经在工作)。现在我想将它转发给聊天接收器应用程序的Vaadin应用程序,该应用程序与接收消息的servlet位于相同的war文件中。希望能够解决问题。如果您认为Vaadin论坛是发布此问题的更好地方,请告诉我。谢谢你的帮助,我主要是一个核心java程序员,所以我很困惑。我真的很感激!
答案 0 :(得分: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);