2012-05-04 49 views
0

我需要從Intranet http服務器讀取二進制文件並下載到公共目錄。從Intranet上下載JSP

SCHEMA

內部網文件服務器(Apache)的= 1 < - >公共http服務器(Apache Tomcat上)= 2 < - >互聯網授權用戶= 3

HOWTO釋放這一點沒有保存到文件系統在服務器上2

感謝您的回答,我是新的Java。

對不起,我的英文。

回答

0

使用java.net.URL(或另一個http客戶端)從1中讀取並打印出來(作爲對3的響應)。

(在Apache Http Server或Nginx中,這可以使用反向代理來實現。)

0

我只能想到的兩種方式在這種情況下:

  • 重定向網絡請求的內部網。

在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

我從來沒有嘗試過內部網上的第一種方法,但我認爲它不會工作,因爲內部網地址不會對互聯網用戶有效。

現在我們只剩下第二種方法 - 使用代理層。代理函數可以用很多方式實現:簡單的一個可能只是Servlet後面的一個bean,用於打開文件服務器1的URL,讀取文件並通過Servlet響應流將其發送給用戶,或者您可以使用某種嵌入式HTTPClient。

編輯:既然你要下載二進制文件,JSP不是一個好的選擇。它意味着處理文本數據。您需要Servlet來執行二進制流。您可以設置之類的東西在你的HttpServletResponse如下:

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

這樣的內容將被髮送與您設置名稱的附件。