远程Servlet通讯

时间:2009-11-22 17:29:38

标签: java servlets communication

我有两个servlet A& B. 在B我打算有一个方法isAvailable(),A将调用它来检查状态。如果此方法返回true,那么我将把对象传递给B。

在做一些阅读时,我看到了几个非常熟悉的选项。带有远程EJB,RMI或简单HTTP的JNDI(不知道你最后怎么做)

你们觉得怎么样?还有其他选择吗?

4 个答案:

答案 0 :(得分:0)

您的servlet是否在同一个应用程序服务器中运行?如果是这样,您可能希望使用Spring将B注入A,以便可以直接调用该方法。

即使servlet在不同的容器中运行,你也可以将它们(再次使用Spring)公开为Remote个对象,同样将B注入A(除了这意味着Spring容器将注入一个代理远程对象)。这在代码中没有占用空间(即它全部由配置文件定义,而Spring会为您处理所有事情)

答案 1 :(得分:0)

为什么不利用您的基础架构已经在谈论HTTP的事实?

因此,servlet A可以在特定路径上执行HTTP GET来检查状态(发送回一个对象或检查HTTP响应代码 - 然而后一种方法似乎是对状态代码的误用),以及PUT / POST对象,如果需要。我注意到您正在运行多个主机,这将适用于您的方案。

可以使用标准Java或通过XML等表示来序列化对象 - 可能使用XStream进行序列化。

在我看来,这是一种非常直接的方式来利用您拥有的基础设施。

答案 2 :(得分:0)

看起来Servlet B中的isAvailable()方法访问存储在Servlet中的某种“全局”数据。你能否将这个对象提取到一个单独的Singleton,然后可用于两个Servlet?

答案 3 :(得分:0)

  

主主机上有一个Servlet A实例,而且每个主机上有许多Servlet B都有自己的tomcat实例。

您可以使用java.net.URLConnection以编程方式触发HTTP请求。您可以找到here一个简单的教程。

让A向B发出一个HTTP请求,并在B中有一个servlet,它监听这些请求并相应地返回响应。这可以是一个简单的response.getWriter().write("ok");左右。您甚至可以返回XML字符串等。在A中,您可以从InputStream的{​​{1}}中读取此值。