servlet下載異常:
ClientAbortException: java.io.IOException
今天在搞下載(svn下載和本地下載),發(fā)現(xiàn)下面幾個(gè)問題:
1,彈出下載框,取消之后,再下載就會報(bào)錯(cuò)
2,正常下載,使用迅雷,經(jīng)常下載到一點(diǎn)點(diǎn)就報(bào)錯(cuò),要么直接是無法建立連接
3,圖片文件直接用ie下載打開沒問題
網(wǎng)上搜了好多,沒人解決,自己做了很多嘗試都是時(shí)好時(shí)壞。。。最后從這兒找到了一些靈感。
最后終于搞定了,問題出在Tomcat的connectionTimeout(網(wǎng)絡(luò)連接超時(shí)時(shí)間毫秒數(shù)),就是這個(gè)東西。仔細(xì)想想確實(shí)是,
當(dāng)你從ie直接打開下載鏈接,排除你的網(wǎng)絡(luò)很慢慢的情況,2(connectionTimeout默認(rèn)2000毫秒)秒一般是可以的(而且我是本地測試的)。
但是用迅雷下載時(shí),從點(diǎn)擊下載...啟動迅雷...準(zhǔn)備...建立鏈接...開始下載。如果網(wǎng)速不好,尤其本地測試用這種網(wǎng)絡(luò)下載工具,2秒就不夠了。
我將connectionTimeout改大了點(diǎn),改成3秒,就沒問題了,想怎么下怎么下。。。。。。
貼出異常代碼:
- ClientAbortException: java.io.IOException
- at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:406)
- at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:371)
- at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:431)
- at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:419)
- [10-09 15:25:28][]-[UI.FileManage.OnlineFileManagerServlet.localDownloadFile(OnlineFileManagerServlet.java:183)] -INFO -OutputStream flushed error:null
- at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:91)
- at UI.FileManage.OnlineFileManagerServlet.localDownloadFile(OnlineFileManagerServlet.java:178)
- at UI.FileManage.OnlineFileManagerServlet.processRequest(OnlineFileManagerServlet.java:116)
- at UI.FileManage.OnlineFileManagerServlet.doGet(OnlineFileManagerServlet.java:614)
- at javax.servlet.http.HttpServlet.service(HttpServlet.java:621)
- at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
- at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:305)
-
- at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:210)
- at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:222)
- at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:123)
- at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:502)
- at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:171)
- at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:99)
- at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:953)
- at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:118)
- at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:408)
- at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1023)
- at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:589)
- at org.apache.tomcat.util.net.AprEndpoint$SocketProcessor.run(AprEndpoint.java:1852)
-
- at java.util.concurrent.ThreadPoolExecutor$Worker.runTask(ThreadPoolExecutor.java:886)
- at java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:908)
- at java.lang.Thread.run(Thread.java:662)
- Caused by: java.io.IOException
- at org.apache.coyote.http11.InternalAprOutputBuffer.flushBuffer(InternalAprOutputBuffer.java:205)
- at org.apache.coyote.http11.InternalAprOutputBuffer.access$100(InternalAprOutputBuffer.java:37)
- at org.apache.coyote.http11.InternalAprOutputBuffer$SocketOutputBuffer.doWrite(InternalAprOutputBuffer.java:235)
- at org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:84)
- at org.apache.coyote.http11.AbstractOutputBuffer.doWrite(AbstractOutputBuffer.java:192)
- at org.apache.coyote.Response.doWrite(Response.java:517)
- at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:401)
- ... 25 more
|