JXL导出excel时,报java.net.SocketException: Socket closed

scjiang_123 2017-07-27 04:19:32
求救各位大神,本地执行没有问题,到生产环境中就报这个问题,数据量是1000多行,列是100多列。

错误信息:
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.writeChunkNoTransfer(ChunkOutput.java:592)
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:201)
at weblogic.servlet.internal.ChunkOutputWrapper.write(ChunkOutputWrapper.java:148)
at weblogic.servlet.internal.ServletOutputStreamImpl.write(ServletOutputStreamImpl.java:148)
at jxl.write.biff.MemoryDataOutput.writeData(MemoryDataOutput.java:108)
at jxl.write.biff.CompoundFile.writeExcelData(CompoundFile.java:507)
at jxl.write.biff.CompoundFile.write(CompoundFile.java:456)
at jxl.write.biff.File.close(File.java:122)
at jxl.write.biff.WritableWorkbookImpl.close(WritableWorkbookImpl.java:457)
at com.capinfo.ps.impl.pPsjgcl.PPsjgclExcelTool.exprotCprExcelNew(PPsjgclExcelTool.java:1910)
at com.capinfo.ps.impl.pPsjgcl.PPsjgclDaoHibernate.daoChuCprExcel(PPsjgclDaoHibernate.java:2169)
at com.capinfo.ps.impl.pPsjgcl.PPsjgclServiceImpl.daoChuCprExcel(PPsjgclServiceImpl.java:1130)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318)
at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196)
at $Proxy916.daoChuCprExcel(Unknown Source)
at com.capinfo.ps.impl.pPsjgcl.PPsjgclAction.exportCprExcelShh(PPsjgclAction.java:1356)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
at java.lang.reflect.Method.invoke(Method.java:597)
at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213)
at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126)
at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617)
at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578)
at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80)
at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923)
at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852)
at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882)
at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:790)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:727)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:821)
at weblogic.servlet.internal.StubSecurityHelper$ServletServiceAction.run(StubSecurityHelper.java:227)
at weblogic.servlet.internal.ServletStubImpl.execute(ServletStubImpl.java:301)
at weblogic.servlet.internal.TailFilter.doFilter(TailFilter.java:27)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
at com.capinfo.web.handler.LoginFilter.doFilter(LoginFilter.java:51)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
at com.capinfo.web.handler.AjaxPostFilter.doFilter(AjaxPostFilter.java:49)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:89)
at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76)
at weblogic.servlet.internal.FilterChainImpl.doFilter(FilterChainImpl.java:57)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61)
at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:109)
at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66)
at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:450)
at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:366)
at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90)
at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83)
at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:380)
at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362)
at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125)
at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:347)
at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:260)
at weblogic.servlet.internal.WebAppServletContext$ServletInvocationAction.run(WebAppServletContext.java:3696)
at weblogic.security.acl.internal.AuthenticatedSubject.doAs(AuthenticatedSubject.java:321)
at weblogic.servlet.internal.WebAppServletContext.execute(WebAppServletContext.java:2179)
at weblogic.servlet.internal.ServletRequestImpl.run(ServletRequestImpl.java:1490)
at weblogic.work.ExecuteThread.run(ExecuteThread.java:221)

代码:
java.io.OutputStream os = null;
jxl.write.WritableWorkbook wwb = null;
String exportFileName = "aaaa.xls";

try {
// 导出时中文文件名为乱码的问题解决
String encoding = request.getCharacterEncoding();
exportFileName = new String(exportFileName.getBytes("GBK"), "iso-8859-1");
response.reset();//在方法的入口参数中添加 HttpServletResponse response,
response.setContentType("application/vnd.ms-excel;charset=GBK");
response.setContentType("application/msexcel");// 设定输出类型
response.setHeader("Content-Disposition", "attachment; filename=" + exportFileName);
// 输出流
os = response.getOutputStream();
// 创建可写工作薄
wwb = jxl.Workbook.createWorkbook(os);
// 创建可写工作表
jxl.write.WritableSheet ws = wwb.createSheet("aaa", 0);
ws.getSettings().setDefaultColumnWidth(18); // 设置列的默认宽度
// ws.getSettings().setProtected(true); //设置只读
// 设置写入字体
jxl.write.WritableFont wf = new jxl.write.WritableFont(jxl.write.WritableFont.ARIAL, 11,
jxl.write.WritableFont.NO_BOLD, false);
// 设置CellFormat
jxl.write.WritableCellFormat wcfF = new jxl.write.WritableCellFormat(wf);
jxl.write.WritableFont wfHeader = new jxl.write.WritableFont(jxl.write.WritableFont.ARIAL, 11,
jxl.write.WritableFont.NO_BOLD, false);
// 设置CellFormat
jxl.write.WritableCellFormat wcfFHeader = new jxl.write.WritableCellFormat(wfHeader);
// 把水平对齐方式指定为左对齐
wcfF.setAlignment(jxl.format.Alignment.LEFT);
wcfF.setBorder(jxl.format.Border.ALL, BorderLineStyle.THIN, jxl.format.Colour.BLACK);// 设置边框
wcfFHeader.setBorder(jxl.format.Border.ALL, BorderLineStyle.THIN, jxl.format.Colour.BLACK);// 设置边框

// 把垂直对齐方式指定为居中对齐
wcfF.setVerticalAlignment(jxl.format.VerticalAlignment.CENTRE);
int count = 0; // 行数
int mergeCell = 0; // 列数
SimpleDateFormat sdg = new SimpleDateFormat("yyyy-MM-dd");
jxl.write.Label labelCF = null;
for (int i = 0; i < daochuZD.size(); i++) {
labelCF = new jxl.write.Label(mergeCell++, 0, daochuZD.get(i), wcfFHeader);
ws.addCell(labelCF);
}
count=1;
for (int i = 0; i < sjlist1.size(); i++) {
mergeCell=0;
for (int j = 0; j < daochuZDValue.size(); j++) {
if (sjlist1.get(i).get(daochuZDValue.get(j)) != null) {
labelCF = new jxl.write.Label(mergeCell++, count,sjlist1.get(i).get(daochuZDValue.get(j)).toString(),wcfFHeader);
}else{
labelCF = new jxl.write.Label(mergeCell++, count,"无",wcfFHeader);
}
ws.addCell(labelCF);
}
count++;
}
try {
wwb.write();
} catch (Exception e) {
e.printStackTrace();
}
} catch (Exception e) {
// TODO Auto-generated catch block
e.printStackTrace();
} finally {
try {
if (wwb != null) {
wwb.close(); //这里是1910行,上方的错误信息说是这报错了(PPsjgclExcelTool.java:1910)
}
if (os != null) {
os.flush();
os.close();
}
} catch (Exception e) {

e.printStackTrace();
}
}
...全文
336 12 打赏 收藏 转发到动态 举报
写回复
用AI写文章
12 条回复
切换为时间正序
请发表友善的回复…
发表回复
scjiang_123 2017-07-31
  • 打赏
  • 举报
回复
引用 11 楼 tianfang 的回复:
[quote=引用 9 楼 scjiang_123 的回复:] 所以前面1楼让你分开做,先把excel文件在服务器上生成,再输出文件。
怎么个分开啊,这个导出是之前人做的,有的我都看不懂。[/quote] // 创建可写工作薄 wwb = jxl.Workbook.createWorkbook(os); 换成 // 创建可写工作薄 wwb = jxl.Workbook.createWorkbook(File ); 后面不变,就写到File中去了 。 http://jexcelapi.sourceforge.net/resources/javadocs/2_6_10/docs/jxl/Workbook.html 这个方法 createWorkbook(java.io.File file) [/quote] 谢谢您这么多的帮助,其实是网速的问题啦,谢谢您。
scjiang_123 2017-07-28
  • 打赏
  • 举报
回复
引用 8 楼 tianfang 的回复:
[quote=引用 6 楼 scjiang_123 的回复:] [quote=引用 5 楼 tianfang 的回复:] 还可以试试: 先关闭os,再关闭wwb
这个我试过了,excel下载下来,文件是损坏的。还有您上边说的那个设置文件大小,可是并不确定文件的大小,因为业务的问题每个导出文件大小都不确定。[/quote] 所以前面1楼让你分开做,先把excel文件在服务器上生成,再输出文件。[/quote] 怎么个分开啊,这个导出是之前人做的,有的我都看不懂。
scjiang_123 2017-07-28
  • 打赏
  • 举报
回复
所以前面1楼让你分开做,先把excel文件在服务器上生成,再输出文件。[/quote] 怎么个分开啊,这个导出是之前人做的,有的我都看不懂。
tianfang 2017-07-28
  • 打赏
  • 举报
回复
引用 9 楼 scjiang_123 的回复:
所以前面1楼让你分开做,先把excel文件在服务器上生成,再输出文件。
怎么个分开啊,这个导出是之前人做的,有的我都看不懂。[/quote] // 创建可写工作薄 wwb = jxl.Workbook.createWorkbook(os); 换成 // 创建可写工作薄 wwb = jxl.Workbook.createWorkbook(File ); 后面不变,就写到File中去了 。 http://jexcelapi.sourceforge.net/resources/javadocs/2_6_10/docs/jxl/Workbook.html 这个方法 createWorkbook(java.io.File file)
tianfang 2017-07-28
  • 打赏
  • 举报
回复
引用 6 楼 scjiang_123 的回复:
[quote=引用 5 楼 tianfang 的回复:] 还可以试试: 先关闭os,再关闭wwb
这个我试过了,excel下载下来,文件是损坏的。还有您上边说的那个设置文件大小,可是并不确定文件的大小,因为业务的问题每个导出文件大小都不确定。[/quote] 所以前面1楼让你分开做,先把excel文件在服务器上生成,再输出文件。
scjiang_123 2017-07-27
  • 打赏
  • 举报
回复
还有就是我本地测试导出1100条数据时,弹出下载框时我点取消,eclipse控制台会报错,导十几条取消就不会报错,错误信息如下: 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:352) 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:456) at com.capinfo.ps.impl.pPsjgcl.PPsjgclExcelTool.exprotCprExcelNew(PPsjgclExcelTool.java:1910) at com.capinfo.ps.impl.pPsjgcl.PPsjgclDaoHibernate.daoChuCprExcel(PPsjgclDaoHibernate.java:2171) at com.capinfo.ps.impl.pPsjgcl.PPsjgclServiceImpl.daoChuCprExcel(PPsjgclServiceImpl.java:1129) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.aop.support.AopUtils.invokeJoinpointUsingReflection(AopUtils.java:318) at org.springframework.aop.framework.JdkDynamicAopProxy.invoke(JdkDynamicAopProxy.java:196) at $Proxy172.daoChuCprExcel(Unknown Source) at com.capinfo.ps.impl.pPsjgcl.PPsjgclAction.exportCprExcelShh(PPsjgclAction.java:1356) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.springframework.web.method.support.InvocableHandlerMethod.invoke(InvocableHandlerMethod.java:213) at org.springframework.web.method.support.InvocableHandlerMethod.invokeForRequest(InvocableHandlerMethod.java:126) at org.springframework.web.servlet.mvc.method.annotation.ServletInvocableHandlerMethod.invokeAndHandle(ServletInvocableHandlerMethod.java:96) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.invokeHandlerMethod(RequestMappingHandlerAdapter.java:617) at org.springframework.web.servlet.mvc.method.annotation.RequestMappingHandlerAdapter.handleInternal(RequestMappingHandlerAdapter.java:578) at org.springframework.web.servlet.mvc.method.AbstractHandlerMethodAdapter.handle(AbstractHandlerMethodAdapter.java:80) at org.springframework.web.servlet.DispatcherServlet.doDispatch(DispatcherServlet.java:923) at org.springframework.web.servlet.DispatcherServlet.doService(DispatcherServlet.java:852) at org.springframework.web.servlet.FrameworkServlet.processRequest(FrameworkServlet.java:882) at org.springframework.web.servlet.FrameworkServlet.doPost(FrameworkServlet.java:789) at javax.servlet.http.HttpServlet.service(HttpServlet.java:637) 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.capinfo.web.handler.LoginFilter.doFilter(LoginFilter.java:50) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at com.capinfo.web.handler.AjaxPostFilter.doFilter(AjaxPostFilter.java:47) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.springframework.web.filter.CharacterEncodingFilter.doFilterInternal(CharacterEncodingFilter.java:88) at org.springframework.web.filter.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:76) at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235) at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:61) at org.apache.shiro.web.servlet.AdviceFilter.executeChain(AdviceFilter.java:108) at org.apache.shiro.web.servlet.AdviceFilter.doFilterInternal(AdviceFilter.java:137) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.apache.shiro.web.servlet.ProxiedFilterChain.doFilter(ProxiedFilterChain.java:66) at org.apache.shiro.web.servlet.AbstractShiroFilter.executeChain(AbstractShiroFilter.java:449) at org.apache.shiro.web.servlet.AbstractShiroFilter$1.call(AbstractShiroFilter.java:365) at org.apache.shiro.subject.support.SubjectCallable.doCall(SubjectCallable.java:90) at org.apache.shiro.subject.support.SubjectCallable.call(SubjectCallable.java:83) at org.apache.shiro.subject.support.DelegatingSubject.execute(DelegatingSubject.java:380) at org.apache.shiro.web.servlet.AbstractShiroFilter.doFilterInternal(AbstractShiroFilter.java:362) at org.apache.shiro.web.servlet.OncePerRequestFilter.doFilter(OncePerRequestFilter.java:125) at org.springframework.web.filter.DelegatingFilterProxy.invokeDelegate(DelegatingFilterProxy.java:346) at org.springframework.web.filter.DelegatingFilterProxy.doFilter(DelegatingFilterProxy.java:259) 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:127) 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:298) at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:857) at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588) at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489) at java.lang.Thread.run(Thread.java:662)
scjiang_123 2017-07-27
  • 打赏
  • 举报
回复
引用 5 楼 tianfang 的回复:
还可以试试: 先关闭os,再关闭wwb
这个我试过了,excel下载下来,文件是损坏的。还有您上边说的那个设置文件大小,可是并不确定文件的大小,因为业务的问题每个导出文件大小都不确定。
tianfang 2017-07-27
  • 打赏
  • 举报
回复
还可以试试: 先关闭os,再关闭wwb
tianfang 2017-07-27
  • 打赏
  • 举报
回复
引用 2 楼 scjiang_123 的回复:
[quote=引用 1 楼 tianfang 的回复:] 把写excel文件和输出文件,分两次完成 输出文件需要文件长度(response设置header),不写完excel文件,文件长度不可知。
不懂不懂,可否具体点[/quote] 你已经设置的header response.setHeader("Content-Disposition", "attachment; filename=" + exportFileName); 增加一个 Content-Length: response.setHeader("Content-Length", fileLength);
feng00~ 2017-07-27
  • 打赏
  • 举报
回复
wwb.close() 前加上 wwb.flush() ,或者直接设置 wwb = null
scjiang_123 2017-07-27
  • 打赏
  • 举报
回复
引用 1 楼 tianfang 的回复:
把写excel文件和输出文件,分两次完成 输出文件需要文件长度(response设置header),不写完excel文件,文件长度不可知。
不懂不懂,可否具体点
tianfang 2017-07-27
  • 打赏
  • 举报
回复
把写excel文件和输出文件,分两次完成 输出文件需要文件长度(response设置header),不写完excel文件,文件长度不可知。

67,512

社区成员

发帖
与我相关
我的任务
社区描述
J2EE只是Java企业应用。我们需要一个跨J2SE/WEB/EJB的微容器,保护我们的业务核心组件(中间件),以延续它的生命力,而不是依赖J2SE/J2EE版本。
社区管理员
  • Java EE
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧