首页新闻找找看学习计划

java在导出excel报表的过程中报错: Socket closed

0
悬赏园豆:15 [已解决问题] 解决于 2017-09-28 17:00

并不是每一场导出excel都报错,只是偶尔。然后导出的excel表无法打开,也无法修复。

/**生成报表*/
String filename = "报表"+TimeUtil.getCurrentTime()+".xls";

try {
filename = new String(filename.getBytes("GBK"), "ISO-8859-1");
} catch (UnsupportedEncodingException e) {
logger.error("下载报表无效字符集");
}
response.addHeader("Content-Disposition", "attachment;filename="+filename);
response.setContentType("application/octet-stream");
OutputStream outputStream = null;
try {
outputStream = response.getOutputStream();
wb.write(outputStream);//------报错行--
outputStream.flush();
outputStream.close();
} catch (IOException e) {
logger.error("下载报表异常:",e);
}finally{
try {
if(outputStream!=null){
outputStream.close();
}
} catch (IOException e) {
logger.error("下载报表流关闭异常");
}
}

 

下面是报错信息:

java.net.SocketException: Socket closed
at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:99)
at java.net.SocketOutputStream.write(SocketOutputStream.java:136)
at weblogic.servlet.internal.ChunkOutput.writeChunkTransfer(ChunkOutput.java:568)
at weblogic.servlet.internal.ChunkOutput.writeChunks(ChunkOutput.java:539)
at weblogic.servlet.internal.ChunkOutput.flush(ChunkOutput.java:427)
at weblogic.servlet.internal.CharsetChunkOutput.flush(CharsetChunkOutput.java:298)
at weblogic.servlet.internal.ChunkOutput$2.checkForFlush(ChunkOutput.java:648)
at weblogic.servlet.internal.CharsetChunkOutput.write(CharsetChunkOutput.java:200)
at weblogic.servlet.internal.ChunkOutputWrapper.write(ChunkOutputWrapper.java:148)
at weblogic.servlet.internal.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:148)
at java.io.OutputStream.write(OutputStream.java:58)
at org.apache.poi.poifs.storage.BigBlock.doWriteData(BigBlock.java:67)
at org.apache.poi.poifs.storage.DocumentBlock.writeData(DocumentBlock.java:195)
at org.apache.poi.poifs.storage.BigBlock.writeBlocks(BigBlock.java:98)
at org.apache.poi.poifs.storage.DocumentBlock.writeBlocks(DocumentBlock.java:34)
at org.apache.poi.poifs.filesystem.POIFSDocument$BigBlockStore.writeBlocks(POIFSDocument.java:547)
at org.apache.poi.poifs.filesystem.POIFSDocument.writeBlocks(POIFSDocument.java:303)
at org.apache.poi.poifs.filesystem.POIFSFileSystem.writeFilesystem(POIFSFileSystem.java:385)
at org.apache.poi.hssf.usermodel.HSSFWorkbook.write(HSSFWorkbook.java:1232)

luoshifu的主页 luoshifu | 初学一级 | 园豆:80
提问于:2017-09-27 11:30
< >
分享
最佳答案
0

其实就是网速太慢,response的时候,自动关闭了。

luoshifu | 初学一级 |园豆:80 | 2017-09-28 16:59
其他回答(1)
0

参考:http://blog.csdn.net/cyp331203/article/details/44814245

收获园豆:15
金琥 | 园豆:2540 (老鸟四级) | 2017-09-27 14:15

看不懂

支持(0) 反对(0) luoshifu | 园豆:80 (初学一级) | 2017-09-27 14:48

@luoshifu: 该异常在客户端和服务器均可能发生。异常的原因是己方主动关闭了连接后(调用了Socket的close方法)再对网络连接进行读写操作。

转自:http://developer.51cto.com/art/201003/189724.htm

支持(0) 反对(0) 金琥 | 园豆:2540 (老鸟四级) | 2017-09-27 14:57

@金琥: 唉,其实我知道是socket关闭的问题,但是就是不知道哪里什么时候关闭的?分析了代码,并没有发现什么,而且在生产上使用一直没有问题,恩,大概是两三个月出一次这样的问题,偶然性的,出现问题,重新下载又没事了

支持(0) 反对(0) luoshifu | 园豆:80 (初学一级) | 2017-09-27 15:26
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册