[Seasar-user:19552] Re: [SAStruts] SizeLimitExceededException 発生時のレスポンスについて
田嶋隆寿
[E-MAIL ADDRESS DELETED]
2010年 3月 25日 (木) 14:01:22 JST
田嶋です。
いつもお世話になっております。
> 小林 (koichik) です.
>
> 問題の現象が起きている状態でブラウザの
> ステータスラインを見ると,ファイルの
> アップロードが終了していないことが分かります.
> # ただし maxFileSize が 1024byte などと小さく,
> # アップロードするファイルもそれより少し大きい
> # 程度だと問題になりません.
> # TCP のフロー制御が行われるサイズに関係?
>
> その時サーバ側では既に処理を終えてレスポンスを
> 返しているのですが,ブラウザはリクエストの
> 送信中のため,レスポンスを受信しないという
> 状態です.
> # こちらも同様にレスポンスのサイズが小さいと
> # 画面は表示されますが,ブラウザはリクエストを
> # 送信中のままです.
>
> これは commons-fileupload が SizeLimitExceededException
> をスローした際に,リクエストの残りを読み取らず
> 放置しているために起きていると思われます.
commons-fileuploadが問題でしたか。
サーバーがレスポンスを返しているのに、
クライアントが受信していないという状態だったのですね。
> とりあえず,S2MultipartRequestHandler の
>
> } catch (SizeLimitExceededException e) {
> request.setAttribute(
> MultipartRequestHandler.ATTRIBUTE_MAX_LENGTH_EXCEEDED,
> Boolean.TRUE);
> request.setAttribute(SIZE_EXCEPTION_KEY, e);
>
> の後に
>
> try {
> InputStream is = request.getInputStream();
> try {
> byte[] buf = new byte[1024];
> int len = 0;
> while ((len = is.read(buf)) != -1) {
> }
> } catch (Exception ignore) {
> } finally {
> try {
> is.close();
> } catch (Exception ignore) {
> }
> }
> } catch (Exception ignore) {
> }
>
> を追加したところ解決しました.
同様のコードを書くことで当方でも解決いたしました。
小林様、ありがとうございます。
> ひがです。
>
> SAStrutsは修正しておきます。
ひがさま、ありがとうございます。
SAStrutsのバージョンアップを期待してお待ちしております。
Seasar-user メーリングリストの案内