部署在同一tomcat服务器上的两个Web应用程序之间的跨上下文通信

时间:2014-09-26 18:19:28

标签: java web-services tomcat servlets rmi

我有两个Web应用程序, webAppMaster webAppSlave ,部署在同一个tomcat服务器中。现在在 webAppMaster 应用程序中,有一个java类 RequestHandler ,其 processRequest 方法将 customObject1 作为参数并返回的 customObject2 即可。现在,从 RequestCreator webAppSlave 应用程序,我想调用 RequestHandler processRequest 方法webAppMaster 应用程序。应该怎么做? 提前谢谢。

1 个答案:

答案 0 :(得分:5)

您需要在应用程序之间进行交谈,就像在两个远程应用程序之间进行通话一样。它们在同一台服务器上并不重要,它们只需使用某种协议进行通信。

您要做的实际上是RMI(远程方法调用) - http://docs.oracle.com/javase/tutorial/rmi/

您可以使用更轻量级的通信方式,而不是使用rmi。例如,您可以通过Rest进行通信。在这种情况下,在webAppMaster应用程序中创建servlet,它将customObject1序列化为JSON作为参数(作为URL请求参数或使用POST方法)。比这个servlet将JSON字符串转换为customObject1并调用processRequest。稍后在processRequest()返回customObject2后将其转换为JSON并发送回客户端。在客户端读取json并将JSON反序列化回webappSlave中的customObject2。

public class MasterServlet extends javax.servlet.http.HttpServlet {


      protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
          CustomObject1 customObject1 = buildCustomObject1BasingOnRequestParams(HttpServletRequest request); // read the request params and build your object either from json or whatever format webappSlave used to send

          CustomObject2 customObject2 = RequestHandler.processRequest(customObject1);
          String json = transformTOJson(customObject2); // there are many libaries which does this

          response.getWriter().print(json);    


      }
}

你的奴隶应用程序会做相反的事情。首先将customObject1序列化为JSON,然后将收到的JSON反序列化为customObjec2。

作为第三个选项,您可以使用HTTP隧道在应用程序之间发送对象(例如,请参阅此帖子:Serializing over HTTP correct way to convert object.)作为示例。