- PR -

ファイルダウンロードのキャンセルを知りたいのですが、、

1
投稿者投稿内容
Taitsu
会議室デビュー日: 2005/02/03
投稿数: 3
投稿日時: 2005-02-03 13:18
Webエンジニア経験半年のペーペーです。
現在ファイラーを作成しています。
FilterとDefaultServletを使用し、requestによってDefaultServletがserviceを使ってファイルをダウンロードします。ファイルアクセスをlogで管理しているので、ダウンロードのキャンセルを知りたいのです。
開発環境ではClientAbortExeptionが出るのでダウンロードキャンセルが解りました。
運用環境では出ないのでダウンロードキャンセルを把握することが出来ません。
ちがいはOSのみです。なぜでしょうか。。。

以下に環境を記します。
開発環境[tomcat4.1.30,j2sdk1.4.2_04,InternetExplorer6_sp2,WindowsXP(home)]
運用環境[tomcat4.1.30,j2sdk1.4.2_04,InternetExplorer6_sp2,FedraLinux core2.0]


ClientAbortExeptionの内容を記述します。
ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error
at org.apache.coyote.tomcat4.OutputBuffer.realWriteBytes(OutputBuffer.java:410)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:436)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:356)
at org.apache.coyote.tomcat4.OutputBuffer.writeBytes(OutputBuffer.java:438)
at org.apache.coyote.tomcat4.OutputBuffer.write(OutputBuffer.java:425)
at org.apache.coyote.tomcat4.CoyoteOutputStream.write(CoyoteOutputStream.java:108)
at org.apache.catalina.servlets.DefaultServlet.copyRange(DefaultServlet.java:2126)
at org.apache.catalina.servlets.DefaultServlet.copy(DefaultServlet.java:1871)
at org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:985)
at org.apache.catalina.servlets.DefaultServlet.doGet(DefaultServlet.java:448)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:740)
at businessTrust.AuthenticationCheckServlet.service(AuthenticationCheckServlet.java:80)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at businessTrust.AuthenticationFilter.doFilter(AuthenticationFilter.java:177)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:213)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2422)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:171)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:163)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:641)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline$StandardPipelineValveContext.invokeNext(StandardPipeline.java:643)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:480)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:995)
at org.apache.coyote.tomcat4.CoyoteAdapter.service(CoyoteAdapter.java:199)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:828)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:700)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:584)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:683)
at java.lang.Thread.run(Thread.java:534)

宜しくお願い致します。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-02-03 13:22
ソケットの切断(ブラウザでのダウンロードキャンセル)でjava.net.SocketException が発生するのは OS に関わらず同じだと思います。
本番環境は間プロキシが入っていて、プロキシがまずファイルを丸々ダウンロードし終わっている、ということはないでしょうか?
Taitsu
会議室デビュー日: 2005/02/03
投稿数: 3
投稿日時: 2005-02-03 13:36
インギ様

早速のご返答有難う御座います。
はじめに記述していなかったのですが、運用環境はApachで受けてTomcatに処理を渡しています。
Apachがプロキシの役割をしているか試す為に、":8080"で直接Tomcatにアクセスしたのですが、やはりダウンロードキャンセルを把握するにいたりませんでした。
これ以外にプロキシは入っていません。

山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-02-03 16:44
ネットワークのトレースをとってどのようにパケットが流れているか確認してみてはいかがでしょうか?
ブラウザでダウンロードをキャンセルすれば RST が送られるのが確認できるとおもいます。
Taitsu
会議室デビュー日: 2005/02/03
投稿数: 3
投稿日時: 2005-02-03 17:10
インギ様
パケット中からRSTを確認しました。
どうやらアパッチが受け取っている模様です。
システムの設定にURLを持っていたので、こちらも":8080"に直しました。
ようやくIOExceptionを受け取ることが出来ました。
私の確認漏れです。申し訳ありません。
有難う御座いました。
山本 裕介
ぬし
会議室デビュー日: 2003/05/22
投稿数: 2415
お住まい・勤務地: 恵比寿
投稿日時: 2005-02-03 17:25
なるほど。
つまり Apache を介すかどうかが再現性に絡んでいるということですね。
あとは Apache を介しているときに Apache - Tomcat 間のパケットをとれば Tomcat から見てキャンセルされている(=RST が送られて切断されている)かどうかわかりますね。
#やはり Apache ががばっと受信しているんでしょう
1

スキルアップ/キャリアアップ(JOB@IT)