Java 远程servlet之间的通信

Java 远程servlet之间的通信,java,servlets,Java,Servlets,我有两个web应用程序,分别是App1和App2。我想从App1中的servlet调用App2中的servlet。我正在为此使用URLConnection。我还能够将参数传递给App2中的servlet,并且能够以字符串形式接收来自servlet的响应。但是我想从App2中的servlet发送java对象,并在App1的servlet中接收它们。如何实现这一点?取决于具体情况 如果这些Web应用程序在同一servletcontainer中的同一Web服务器上运行,则只需将其设置为请求属性并将请

我有两个web应用程序,分别是App1和App2。我想从App1中的servlet调用App2中的servlet。我正在为此使用URLConnection。我还能够将参数传递给App2中的servlet,并且能够以字符串形式接收来自servlet的响应。但是我想从App2中的servlet发送java对象,并在App1的servlet中接收它们。如何实现这一点?

取决于具体情况


如果这些Web应用程序在同一servletcontainer中的同一Web服务器上运行,则只需将其设置为请求属性并将请求转发到其他上下文:

request.setAttribute("name", object);
ServletContext app2 = getServletContext().getContext("app2");
app2.getRequestDispacher("servletUrl").forward(request, response);
另一个上下文将能够获得对象,如下所示:

Object object = request.getAttribute("name");
这只需要一个服务器设置,使上下文可以相互访问。如何做到这一点取决于servletcontainer。例如,您只需要将webapp的
元素的
crossContext
属性设置为
true

<Context crossContext="true">

然后它将可用于其他上下文。对于其他服务器,请参阅其文档


如果这些Web应用程序在物理上不同的Web服务器上运行,则有几个选项:

  • 转换为字符串并作为参数发送。检索时,从字符串转换回。JSON是一种很好的格式。提供了在fullworthy Java对象和JSON之间转换的可能性,反之亦然。如果使用GET,请求URI很长,超过2KB,那么考虑使用POST而不是GET,否则URI可能会被服务器截断。优点:更好的可重用服务。缺点:难以发送二进制数据

    另请参见:

  • 使用
    URLConnection
    或按照发送
    multipart/form data
    HTTP POST请求,并在另一端使用进行处理。优点:标准规格,可发送二进制数据。缺点:更多代码

    另请参见:

  • Java对象,使用将其原始写入
    URLConnection#getOutputStream()
    并从
    HttpServletRequest#getInputStream()
    中检索它,然后使用取消序列化。优点:简单。缺点:不可重用,紧密耦合

    另请参见:

  • 使用

    您将发送对象流,而不是发送HTML

    只是,请注意,为了增加额外的安全性,您不希望某些外部源向您的呼叫中注入有毒的对象