我有两个Web应用程序说App1和App2.我想从App1中的servlet调用App2中的servlet.我正在使用URLConnection.我也能够将参数传递给App2中的servlet,我也能够从servlet接收响应作为字符串.但我想从App2中的servlet发送java对象,并在App1的servlet中接收它们.怎么做到这一点?
Bal*_*usC 10
要看.
如果这些Web应用程序在同一个servlet容器中的物理上相同的Web服务器上运行,那么只需将其设置为请求属性并将请求转发到其他上下文:
request.setAttribute("name", object);
ServletContext app2 = getServletContext().getContext("app2");
app2.getRequestDispacher("servletUrl").forward(request, response);
Run Code Online (Sandbox Code Playgroud)
其他上下文将能够获得如下对象:
Object object = request.getAttribute("name");
Run Code Online (Sandbox Code Playgroud)
这只需要一个服务器设置,以便相互访问上下文.如何做到这一点取决于servletcontainer.例如,在Tomcat中,您只需要将crossContext
webapp <Context>
元素的属性设置为true
.
<Context crossContext="true">
Run Code Online (Sandbox Code Playgroud)
然后它将可用于其他上下文.对于其他服务器,请参阅其文档.
如果这些Web应用程序在物理上不同的Web服务器上运行,那么有几个选项:
转换为String并作为参数发送.在检索时,从String转换回来.JSON是一个很好的格式.Google Gson提供了在完全可用的Java对象和JSON之间进行转换的可能性,反之亦然.如果你正在使用GET并且请求URI变得非常长,超过2KB,那么考虑使用POST而不是GET,否则URI可能会被服务器截断.优点:更好的可重复使用服务.缺点:很难发送二进制数据.
另请参阅: 将JSON转换为Java.
根据RFC2388multipart/form-data
使用URLConnection
或Apache HttpComponents客户端发送HTTP POST请求,并使用Apache Commons FileUpload在另一端处理它.优点:标准规范,可以发送二进制数据.缺点:更多代码.
另请参见: 如何使用URLConnection.
序列化 Java对象,将其原始写入URLConnection#getOutputStream()
使用ObjectOutputStream
并从中检索原始HttpServletRequest#getInputStream()
并使用它进行反序列化ObjectInputStream
.优点:简单.缺点:不可重复使用,紧耦合.
归档时间: |
|
查看次数: |
2510 次 |
最近记录: |