恩達

          可愛的兒子--陽陽坨

            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理 ::
            43 隨筆 :: 14 文章 :: 55 評論 :: 0 Trackbacks

          在文件下載的servlet的doGet方法中寫有如下代碼:
            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();
                  }

          在前臺執行文件下載時,如果點IE出來后的文件下載提示框中的“取消”會出來如下的異常。請問該如何捕獲?使之不在后臺報此錯誤
          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

          在網上查了很多相關信息,還是沒找到具體辦法。有哪位高人指點一下?

          posted on 2007-06-13 15:33 恩達 閱讀(18274) 評論(7)  編輯  收藏 所屬分類: JAVA

          評論

          # re: ClientAbortException: java.io.IOException異常該如何捕獲?[未登錄] 2007-06-13 16:27 Jonney
          給Tomcat增加APR支持之后就不會出現了。
          http://tomcat.apache.org/tomcat-5.5-doc/apr.html  回復  更多評論
            

          # re: ClientAbortException: java.io.IOException異常該如何捕獲? 2007-06-13 17:12 恩達
          現運行的tomcat是有apr支持的,同樣還是有這個問題  回復  更多評論
            

          # re: ClientAbortException: java.io.IOException異常該如何捕獲? 2007-06-13 22:19 lizongbo
          加個過濾器,在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);
          }
          }

            回復  更多評論
            

          # re: ClientAbortException: java.io.IOException異常該如何捕獲? 2007-07-06 16:07 大灰狼
          我也遇到過,但問題不是出現在這,也不知怎么解決的~  回復  更多評論
            

          # re: ClientAbortException: java.io.IOException異常該如何捕獲? 2007-07-06 20:51 恩達
          對代碼進行了處理,避免了這個問題的出現,讓其在日志里提示錯誤信息  回復  更多評論
            

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

          # re: ClientAbortException: java.io.IOException異常該如何捕獲? 2015-10-30 14:56 mk
          也遇到同樣的問題,發現是由于迅雷下載打斷了正常的下載,后臺報出這個錯誤  回復  更多評論
            

          主站蜘蛛池模板: 科技| 玉屏| 防城港市| 祁门县| 浦城县| 凤台县| 太保市| 旌德县| 宜宾市| 唐山市| 建始县| 宜州市| 南郑县| 襄垣县| 梅河口市| 岳池县| 彭山县| 峨山| 喀什市| 尤溪县| 康平县| 唐山市| 平塘县| 正安县| 连城县| 容城县| 兴隆县| 南岸区| 穆棱市| 南木林县| 龙川县| 漠河县| 化州市| 文安县| 定陶县| 芦山县| 洛隆县| 清河县| 徐汇区| 苍南县| 田阳县|