[Seasar-user:10637] Re: ダウンロードを IE でキャンセルした際の対応について

[E-MAIL ADDRESS DELETED] [E-MAIL ADDRESS DELETED]
2007年 9月 19日 (水) 19:29:19 JST


お世話になっています。TuMikiです。

SVNから
CancelHander.java
CancelUtil.java
DefaultCancelHander.java
を取得して、Cancelしても無事終了するようになりました。
Teeda1.0.7環境でも、ばっちり、動作しました。

ありがとうございました。


----- Original Message -----
>Date: Wed, 19 Sep 2007 15:41:49 +0900
>From: "Shinpei Ohtani" <[E-MAIL ADDRESS DELETED]>
>To: [E-MAIL ADDRESS DELETED]
>Subject: [Seasar-user:10635] Re:
>	ダウンロードを IE でキャンセルした際の対応について
>
>
>大谷です.
>
>ユーザキャンセル時に対してUtilを準備しました.
>teedaCustomize.diconに宣言的にユーザキャンセルとみなす
>例外を指定します.
>
><component class="org.seasar.teeda.core.util.DefaultCancelHandler">
>		<initMethod name="addCancellableException">
>			<arg>@[E-MAIL ADDRESS DELETED]</arg>
>		</initMethod>
></component>
>
>キャンセルかどうかの判定にはorg.seasar.teeda.core.util.CancelUtilを
>使います.Teedaに依存するのが嫌であれば、適当なコンポーネントを作ってください.
>またはCancelHandlerそのものをPageにDIしてもかまいません.
>(今後準備する予定はあります)
>
>ダウンロードのロジックは例えば下記のようになります.
>
>OutputStream os = null;
>try {
>	os = response.getOutputStream();
>	os.write(FileUtil.getBytes(file));
>} catch (IOException e) {
>	Throwable cause = e.getCause();
>	if (!CancelUtil.isCancelled(cause)) {
>		throw new AppFacesException("E0000002");
>	} else {
>		System.out.println("user cancelled....");
>	}
>} finally {
>	try {
>		os.close();
>	} catch (final IOException e) {
>	}
>}
>this.facesContext.responseComplete();
>
>必要最低限な感じですが、ひとまずこのようにしました.
>宜しくお願いします.
>
>
>07/09/19 に Shinpei Ohtani<[E-MAIL ADDRESS DELETED]> さんは書きました:
>> 大谷です.
>>
>> サンプルありがとうございます.
>> こちらでも再現しました.
>> どうやらTomahawkのFilterかましていたので
>> そこでバッファリングされていたようです.
>>
>> 下記サンプルも踏まえ、対応を検討してみます.
>> 宜しくお願いします.
>>
>> 07/09/19 に [E-MAIL ADDRESS DELETED]<[E-MAIL ADDRESS DELETED]> さんは書きました:
>> > お世話になっております。TuMikiです。
>> >
>> > サンプルを作成しましたので、送ります。
>> > これに、ダウンロード用のファイルを6Mbyteとかのサイズのファイルで実行して
、
>> > キャンセルすれば発生しました。(Tomcatは5.5.23です)
>> > ただ、このサンプルだと、エラーダンプは出るのですが、エラー画面へ遷移しま
せん。
>> > 対象がTeeda1.0.7でサンプルの実行がTeeda1.0.11RC1でバージョンの差異なのか
、
>> > こちらでの作りこみなのかは未調査です。
>> >
>> > なお、ThrowsInterceptorで対応しようとしたのですが、customizer.diconのpage
やact
>> > ion部分に追加しても
>> > SocketExceptionやorg.seasar.framework.exception.InvocationTargetRuntimeEx
cepti
>> > onを引っ掛けることはできませんでした。もう少し外側で引っ掛ける方法などあ
りまし
>> > たら、ご教授いただければ助かります。
>> >
>> > よろしくお願いいたします。
>> > ----- Original Message -----
>> > >Date: Mon, 17 Sep 2007 15:17:30 +0900
>> > >From: "Shinpei Ohtani" <[E-MAIL ADDRESS DELETED]>
>> > >To: [E-MAIL ADDRESS DELETED]
>> > >Subject: [Seasar-user:10567] Re:
>> > >       ダウンロードを IE でキャンセルした際の対応について
>> > >
>> > >
>> > >大谷です.
>> > >
>> > >いま、軽く試しているのですが、
>> > >大体どれくらいのサイズだと発生しますか?
>> > >
>> > >こちらで試していてもなかなかでないので.
>> > >もし再現ケース等があるなら、頂けると助かります.
>> > >
>> > >07/09/17 に TuMiki<[E-MAIL ADDRESS DELETED]> さんは書きました:
>> > >> お世話になっています。TuMikiです。
>> > >>
>> > >> あら、なんと。
>> > >>
>> > >> でも、正しくはって言うのも変だけど、
>> > >> 今回、そのまま、AP担当のURLにリダイレクトしちゃったけど、
>> > >> でかいファイルの場合は、Apacheとかの機能で対応するのは本筋なのかも。
>> > >> HTTPサーバーの変更まで手が回らないんで、ご迷惑をおかけしますです。
>> > >>
>> > >> よろしくお願いします。
>> > >> 以上
>> > >>
>> > >> Shinpei Ohtani さんは書きました:
>> > >> > 大谷です.
>> > >> >
>> > >> > こちらの件、Teeda側でも検討します.
>> > >> > サイズの大きいファイルを扱うときに、普通に出そうなので.
>> > >> >
>> > >> > 宜しくお願いします.
>> > >> >
>> > >> > 07/09/13 に [E-MAIL ADDRESS DELETED]<[E-MAIL ADDRESS DELETED]> さんは書きました:
>> > >> >> お疲れ様です。TuMikiです。
>> > >> >>
>> > >> >> closeをはずしてみましたが、現象は同じでした。
>> > >> >>
>> > >> >> Maenoさんのご指摘のように
>> > >> >> ThrowsInterceptorを作成して、java.net.SocketExceptionを無視する方向
を検
>> > 討して
>> > >> >> みます。
>> > >> >> 以上
>> > >> >>
>> > >> >> ----- Original Message -----
>> > >> >>> Date: Thu, 13 Sep 2007 20:28:40 +0900
>> > >> >>> From: SETO Azusa <[E-MAIL ADDRESS DELETED]>
>> > >> >>> To: [E-MAIL ADDRESS DELETED]
>> > >> >>> Subject: [Seasar-user:10509] Re:
>> > >> >>> ダウンロードを IE でキャンセルした際の対応について
>> > >> >>>
>> > >> >>>
>> > >> >>> せとあずさです。
>> > >> >>>
>> > >> >>> On Thu, 13 Sep 2007 10:59:11 +0900 (JST)
>> > >> >>> [E-MAIL ADDRESS DELETED] wrote:
>> > >> >>>
>> > >> >>>> CSVファイルのダウンロードは、Actionクラスで
>> > >> >>>>      public Class doHoge() {
>> > >> >>>>              // レスポンスにダウンロード用のヘッダー設定を行い
>> > >> >>>>              response.setContentLength((int) size);
>> > >> >>>>              response.setContentType("text/csv");
>> > >> >>>>              response.setHeader("Content-Disposition","inline;fil
ename
>> > =\"" + fileName
>> > >> >> + "
>> > >> >>>> \"");
>> > >> >>>>
>> > >> >>>>              //内容を書き出して
>> > >> >>>>              OutputStream out = response.getOutputStream();
>> > >> >>>>              int c;
>> > >> >>>>              while ((c = in.read()) != -1) {
>> > >> >>>>                      out.write(c);
>> > >> >>>>              }
>> > >> >>>>              out.close();
>> > >> >>>>              in.close();
>> > >> >>>>              // 終了したことをJSFに通知する。
>> > >> >>>>              page.getFacesContext().responseComplete();
>> > >> >>>>              return null;
>> > >> >>>>      }
>> > >> >>>> として実現しています。
>> > >> >>>> ログを見る限りは、Actionクラス終了後の出来事のようなのです。
>> > >> >>>> 「ClientAbortException」を無視するような対応が必要だと思うのです
が・・
>> > ・
>> > >> >>> Actionの中でOutputStreamをcloseしているのが不要なのでしょう。
>> > >> >>> Teedaに限らずServletでは、Responseから取得したOutputStreamの
>> > >> >>> closeはWebコンテナ(Servletコンテナ)の役割です。
>> > >> >>>
>> > >> >>> # と、思います。
>> > >> >>>
>> > >> >>>
>> > >> >>> --
>> > >> >>> せとあずさ
>> > >> >>> [E-MAIL ADDRESS DELETED]
>> > >> >>> http://www.fieldnotes.jp/d/
>> > >> >>> _______________________________________________
>> > >> >>> Seasar-user mailing list
>> > >> >>> [E-MAIL ADDRESS DELETED]
>> > >> >>> https://ml.seasar.org/mailman/listinfo/seasar-user
>> > >> >> _______________________________________________
>> > >> >> Seasar-user mailing list
>> > >> >> [E-MAIL ADDRESS DELETED]
>> > >> >> https://ml.seasar.org/mailman/listinfo/seasar-user
>> > >> >>
>> > >> >
>> > >> >
>> > >> _______________________________________________
>> > >> Seasar-user mailing list
>> > >> [E-MAIL ADDRESS DELETED]
>> > >> https://ml.seasar.org/mailman/listinfo/seasar-user
>> > >>
>> > >
>> > >
>> > >--
>> > >=============================
>> > >Shinpei Ohtani
>> > >[E-MAIL ADDRESS DELETED]
>> > >=============================
>> > >_______________________________________________
>> > >Seasar-user mailing list
>> > >[E-MAIL ADDRESS DELETED]
>> > >https://ml.seasar.org/mailman/listinfo/seasar-user
>> >
>> > _______________________________________________
>> > Seasar-user mailing list
>> > [E-MAIL ADDRESS DELETED]
>> > https://ml.seasar.org/mailman/listinfo/seasar-user
>> >
>> >
>> >
>>
>>
>> --
>> =============================
>> Shinpei Ohtani
>> [E-MAIL ADDRESS DELETED]
>> =============================
>>
>
>
>-- 
>=============================
>Shinpei Ohtani
>[E-MAIL ADDRESS DELETED]
>=============================
>_______________________________________________
>Seasar-user mailing list
>[E-MAIL ADDRESS DELETED]
>https://ml.seasar.org/mailman/listinfo/seasar-user




Seasar-user メーリングリストの案内