0

イントラネットhttpサーバーからバイナリファイルを読み取り、一般にダウンロードする必要があります。

スキーマ

イントラネットファイルサーバー(Apache)= 1 <->パブリックhttpサーバー(ApacheTomcat)=2<->インターネット許可ユーザー=3

サーバー2のファイルシステムに保存せずにこれを解放する方法

回答ありがとうございます。私はJavaを初めて使用します。

英語でごめんなさい。

4

2 に答える 2

0

この状況では、2つの方法しか考えられません。

  • インターネット要求をイントラネットにリダイレクトします。

JSPページでの使用:

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

また

<c:redirect url="http://intranet_address"/>標準のtaglibを使用します。

サーブレットページでの使用:

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

response.sendRedirect("http://intranet_address");
  • サーバー2で一種のプロキシを使用して、サーバー1から読み取り、サーバー2に保存せずにインターネットユーザーに直接送信します。

イントラネットで最初のアプローチを試したことはありませんが、イントラネットアドレスがインターネットユーザーにとって有効ではないという事実を考えると、うまくいくとは思いません。

今では、プロキシ層を使用するという2番目のアプローチしか残されていません。プロキシ機能はさまざまな方法で実装できます。単純なものは、サーブレットの背後にあるBeanで、ファイルサーバー1へのURLを開き、ファイルを読み取ってサーブレット応答ストリームを介してユーザーに送信する場合があります。埋め込まれたHTTPClient。

編集:バイナリファイルをダウンロードするので、JSPは良い選択ではありません。これは、テキストデータを処理するためのものです。バイナリストリームを実行するにはサーブレットが必要です。HttpServletResponseで次のように設定できます。

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

そのため、コンテンツは設定した名前の添付ファイルとして送信されます。

于 2012-05-04T02:35:36.883 に答える
0

java.net.URL(または別のhttpクライアント)を使用して1から読み取り、(3に応答して)出力します。

(Apache Http ServerまたはNginxでは、これはリバースプロキシを使用して実現できます。)

于 2012-05-04T06:10:58.860 に答える