JXL导出excel时,报java.net.SocketException: Socket closed
求救各位大神,本地执行没有问题,到生产环境中就报这个问题,数据量是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();
}
}