首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从intranet下载JSP

从intranet下载JSP
EN

Stack Overflow用户
提问于 2012-05-04 09:35:30
回答 2查看 299关注 0票数 0

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

模式

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

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

谢谢你的回答,我是java的新手。

对不起,我的英语不好。

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-05-04 14:10:59

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

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

票数 0
EN

Stack Overflow用户

发布于 2012-05-04 10:35:37

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

  • 将internet请求重定向到intranet。

在JSP页面中使用:

代码语言:javascript
复制
<% response.sendRedirect("http://intranet_address");%>

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

在Servlet页面中使用:

代码语言:javascript
复制
response.setStatus(302);
response.setHeader("Location", "http://intranet_address"); or just  

response.sendRedirect("http://intranet_address");

  • 使用服务器2上的一种代理从服务器1读取数据并直接发送给internet用户,而无需保存到服务器2。

我从未在intranet上尝试过第一种方法,但考虑到intranet地址对internet用户无效的事实,我认为它不会起作用。

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

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

代码语言:javascript
复制
 resp.setContentType("application/octet-stream");
 resp.setContentLength(length);
 resp.setHeader("Content-Disposition", "attachment; filename=\"" + filename + "\"" );

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

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10441567

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档