我用的的JXL导出,可是当我取消时就出现下列异常,请问怎么解决啊?
ClientAbortException:  java.net.SocketException: Connection reset by peer: socket write error
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:358)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:354)
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 jxl.write.biff.MemoryDataOutput.writeData(MemoryDataOutput.java:107)
at jxl.write.biff.CompoundFile.writeExcelData(CompoundFile.java:505)
at jxl.write.biff.CompoundFile.write(CompoundFile.java:455)
at jxl.write.biff.File.close(File.java:120)
at jxl.write.biff.WritableWorkbookImpl.close(WritableWorkbookImpl.java:447)
at com.akazam.util.ExportExcel.export(ExportExcel.java:51)
at org.apache.jsp.district.exporting_jsp._jspService(exporting_jsp.java:80)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:374)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:342)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:267)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:630)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:436)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:374)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:302)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1085)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:398)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:241)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1196)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
at com.akazam.util.CharacterEncodingFilter.doFilter(CharacterEncodingFilter.java:28)
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:233)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:128)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:286)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:845)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:583)
at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:447)
at java.lang.Thread.run(Unknown Source)
Caused by: java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:740)
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.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:764)
at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:126)
at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:573)
at org.apache.coyote.Response.doWrite(Response.java:560)
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353)
... 45 more

解决方案 »

  1.   

     你的WritableWorkbook、OutputStream都close掉了么?
      

  2.   

    response.reset();
    Vector outter = (Vector) request.getAttribute("outter");
    response.setContentType("application/vnd.ms-excel");
    excel.export(response.getOutputStream(), outter);
    out.clear();
    out = pageContext.pushBody();
    这个就是jsp页面的东西,下面的就是主程序了!
    public void export(OutputStream os, Vector outter) {
    // District dbase = new District();
    content = outter;// 以向量的形式存放所有的记录
    try {
    Vector inner = null;
    String value = "";// 存放在cell中的文本值
    WritableWorkbook workbook = Workbook.createWorkbook(os);// 创建工作薄
    WritableSheet worksheet = workbook.createSheet("record", 0);// 创建第一个工作表,name:工作表名称
    Label label = null;// 用于写入文本内容到工作表中去
    // 开始写入第一行,即标题栏
    for (int i = 0; i < title.length; i++) {
    label = new Label(i, 0, title[i]);// 参数依次代表列数、行数、内容
    worksheet.addCell(label);// 写入单元格
    }
    // 开始写入内容
    for (int i = 0; i < content.size(); i++) {
    inner = (Vector) content.get(i);// 获取一条记录
    for (int j = 0; j < inner.size(); j++) { // 一个一个字段的放入excel中去
    value = (String) inner.get(j);
    label = new Label(j, i + 1, value);
    worksheet.addCell(label);
    }
    }
    workbook.write();
    workbook.close();
    } catch (Exception e) {
    e.printStackTrace();
    } finally {
    try {
    os.close();
    } catch (IOException e) {
    e.printStackTrace();
    }
    }
    }
    另外2楼说的那个我也都关了。
    只要不点[color=#FF0000]取消[/color]程序是不会报错的,这个错误没有影响业务功能!
      

  3.   

    你点击取消了,有时候会爆出异常,是因为你的程序里面由一个地方,也就是list之类的,得到了参数为空,你调试一下,这个我那天刚刚遇到了,也是同样的问题,刚开始没有遇到,突然间发现的,所以处理一下,加一个判断条件就可以了,这个我一看标题,呵呵,应该就是了,