【ClientAbortException】ClientAbortException: java.net.SocketException

ClientAbortException:  java.net.SocketException: Connection reset by peer: socket write error

一.异常说明:

用JFreeChart 往浏览器输出图表图片时,如果刷新太快,就有如下异常

ClientAbortException:  java.net.SocketException: Connection reset by peer: socket write error

代码如下:

 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.flushBuffer(ByteChunk.java:434)            
 at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:349)            
 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 javax.imageio.stream.FileCacheImageOutputStream.flushBefore(FileCacheImageOutputStream.java:230)            
 at javax.imageio.stream.ImageInputStreamImpl.flush(ImageInputStreamImpl.java:811)            
 at com.sun.imageio.plugins.jpeg.JPEGImageWriter.write(JPEGImageWriter.java:1027)            
 at org.jfree.chart.encoders.SunJPEGEncoderAdapter.encode(SunJPEGEncoderAdapter.java:173)            
 at org.jfree.chart.encoders.EncoderUtil.writeBufferedImage(EncoderUtil.java:137)            
 at org.jfree.chart.ChartUtilities.writeChartAsJPEG(ChartUtilities.java:443)            
 at org.jfree.chart.ChartUtilities.writeChartAsJPEG(ChartUtilities.java:389)            

Caused by: java.net.SocketException: Connection reset by peer: socket write error            
 at java.net.SocketOutputStream.socketWrite0(Native Method)           
 at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:92)           
 at java.net.SocketOutputStream.write(SocketOutputStream.java:136)           
 at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:741)           
 at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:434)           
 at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:349)           
 at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:765)           
 at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:126)           
 at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:574)           
 at org.apache.coyote.Response.doWrite(Response.java:560)           
 at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:353)           
 ... 47 more           
 

二.原因分析

在BAIDU找了下原因,大概归结为:
ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error的原因是由于处理http连接时,正在输出内容时,用户关闭了IE,会出现一个"ClientAbortException",属于I/O处理中出现的一个异常,应用服务器应该会捕捉。
Connection reset by peer的原因:
经常出现的Connection reset by peer: 原因可能是多方面的,不过更常见的原因是:
①:服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉;
②:客户关掉了浏览器,而服务器还在给客户端发送数据;
③:浏览器端按了Stop
很多人都说是客户端造成的,没有办法控制,是个比较郁闷的问题。
 

但是有个哥们说的很好,如果ClientAbortException:是可以不输出这些异常

具体办法

Code:
 try {   
  
   //处理代码放在try……catch块中,在catch部分使用判断避免让系统抛出ClientAbortException,   
  
ChartUtilities.writeChartAsJPEG(response.getOutputStream(), chart, 600, 400);   
  
  } catch (Exception e) {   
   String simplename = e.getClass().getSimpleName();      
      if("ClientAbortException".equals(simplename)){      
            System.out.println("客户端刷新太快了");   
       }else    
       e.printStackTrace();   
  
  }   
  return  mapping.findForward("succ");   
 }   
  
    
 

三.结论

这样做是可以的。

 
————————————————
版权声明:本文为CSDN博主「和平强大平和」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/welcomeni/article/details/6505668

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值