日期:2014-05-17  浏览次数:20630 次

输出流下载问题? Socket closed
项目为struts2+spring+ibatis前台为extjs
页面有导出功能, 可将数据导到excel中, 并下载
但遇到个问题
如果导出的数据过多(超过1000条), 当使用ie浏览器点导出按钮后, 页面弹出下载提示(有打开、保存功能)
此时不进行操作
大概过1分钟左右的时间, 控制台会报出如下异常:
Java code

<2011-11-24 上午08时50分47秒 GMT> <Error> <HTTP> <BEA-101017> <[weblogic.servlet.internal.WebAppServletContext@ee9368 - appName: '_appsdir_SEC_dir', name: 'SEC', context-path: '/SEC'] Root cause of ServletException.
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:525)
    at weblogic.servlet.internal.ChunkOutput.writeChunks(ChunkOutput.java:504)
    at weblogic.servlet.internal.ChunkOutput.flush(ChunkOutput.java:382)
    Truncated. see log file for complete stacktrace


出现异常后点打开后 excel会提示文件损坏 此时打开的excel文件仅有少量数据 而且excel表格内的文字样式也不对

但使用firefox浏览器则没有此类问题。

java中的导出代码片段:
Java code

this.getResponse().setHeader("Cache-Control", "no-cache");
this.getResponse().setDateHeader("Expires", 0);
this.getResponse().setContentType("application/vnd.ms-excel;charset=UTF-8");
this.getResponse().setHeader("Content-Disposition", "attachment;filename=" + new String((title + ".xls").getBytes("GBK"), "iso8859-1"));

WritableWorkbook workbook = Workbook.createWorkbook(this.getResponse().getOutputStream());

// ......excel表格内文字边框等样式 此处省略
// ......查数据库 遍历list往表格内写数据 此处省略

workbook.write();
workbook.close();



问题不大, 可以不解决, 但想求一个真相…… 知道的朋友帮帮忙

------解决方案--------------------
可能weblogic有超时设置吧,可以把项目放到tomcat或其它容器中同样测试一下
------解决方案--------------------
修改weblogic的StuckThreadMaxTime参数,将默认的600s改成1200s或者其它适合的值,看看行不行?

如不行的话。。看看下面的博文也许能解决你的问题:
http://www.blogjava.net/86mang/archive/2011/08/16/356647.html
------解决方案--------------------
基本可以确定和weblogic有关。。。LZ网上搜一下 都是weblogic遇到这个问题。。。