こんにちはゲストさん。会員登録(無料)して質問・回答してみよう!

締切り済みの質問

ダウンロードサーブレットでキャンセル時のエラー

ファイルをダウンロードさせるservletを以下のソースのように作っています。
ブラウザ側で「ファイルの保存ダイアログ」の「キャンセル」を行われた際に以下のようなエラーが表示されます。
エラーを回避する方法、あるいは対処の方法はあるのでしょうか?どなたかご教授下さい。

環境:Windows XP,Tomcat 5.0.28,IE 6.0
ソース(一部)
---------------
String fileName1= rs.getString(1);
InputStream data = rs.getBinaryStream(2);
String contentType = rs.getString(3);
String fileName2 = URLEncoder.encode(fileName1,"UTF-8");
//contentTypeを出力
response.setContentType(contentType);
//ファイル名の送信(attachment部分をinlineに変更すればインライン表示)
response.addHeader("Content-disposition","attachment; filename=\""+fileName2+"\"");
//ファイル内容の出力
ServletOutputStream out = response.getOutputStream();
//InputStream fin = new InputStream(fileName2);
int size;
while((size = data.read(buffer))!=-1){
out.write(buffer,0,size);  //←エラー発生箇所
}
data.close();
out.flush();
out.close();

エラー
--------------
ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error
at org.apache.coyote.tomcat5.OutputBuffer.realWriteBytes(OutputBuffer.java:373)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:398)
・・・

投稿日時 - 2005-11-10 18:18:15

QNo.1770591

すぐに回答ほしいです

このQ&Aは役に立ちましたか?

1人が「このQ&Aが役に立った」と投票しています

回答(1)

ANo.1

ClientAbortExceptionをcatchして
エラー処理を書けばいいのではないですか?

投稿日時 - 2005-11-10 21:28:50

補足

ご回答ありがとうございます。

確かにおっしゃる通りだと思うのですが
ブラウザ側でキャンセル時以外の場合にClientAbortExceptionが発生する可能性はないのでしょうか?
また、エラー発生箇所の前に、ブラウザ側でキャンセルされたこと、
あるいは通信??がなくなったことを察知して、処理を分岐させるといったことは不可能なのでしょうか?

サーブレットを始めたばかりでわからない事が多く、
変な質問かも知れませんがどうぞよろしくお願いします。

投稿日時 - 2005-11-10 22:48:14

あなたにオススメの質問