#この記事の概要
javaでファイルダウンロード機能を実装した際にエラーハンドリングで苦労した点を記載する。
[要点]
出力ストリームを自動クローズしない
正常終了時のみクローズする
キャッチ文でresponseをresetし、クローズしない
#環境
OS:Windows8.1 32bit
eclipse:4.5.2
#エラー画面を表示できないソース
元々のソースではtry-catch-resouses文やfinally句の中でclose処理を記載していた。
try {
// ダウンロード対象ファイルの入力ストリームを取得
// responseから出力ストリームを取得
// 入力ストリームから出力ストリームへ書き込みを行う
} catch(Exception e) {
// 例外処理
} finally {
// クローズ処理
}
}
このソースでは正常終了する際には問題が無いが、例外発生時にもresponseのクローズ処理をしてしまうため、クライアント側から見て正常でないファイルをダウンロードしてしまうようになっていた。
そのため下記のように修正を行う。
#エラー画面を表示するソース
try {
// ダウンロード対象ファイルの入力ストリームを取得
// responseから出力ストリームを取得
// 入力ストリームから出力ストリームへ書き込みを行う
// 正常終了時のみクローズ処理
} catch(Exception e) {
// responseのreset処理
// 例外処理
}
}
これで正常終了時のみダウンロードされ、例外発生時はエラー画面を表示できる