JSP从Intranet下载

时间:2012-05-04 01:35:30

标签: java jsp servlets

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

SCHEMA

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

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

感谢您回答我是java新手。

抱歉我的英文。

2 个答案:

答案 0 :(得分:0)

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

  • 将互联网请求重定向到内部网。

在JSP页面中使用:

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

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

在Servlet页面中使用:

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

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

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

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

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

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

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

答案 1 :(得分:0)

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

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