`

ajax下载文档 ClientAbortException: java.net.SocketException: Connection reset by pee

阅读更多

众所周知ajax是使用了浏览器内部的XmlHttpRequest对象来传输XML数据的。既然是Xml的数据传输,那么传输的数据肯定是文本的,而文件上传则需要传输二进制的数据,显然用ajax是不可能的。

这里要说的是用ajax上传文件其实只是类似ajax的那种操作,实际上并没有用到xmlhttprequest对象。从网上找到模拟form提交的方式实现此功能,如下所示:

 

    var form = $("<form>");   //定义一个form表单
    form.attr('style','display:none');   //在form表单中添加查询参数
    form.attr('target','');
    form.attr('method','post');
    form.attr('action',_url);
    $('body').append(form);  //将表单放置在web中
    form.submit();   //表单提交

 然而这种方式在火狐和IE8中都能正常运行,只有在IE6下总是报如下错误:

 

ClientAbortException: java.net.SocketException: Connection reset by peer: socket write error
at org.apache.catalina.connector.OutputBuffer.realWri teBytes(OutputBuffer.java:366)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(B yteChunk.java:403)
at org.apache.catalina.connector.OutputBuffer.doFlush (OutputBuffer.java:311)
at org.apache.catalina.connector.OutputBuffer.flush(O utputBuffer.java:293)
at org.apache.catalina.connector.Response.flushBuffer (Response.java:534)
at org.apache.catalina.core.StandardHostValve.status( StandardHostValve.java:285)
at org.apache.catalina.core.StandardHostValve.invoke( StandardHostValve.java:136)
at org.apache.catalina.valves.ErrorReportValve.invoke (ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invok e(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.servic e(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(H ttp11Processor.java:825)
at org.apache.coyote.http11.Http11Protocol$Http11Conn ectionHandler.processConnection(Http11Protocol.jav a:743)
at org.apache.tomcat.util.net.PoolTcpEndpoint.process Socket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThr ead.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlR unnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)

 上网找引起这个错误的原因归纳如下:

①:服务器的并发连接数超过了其承载量,服务器会将其中一些连接Down掉;
②:客户关掉了浏览器,而服务器还在给客户端发送数据;
③:浏览器端按了Stop 

 

而很显然我的原因并不符合这三种,应该是与特定的浏览器解析有关,又有解决方法说用IE下载文档时要设置Cache-Control

 

response.addHeader("Cache-Control", "no-transform, max-age=0");

 

但是对于我这种情况也没用,然后我试着在IE6的浏览器里直接输入下载地址能正常下载,说明问题出在form提交这种方式上,于是我改成用iframe直接链接的方式,代码如下:

 

var iframe=$("<iframe style='display:none'>");
$('body').append(iframe);
iframe.attr('src',_url);

 OK,解决了,至于为什么用form提交方式不行,网上有人说原因如下:

 

Stupid ie6.

We found the problem and it is not related with java side of code.

The problem is because of this html statement in jsp:

This statement somehow creates 2 different request with 1 click on ie6, so this makes confusion on java side.

 

分享到:
评论

相关推荐

    org.apache.catalina.connector.ClientAbortException和TOMCAT的日志配置

    问题1:TOMCAT下载文件出错:org.apache.catalina.connector.ClientAbortException. 问题2:TOMCAT记录接收数据大小、发送数据大小和请求处理时间

    POI的学习笔记

    总之,Apache POI是一个强大的库,它极大地简化了在Java应用程序中处理Office文档的任务。通过上述介绍和示例,我们可以看到如何使用POI进行基本的Excel文件读取和数据提取。然而,POI的功能远不止于此,它还支持...

    java-poi-excel-导出20万条记录

    java-poi-excel-导出20万条记录

    解决struts2下载异常的jar包 struts2-sunspoter-stream-1.0.jar

    在struts2中使用result里type="stream"的结果类型时,可以实现文件的下载管理,使用时也是比较顺畅,但是当在“下载提示窗口”中点击“取消按钮”时,总是报出“java.lang.IllegalStateException”异常,异常内容...

    笔记笔记笔记

    根据提供的信息,我们可以总结出以下与Java相关的知识点: ### 1. Spring框架的理解与使用 - **Spring框架**:Spring是一个开源的轻量级Java开发框架,被广泛应用于企业级应用开发之中。它主要提供了依赖注入...

    springmvc提供视频播放功能时,手机端无法正常播放的解决办法

    3. **错误信息**:后台抛出`ClientAbortException`异常,提示为`IOException:null`。 4. **特殊行为**:手机默认浏览器在请求视频时,会同时向后台发送两个请求。 针对这些问题,我们首先排除了一些常见的原因,...

    struts下载

    根据给定的信息,我们可以推断出这段内容主要讨论了如何在Struts框架中实现文件下载功能,特别是关于Struts 1.x版本中的`DownloadAction`类的使用方法及其相关问题的解决策略。下面将对这些内容进行详细解析,并提供...

    Struts2下载文件点击取消出现的异常解决办法(含demo)

    在我们做struts2文件下载的时候,经常会遇到这种问题:点“打开/保存”一切正常,但当我们点击“取消”时,却报一堆的异常(其中包括ClientAbortException异常),非常让人头疼,如何彻底解决呢?附件中使用struts2-...

    struts2-sunspoter-stream-1.0.jar

    在我们做struts2文件下载的时候,经常会遇到这种问题:点“打开/保存”一切正常,但当我们点击“取消”时,却报一堆的异常(其中包括ClientAbortException异常),附件中使用struts2-sunspoter-stream-1.0.jar插件可...

Global site tag (gtag.js) - Google Analytics