ClientAbortException .. socket write error 问题

   今天在开发web pdf打印时,servlet往客户端写数据时,遇到这么个问题:

Caused by: ClientAbortException:  java.net.SocketException: Software caused connection abort: socket write error
	at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:406)
	at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:480)
	at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:310)
	at org.apache.catalina.connector.OutputBuffer.writeByte(OutputBuffer.java:450)
	at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:77)
	at com.cnpc.print.PrintServlet.doPost(PrintServlet.java:83)
	... 25 more
Caused by: java.net.SocketException: Software caused connection abort: socket write error
	at java.net.SocketOutputStream.socketWrite0(Native Method)
	at java.net.SocketOutputStream.socketWrite(SocketOutputStream.java:113)
	at java.net.SocketOutputStream.write(SocketOutputStream.java:159)
	at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:215)
	at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:480)
	at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:366)
	at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:240)
	at org.apache.coyote.http11.filters.ChunkedOutputFilter.doWrite(ChunkedOutputFilter.java:119)
	at org.apache.coyote.http11.AbstractOutputBuffer.doWrite(AbstractOutputBuffer.java:192)
	at org.apache.coyote.Response.doWrite(Response.java:517)
	at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:401)
	... 30 more

现象是,勾选6行数据,点打印就没有响应了,把窗口关掉时,服务器后台报上面的错,勾5行数据就没问题,怀疑几个地方可能存在问题:

  1. 往socket写PDF数据时,PDF数据有问题。(不向socket写,改成写文件,文件内容正常,排除。)

  2. 页面请求PDF时是用layer.js的iframe弹窗方式,勾选多行时url参数太长。(改为弹窗后执行一段js提交form,参数放到form中,还是报错,排除。)

  3. ie打开PDF流有问题。(改为下载文件形式,问题依旧存在。排除。)

最后,发现就是问题2.导致的,原来是把勾选的数据的所有列序列成json后后台传,改为只传id列,数据减少了很多,没问题了,但是明明被我排除了的,不明白,靠。

相关文章
相关标签/搜索