[Seasar-user:10508] Re: ダウンロードを IE でキャンセルした際の対応について
Maeno
[E-MAIL ADDRESS DELETED]
2007年 9月 13日 (木) 20:06:26 JST
前野@S2JSFです。
ThrowsInterceptorを継承したクラスを作成し、
それの中でClientAbortExceptionをキャッチしてあげれば
よいかなと思いますが、いかがでしょうか?
http://s2container.seasar.org/2.4/ja/aop.html#ThrowsInterceptor
[E-MAIL ADDRESS DELETED] さんは書きました:
> お世話になっております。TuMikiです。
>
> CSVファイルのダウンロードで「開く、保存、キャンセル」画面でキャンセルしたとこ
> ろ
> 下のログにあるような「ClientAbortException」となる現象た発生しております。
>
> CSVファイルのダウンロードは、Actionクラスで
> public Class doHoge() {
> // レスポンスにダウンロード用のヘッダー設定を行い
> response.setContentLength((int) size);
> response.setContentType("text/csv");
> response.setHeader("Content-Disposition","inline;filename=\"" + 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」を無視するような対応が必要だと思うのですが・・・
>
> 別の目的でIntercepterを作成しています。この中で、
> 件のエラーを無視するコードを下のように記述すれば対応できるのでしょうか?
> try {
> Object ret = invocation.proceed(); // 本来の対象メソッドの実行部分
> } catch (ClientAbortException e) {
> // 無視
> }
> よろしくお願いします。
>
> エラーのログです。
> DEBUG 2007-09-13 01:07:21,609 [http-8080-Processor25] [ESSR0043]kh.web.MenuAct
> ion$$EnhancedByS2AOP$$bde56dが呼び出した対象が不正です。理由はClientAbortExcep
> tion: java.net.SocketException: Connection reset by peer: socket write error
> org.seasar.framework.exception.InvocationTargetRuntimeException: [ESSR0043]kh.
> web.MenuAction$$EnhancedByS2AOP$$bde56dが呼び出した対象が不正です。理由はClien
> tAbortException: java.net.SocketException: Connection reset by peer: socket w
> rite error
> at org.seasar.framework.util.MethodUtil.invoke(MethodUtil.java:58)
> at org.seasar.framework.beans.impl.BeanDescImpl.invoke(BeanDescImpl.java:213)
> at org.seasar.teeda.extension.html.impl.HtmlComponentInvokerImpl.invoke(HtmlC
> omponentInvokerImpl.java:159)
> at org.seasar.teeda.extension.html.impl.HtmlActionListener.processAction(Html
> ActionListener.java:62)
> at javax.faces.component.UICommand.broadcast(UICommand.java:149)
> at org.seasar.teeda.extension.component.html.THtmlCommandButton.broadcast(THt
> mlCommandButton.java:53)
> at javax.faces.component.UIViewRoot.broadcastEvents(UIViewRoot.java:192)
> at javax.faces.component.UIViewRoot.processApplication(UIViewRoot.java:117)
> at org.seasar.teeda.core.lifecycle.impl.InvokeApplicationPhase.executePhase(I
> nvokeApplicationPhase.java:29)
> at org.seasar.teeda.core.lifecycle.AbstractPhase.execute(AbstractPhase.java:5
> 5)
> at org.seasar.teeda.core.lifecycle.LifecycleImpl.execute(LifecycleImpl.java:9
> 4)
> at javax.faces.webapp.FacesServlet.service(FacesServlet.java:92)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicati
> onFilterChain.java:269)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilter
> Chain.java:188)
> at org.seasar.framework.container.hotdeploy.HotdeployFilter.doFilter(Hotdeplo
> yFilter.java:63)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicati
> onFilterChain.java:215)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilter
> Chain.java:188)
> at org.seasar.framework.container.filter.S2ContainerFilter.doFilter(S2Contain
> erFilter.java:63)
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicati
> onFilterChain.java:215)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilter
> Chain.java:188)
> at org.seasar.extension.filter.EncodingFilter.doFilter(EncodingFilter.java:62
> )
> at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(Applicati
> onFilterChain.java:215)
> at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilter
> Chain.java:188)
> at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.
> java:210)
> at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.
> java:174)
> at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:1
> 27)
> at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:1
> 17)
> at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.ja
> va:108)
> at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:151
> )
> at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:870)
> at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.proces
> sConnection(Http11BaseProtocol.java:665)
> at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.j
> ava:528)
> at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollower
> WorkerThread.java:81)
> at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.j
> ava:685)
> at java.lang.Thread.run(Thread.java:595)
>
> _______________________________________________
> Seasar-user mailing list
> [E-MAIL ADDRESS DELETED]
> https://ml.seasar.org/mailman/listinfo/seasar-user
>
Seasar-user メーリングリストの案内