【问题标题】:Servlet to servlet connection across servers跨服务器的 Servlet 到 Servlet 连接
【发布时间】:2023-03-23 17:24:02
【问题描述】:

我们有一个基于 Servlet/JSP 的应用程序在运行在 AIX 服务器上的 Websphere 应用服务器上运行。在客户端和前面提到的 Websphere 服务器上的应用程序之间还有另一个 Tomcat 服务器(在不同的机器上)。如何在 Tomcat 和 websphere 之间建立连接?我想到的是 - 在 Tomcat 上部署一个 servlet 并使用 java.net.URL 和 URL 连接建立一个 servlet 到 servlet 的连接。它将来自 tomcat 服务器的请求从客户端重定向到 Websphere 服务器应用程序,并以字节流的形式返回响应。

使用这种解决方案的优缺点是什么?还有哪些其他替代方案或更好的设计选择?

【问题讨论】:

  • 功能需求是什么? webapps/servlet 应该做什么?例如,为什么您不只是将重定向发送到其他 web 应用程序?只有这样我们才能提出“最佳”方法。
  • Websphere 上的应用程序根据从客户端通过 tomcat 服务器传递给它的参数生成某些报告。这些报告以字节流的形式传回 tomcat 服务器并转换为 PDF 文件。这些 PDF 文件发布在基于浏览器的客户端上。
  • 所以本质上,我们有两层服务器(tomcat 和 WAS) WAS 服务器位于防火墙后面的安全区域中,出于安全原因不能直接暴露给客户端。 WAS 服务器上的应用程序是基于 servlet 的。我想在 TOmcat 上有一个 servlet 来连接到 WAS,以字节流的形式获取响应并转换回 PDF。有更好的方法吗?
  • 抱歉,我在输入答案时没有看到您的第二条评论。好吧,在这种情况下,没有更好的方法。顺便说一句,当您说“将字节转换为 PDF”时,您到底是什么意思?这些字节是否代表另一种文件格式或其他东西?如果其他服务器已经返回 PDF,您只需将其流式传输,而不进行任何转换。

标签: java servlets


【解决方案1】:

您可以让客户端直接将请求发送到其他服务器。所以不是

<form action="generatereport" method="post">

使用

<form action="http://other.com/generatereport" method="post">

&lt;input type="hidden"&gt; 可以传递任何额外的参数。


或者如果支持 GET,你可以代替 method="get" 也只是这样做

<a href="http://other.com/generatereport?param=foo">

response.sendRedirect("http://other.com/generatereport?param=foo");

或者,如果存在某些安全限制和/或客户端不应该知道其他服务器的 URL,那么您最好的选择确实是在 URLConnection 的帮助下自己玩代理。

URLConnection connection = new URL("http://other.com/generatereport").openConnection();
// Copy necessary request headers from request.getHeader() to connection.setRequestProperty().
// If POST, copy request.getInputStream() to connection.getOutputStream() as well.
// Copy necessary response headers from connection.getHeaderField() to response.setHeader().
// Finally copy connection.getInputStream() to response.getOutputStream().

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-13
    • 2011-08-12
    • 2016-11-14
    • 2015-04-13
    • 2016-02-08
    • 1970-01-01
    相关资源
    最近更新 更多