恩達(dá)

          可愛(ài)的兒子--陽(yáng)陽(yáng)坨

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            43 隨筆 :: 14 文章 :: 55 評(píng)論 :: 0 Trackbacks

          在文件下載的servlet的doGet方法中寫(xiě)有如下代碼:
            response.setContentType(responseType);
                //  response.setHeader("Content-Disposition", "filename=" + fileName);
                  response.setHeader( "Content-Disposition", "attachment;filename="  + new String( fileName.getBytes("gb2312"), "ISO8859-1" ) );

                  OutputStream out = null;
                  InputStream blobIn = null;
                  try
                  {
                      out = response.getOutputStream();
                      if (blob != null)
                      {
                          blobIn = blob.getBinaryStream();

                          int readCount;
                          byte[] bOut = new byte[4096];

                          while ((readCount = blobIn.read(bOut, 0, 4096)) > 0)
                          {
                           blobIn.available();
                              out.write(bOut, 0, readCount);
                          }
                          blobIn.close();
                      }
                  }        
                
                  catch (Exception e)
                  {          
                   e.printStackTrace();
                  }
                  finally{
                   if(blobIn != null)
                    blobIn.close();
                   if(out != null)
                    out.close();
                  }

          在前臺(tái)執(zhí)行文件下載時(shí),如果點(diǎn)IE出來(lái)后的文件下載提示框中的“取消”會(huì)出來(lái)如下的異常。請(qǐng)問(wèn)該如何捕獲?使之不在后臺(tái)報(bào)此錯(cuò)誤
          ClientAbortException:  java.io.IOException
           at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358)
           at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434)
           at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:349)
           at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:381)
           at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:370)
           at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
           at com.wsoft.application.poststation.service.DownloadFileService.doGet(DownloadFileService.java:118)
           at javax.servlet.http.HttpServlet.service(HttpServlet.java:690)
           at javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
           at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
           at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
           at com.wsoft.application.poststation.service.HibernateAndJbpmSessionFilter.doFilter(HibernateAndJbpmSessionFilter.java:43)
           at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
           at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
           at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:228)
           at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:175)
           at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
           at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
           at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
           at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:216)
           at org.apache.coyote.http11.Http11AprProcessor.process(Http11AprProcessor.java:866)
           at org.apache.coyote.http11.Http11AprProtocol$Http11ConnectionHandler.process(Http11AprProtocol.java:716)
           at org.apache.tomcat.util.net.AprEndpoint$Worker.run(AprEndpoint.java:1498)
           at java.lang.Thread.run(Thread.java:595)
          Caused by: java.io.IOException
           at org.apache.coyote.http11.InternalAprOutputBuffer.flushBuffer(InternalAprOutputBuffer.java:692)
           at org.apache.coyote.http11.InternalAprOutputBuffer$SocketOutputBuffer.doWrite(InternalAprOutputBuffer.java:722)
           at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:126)
           at org.apache.coyote.http11.InternalAprOutputBuffer.doWrite(InternalAprOutputBuffer.java:528)
           at org.apache.coyote.Response.doWrite(Response.java:560)
           at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353)
           ... 23 more

          在網(wǎng)上查了很多相關(guān)信息,還是沒(méi)找到具體辦法。有哪位高人指點(diǎn)一下?

          posted on 2007-06-13 15:33 恩達(dá) 閱讀(18276) 評(píng)論(7)  編輯  收藏 所屬分類(lèi): JAVA

          評(píng)論

          # re: ClientAbortException: java.io.IOException異常該如何捕獲?[未登錄](méi) 2007-06-13 16:27 Jonney
          給Tomcat增加APR支持之后就不會(huì)出現(xiàn)了。
          http://tomcat.apache.org/tomcat-5.5-doc/apr.html  回復(fù)  更多評(píng)論
            

          # re: ClientAbortException: java.io.IOException異常該如何捕獲? 2007-06-13 17:12 恩達(dá)
          現(xiàn)運(yùn)行的tomcat是有apr支持的,同樣還是有這個(gè)問(wèn)題  回復(fù)  更多評(píng)論
            

          # re: ClientAbortException: java.io.IOException異常該如何捕獲? 2007-06-13 22:19 lizongbo
          加個(gè)過(guò)濾器,在doFilter里catch IOException 即可.

          //Process the request/response pair
          public void doFilter(ServletRequest request, ServletResponse response,
          FilterChain filterChain) {
          try {
          request.setCharacterEncoding("UTF-8");
          response.setCharacterEncoding("UTF-8");
          filterChain.doFilter(request, response);
          }
          catch (java.io.IOException ex) {
          //ClientAbortException是IOException
          log.error(request.getRemoteAddr() + " io error : " + ex);
          }
          catch (Throwable t) {
          log.error("CommonFilter", t);
          }
          }

            回復(fù)  更多評(píng)論
            

          # re: ClientAbortException: java.io.IOException異常該如何捕獲? 2007-07-06 16:07 大灰狼
          我也遇到過(guò),但問(wèn)題不是出現(xiàn)在這,也不知怎么解決的~  回復(fù)  更多評(píng)論
            

          # re: ClientAbortException: java.io.IOException異常該如何捕獲? 2007-07-06 20:51 恩達(dá)
          對(duì)代碼進(jìn)行了處理,避免了這個(gè)問(wèn)題的出現(xiàn),讓其在日志里提示錯(cuò)誤信息  回復(fù)  更多評(píng)論
            

          # re: ClientAbortException: java.io.IOException異常該如何捕獲? 2008-10-21 17:36 fdz
          我也遇到了同樣的問(wèn)題,但不知道怎么解決  回復(fù)  更多評(píng)論
            

          # re: ClientAbortException: java.io.IOException異常該如何捕獲? 2015-10-30 14:56 mk
          也遇到同樣的問(wèn)題,發(fā)現(xiàn)是由于迅雷下載打斷了正常的下載,后臺(tái)報(bào)出這個(gè)錯(cuò)誤  回復(fù)  更多評(píng)論
            

          主站蜘蛛池模板: 清丰县| 前郭尔| 寿阳县| 苏尼特左旗| 连平县| 故城县| 宜春市| 双桥区| 娱乐| 体育| 综艺| 怀来县| 文登市| 井冈山市| 屏南县| 政和县| 济阳县| 瑞昌市| 友谊县| 朔州市| 西吉县| 大新县| 阜新市| 大方县| 鞍山市| 揭东县| 东乌| 海安县| 湘阴县| 多伦县| 榕江县| 台东市| 清水河县| 永州市| 高雄县| 临武县| 无为县| 泰宁县| 上思县| 崇仁县| 大城县|