【问题标题】:JSP download from intranet从内网下载JSP
【发布时间】:2012-05-04 01:35:30
【问题描述】:

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

架构

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

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

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

对不起我的英语。

【问题讨论】:

    标签: java jsp servlets


    【解决方案1】:

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

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

    【讨论】:

      【解决方案2】:

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

      • 将 Internet 请求重定向到 Intranet。

      在JSP页面中使用:

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

      &lt;c:redirect url="http://intranet_address"/&gt; 使用标准标签库。

      在 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 + "\"" );
      

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

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2011-02-13
        • 1970-01-01
        • 2013-11-27
        • 1970-01-01
        • 1970-01-01
        • 2015-01-26
        • 1970-01-01
        相关资源
        最近更新 更多