0

我需要从 Intranet http 服务器读取二进制文件并将其下载到公共。

架构

内网文件服务器(Apache)=1 <-->公共http服务器(Apache Tomcat)=2<-->互联网授权用户=3

如何在不保存到服务器 2 上的文件系统的情况下发布它

感谢您的回答,我是 java 新手。

对不起我的英语不好。

4

2 回答 2

0

在这种情况下,我只能想到两种方法:

  • 将 Internet 请求重定向到 Intranet。

在 JSP 页面中使用:

<% response.sendRedirect("http://intranet_address");%>

或者

<c:redirect url="http://intranet_address"/>使用标准标签库。

在 Servlet 页面中使用:

response.setStatus(302);
response.setHeader("Location", "http://intranet_address"); or just  

response.sendRedirect("http://intranet_address");
  • 在服务器 2 上使用一种代理从服务器 1 读取并直接发送给互联网用户,而不保存到服务器 2。

我从未在 Intranet 上尝试过第一种方法,但鉴于 Intranet 地址对 Internet 用户无效,我认为它不会起作用。

现在我们只剩下第二种方法了——使用代理层。代理功能可以通过多种方式实现:一种简单的方式可能只是 Servlet 后面的一个 bean,用于打开文件服务器 1 的 URL,读取文件并通过 Servlet 响应流将其发送给用户,或者您可以使用某种嵌入式 HTTPClient。

编辑:由于您要下载二进制文件,JSP 不是一个好的选择。它旨在处理文本数据。你需要 Servlet 来做二进制流。您可以在 HttpServletResponse 上设置如下内容:

 resp.setContentType("application/octet-stream");
 resp.setContentLength(length);
 resp.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"" );

因此内容将以您设置的名称作为附件发送。

于 2012-05-04T02:35:36.883 回答
0

使用 java.net.URL(或另一个 http 客户端)从 1 中读取,然后将其打印出来(响应 3)。

(在 Apache Http Server 或 Nginx 中,这可以使用反向代理来实现。)

于 2012-05-04T06:10:58.860 回答