こんにちは。
JSPでもサーブレットでも以下のようなロジックになると思います。
(便宜上直接ファイル名を渡していますが、セキュリティ上問題がありますので実装する場合は注意下さい)
1)JSPについて(何種類かリンク方法を出してみました。
<%@ page contentType="text/html;charset=Windows-31J" %>
<html>
<head>
<title>CSVをダウンロード</title>
<script type="text/javascript">
function download ( key ) {
location.href = '../servlet/test.Download?key=' + key;
}
</script>
</head>
<body>
<h1>CSVダウンロード</h1>
<h2>JavaScriptで</h2>
<button type="button" onclick="download('test1.csv');">test1.csv</button><br>
<button type="button" onclick="download('test2.csv');">test2.csv</button><br>
<button type="button" onclick="download('test3.csv');">test3.csv</button>
<h2>submitで</h2>
<form action="../servlet/test.Download" method="post">
<button type="submit" name="key">test1.csv</button><br>
<button type="submit" name="key">test2.csv</button><br>
<button type="submit" name="key">test3.csv</button>
</form>
<h2>リンクで</h2>
<a href="../servlet/test.Download?key=test1.csv">test1.csv</a><br>
<a href="../servlet/test.Download?key=test2.csv">test2.csv</a><br>
<a href="../servlet/test.Download?key=test3.csv">test3.csv</a>
</body>
</html>
2,3)サーブレットの処理
import java.io.File;
import java.io.FileInputStream;
import java.io.IOException;
import java.io.InputStream;
import javax.servlet.ServletException;
import javax.servlet.ServletOutputStream;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class Download extends HttpServlet {
public void doGet (
HttpServletRequest request,
HttpServletResponse response )
throws IOException, ServletException {
this.download ( request, response );
}
public void doPost (
HttpServletRequest request,
HttpServletResponse response )
throws IOException, ServletException {
this.download ( request, response );
}
private void download (
HttpServletRequest request,
HttpServletResponse response )
throws IOException, ServletException {
String strKey = request.getParameter ( "key" );
// ファイルを取得
File file = new File ( "R:\\" + strKey );
response.setContentType ( "text/plain" );
response.setHeader ( "Content-Disposition", "attachment; filename=\"" + file.getName() + "\"");
response.setContentLength ( (int)file.length() );
InputStream inputStream = null;
ServletOutputStream outputStream = response.getOutputStream();
try {
FileInputStream input = new FileInputStream ( file.getAbsoluteFile() );
byte[] buffer = new byte[4096];
int size;
while ( (size = input.read(buffer)) != -1 ) {
outputStream.write ( buffer, 0, size );
}
} catch ( Exception e ) {
e.printStackTrace();
} finally {
if (inputStream != null) {
inputStream.close();
}
if ( outputStream != null ) {
outputStream.close();
}
}
}
}
お礼
LancerVII様 ご連絡遅くなりもうしわけございません。 ご丁寧にいくつもの方法をご教授いただきありがとうございました。 こちらのボタンの方法で試してみます。