1.フレームワークにとらわれない:添付ファイルとしてのサーブレットダウンロードファイル
<!-- with JS -->
<a href="javascript:window.location='downloadServlet?param1=value1'">
download
</a>
<!-- without JS -->
<a href="downloadServlet?param1=value1" >download</a>
2. Struts2 Framework:添付ファイルとしてファイルをダウンロードするアクション
<!-- with JS -->
<a href="javascript:window.location='downloadAction.action?param1=value1'">
download
</a>
<!-- without JS -->
<a href="downloadAction.action?param1=value1" >download</a>
タグで作成されたURL<s:a>
をOGNLで指すタグを使用することをお勧めします<s:url>
。
<!-- without JS, with Struts tags: THE RIGHT WAY -->
<s:url action="downloadAction.action" var="url">
<s:param name="param1">value1</s:param>
</s:ulr>
<s:a href="%{url}" >download</s:a>
上記の例では、あなたが必要とする書き込みにコンテンツディスポジションにヘッダを応答ファイル(ダウンロードする必要があることを指定し、attachment
()およびブラウザで開かれていませんinline
)。コンテンツタイプも指定する必要があり、ファイル名と長さを追加することもできます(ブラウザが現実的なプログレスバーを描画するのを助けるため)。
たとえば、ZIPをダウンロードする場合:
response.setContentType("application/zip");
response.addHeader("Content-Disposition",
"attachment; filename=\"name of my file.zip\"");
response.setHeader("Content-Length", myFile.length()); // or myByte[].length...
Struts2を使用する場合(たとえば、アクションをサーブレットとして使用している場合を除き、ダイレクトストリーミングのためのハックなど)、応答に直接何かを書き込む必要はありません。単に使用してストリームの結果の型を動作し、struts.xmlでそれを設定:例
<result name="success" type="stream">
<param name="contentType">application/zip</param>
<param name="contentDisposition">attachment;filename="${fileName}"</param>
<param name="contentLength">${fileLength}</param>
</result>
3.フレームワークにとらわれない(/ Struts2フレームワーク):ブラウザー内でサーブレット(/アクション)オープンファイル
ファイルをダウンロードするのではなく、ブラウザー内で開く場合は、Content-dispositionをinlineに設定する必要がありますが、ターゲットを現在のウィンドウの場所にすることはできません。JavaScriptで作成された新しいウィンドウ<iframe>
、ページ内、または「ディスカッションされた」target = "_ blank"を使用してオンザフライで作成された新しいウィンドウをターゲットにする必要があります。
<!-- From a parent page into an IFrame without javascript -->
<a href="downloadServlet?param1=value1" target="iFrameName">
download
</a>
<!-- In a new window without javascript -->
<a href="downloadServlet?param1=value1" target="_blank">
download
</a>
<!-- In a new window with javascript -->
<a href="javascript:window.open('downloadServlet?param1=value1');" >
download
</a>