我需要从内部网http服务器读取二进制文件并将其下载到公共部门。
SCHEMA
内联网文件服务器(Apache)= 1< - >公共http服务器(Apache Tomcat)= 2< - >互联网授权用户= 3
如何在不保存到服务器2上的文件系统的情况下释放它
感谢您回答我是java新手。
抱歉我的英文。
答案 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");
我从未在内联网上尝试过第一种方法,但鉴于内联网地址对互联网用户无效,我认为它不会起作用。
现在我们只剩下第二种方法 - 使用代理层。代理函数可以通过多种方式实现:一个简单的函数可能只是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中,这可以使用反向代理实现。)