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

标签 java web-services tomcat servlets rmi

我有两个 Web 应用程序,webAppMasterwebAppSlave,部署在同一个 tomcat 服务器上。现在在webAppMaster应用程序中,有一个java类RequestHandler,它的processRequest方法接受一个customObject1作为参数并返回自定义对象 2。现在,从 webAppSlave 应用程序的 RequestCreator 类,我想调用 RequestHandler 类的 processRequest 方法webAppMaster 应用程序。这应该怎么做? 提前致谢。

最佳答案

您需要在应用程序之间进行对话,就像在两个远距离应用程序之间进行对话一样。它们位于同一台服务器上并不重要,它们只需要使用某种协议(protocol)进行通信即可。

你要做的其实是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.)作为示例。

关于java - 部署在同一 tomcat 服务器上的两个 Web 应用程序之间的跨上下文通信,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26065917/

相关文章:

java - 寻找独立的 JSP 编译器

java - 调用 String Replace() 时出现 IndexOutOfBounds 异常

java - tomcat 7 与 Mysql 的连接错误太多

java - 向客户端返回值时 Web 服务出现异常?

java - Android RecyclerView.Adapter更改图标onClick

java - Mockito varargs 参数匹配器的使用无效

java - SOAP href XML 映射问题 - 哪个映射有帮助?

iphone - 如何在 iphone objective c 中使用 webservice?

c# - 在浏览器中测试 wcf 服务

java - 如何使用 Apache Tomcat 运行以文本文件编写的 JSP 文件?