[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 メーリングリストの案内