首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > JAVA > Java Web开发 >

java itext导出报Connection reset by peer: socket write error,该怎么处理

2012-10-18 
java itext导出报Connection reset by peer: socket write errorJava codepublic static void createRepor

java itext导出报Connection reset by peer: socket write error

Java code
public static void createReport(HttpServletRequest request,            HttpServletResponse response, List<Diary> list) throws Exception{        String title = null;           if(list.size() != 0){               title = list.get(list.size() - 1).getCreateDate() + " ~ " + list.get(0).getCreateDate() + "日志";           }           System.out.println(title);        //设置文件响应信息        String showFileName =URLEncoder.encode(title + ".doc", "UTF-8");        showFileName = new String(showFileName.getBytes("iso8859-1"), "gb2312");        //定义输出类型        response.reset();        response.setContentType("application/vnd.ms-word;charset=utf-8");        response.setHeader("Pragma", "public");        response.setHeader("Cache-Control", "max-age=30");        response.setHeader("Content-disposition", "attachment; filename="+ new String(showFileName.getBytes("gb2312"), "iso8859-1"));        Document doc=new Document(PageSize.A4,50,50,50,50);        ByteArrayOutputStream byteArrayOutputStream=new ByteArrayOutputStream();        RtfWriter2.getInstance(doc, byteArrayOutputStream);        doc.open();               //添加标题        Paragraph paragraph=new Paragraph(title,ReportFontFactory.getFontChinese(Font_Type.TITLE));        paragraph.getFont().setColor(230, 20, 220);        paragraph.getFont().setSize(18);        paragraph.setAlignment(Paragraph.ALIGN_CENTER);        doc.add(paragraph);        for(Diary d : list){            doc.add(new Paragraph());            Paragraph p = new Paragraph("        标题:" + d.getTitle()+"        类型:" + d.getType()+"        天气:" + d.getWeather() +"        日期:" + d.getCreateDate());            p.getFont().setStyle(Font.BOLD);            p.getFont().setColor(100, 0, 0);            doc.add(p);            doc.add(new Paragraph("    " + d.getContent()));        }        doc.close();        ServletOutputStream outputStream=response.getOutputStream();        byteArrayOutputStream.writeTo(outputStream);        outputStream.flush();        outputStream.close();    }


[解决办法]
这个问题网上有很多解决的方法,但是都局限于这几种:

 

1:服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉;

2:客户关掉了浏览器,而服务器还在给客户端发送数据;

3:浏览器端按了Stop;

4:服务器给客户端响应结果给防火墙拦截了。

但是我排查了很久都还是找不到原因,刚开始以为是连接池的原因,搞了好几种连接池都还是这样,无奈只能把这个问题放下,但是每天看到都是很心烦,今天终于又鼓起勇气来排查这个问题,首先是写了一个打印,发现每次访问首页,这个打印始终执行很多次,后来终于把错误来源锁定到了一段自动载入图片的代码中,终于才发现我在web.xml中配置了404跳转到首页,而首页有一张图片丢失了,所以浏览器在载入这个图片的时候,服务器又会抛出404错误,然后转向到首页,而首页又找不到这个图片,就继续抛出404,就陷入了一个死循环,这样就是为什么一段打印代码会执行很多次的原因了。当这个死循环达到一定深度,就会触发上面第一个原因:服务器的并发数超过了其承载量,然后就会自动Down掉这些进程。

希望对遇到同样问题的同学有所帮助。

心得:在遇到问题的时候,不能把思路只放在局部,而要善于用联系的眼光来分析。

热点排行