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

victor281004387 2009-08-13 09:08:00
我用以下代码实现文件下载:


<%@ page language="java" pageEncoding="GB18030"%>
<jsp:directive.page import="java.net.URLEncoder"/>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";

//

request.setCharacterEncoding("GB18030");
String srcURL = String.valueOf(request.getAttribute("srcURL"));//资源路径
%>
<html>
<head>
<base href="<%=basePath%>">
</head>

<body>
<%
response.setContentType("application/x-download");
String url = "/upload/"+srcURL;
String fileName = srcURL;
fileName = URLEncoder.encode(fileName, "UTF-8");
response.addHeader("Content-Disposition", "attachment;filename="
+ fileName);
RequestDispatcher rd = application.getRequestDispatcher(url);
rd.forward(request, response);
response.flushBuffer();
out.clear();
out = pageContext.pushBody();
%>
</body>
</html>


下载doc和txt格式的文件还可以,没有报错,可是下载ppt格式的文件他就报如下错误:



java.net.SocketException: Connection reset by peer: socket write error
at java.net.SocketOutputStream.socketWrite0(Native Method)
at java.net.SocketOutputStream.socketWrite(Unknown Source)
at java.net.SocketOutputStream.write(Unknown Source)
at org.apache.coyote.http11.InternalOutputBuffer.realWriteBytes(InternalOutputBuffer.java:750)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:347)
at org.apache.coyote.http11.InternalOutputBuffer$OutputStreamOutputBuffer.doWrite(InternalOutputBuffer.java:773)
at org.apache.coyote.http11.filters.IdentityOutputFilter.doWrite(IdentityOutputFilter.java:118)
at org.apache.coyote.http11.InternalOutputBuffer.doWrite(InternalOutputBuffer.java:583)
at org.apache.coyote.Response.doWrite(Response.java:560)
at org.apache.catalina.connector.OutputBuffer.realWriteBytes(OutputBuffer.java:361)
at org.apache.tomcat.util.buf.ByteChunk.flushBuffer(ByteChunk.java:432)
at org.apache.tomcat.util.buf.ByteChunk.append(ByteChunk.java:347)
at org.apache.catalina.connector.OutputBuffer.writeBytes(OutputBuffer.java:392)
at org.apache.catalina.connector.OutputBuffer.write(OutputBuffer.java:381)
at org.apache.catalina.connector.CoyoteOutputStream.write(CoyoteOutputStream.java:89)
at org.apache.catalina.servlets.DefaultServlet.copyRange(DefaultServlet.java:2083)
at org.apache.catalina.servlets.DefaultServlet.copy(DefaultServlet.java:1796)
at org.apache.catalina.servlets.DefaultServlet.serveResource(DefaultServlet.java:874)
at org.apache.catalina.servlets.DefaultServlet.doGet(DefaultServlet.java:376)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:679)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:461)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:399)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.apache.jsp.mainViews.downloadAction_jsp._jspService(downloadAction_jsp.java:74)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.ApplicationDispatcher.invoke(ApplicationDispatcher.java:679)
at org.apache.catalina.core.ApplicationDispatcher.processRequest(ApplicationDispatcher.java:461)
at org.apache.catalina.core.ApplicationDispatcher.doForward(ApplicationDispatcher.java:399)
at org.apache.catalina.core.ApplicationDispatcher.forward(ApplicationDispatcher.java:301)
at org.apache.struts.action.RequestProcessor.doForward(RequestProcessor.java:1063)
at org.apache.struts.action.RequestProcessor.processForwardConfig(RequestProcessor.java:386)
at org.apache.struts.action.RequestProcessor.process(RequestProcessor.java:229)
at org.apache.struts.action.ActionServlet.process(ActionServlet.java:1194)
at org.apache.struts.action.ActionServlet.doGet(ActionServlet.java:414)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:627)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:729)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:269)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:188)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:172)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:117)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:108)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:174)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:875)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:665)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:528)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:81)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:689)
at java.lang.Thread.run(Unknown Source)


请问有谁知道原因的吗?
...全文
230 5 打赏 收藏 转发到动态 举报
写回复
用AI写文章
5 条回复
切换为时间正序
请发表友善的回复…
发表回复
phh1989 2009-08-20
  • 打赏
  • 举报
回复
mark!
crazyboy52055 2009-08-15
  • 打赏
  • 举报
回复
ding...
victor281004387 2009-08-13
  • 打赏
  • 举报
回复
[Quote=引用 1 楼 java2000_net 的回复:]
<html>
    <head>
      <base href=" <%=basePath%>">
    </head>

    <body>

这些都是啥东西啊?既然是下载,把他们删除吧!
另外,加上一行
out.clearBuffer();
[/Quote]

加了out.clearBuffer();也不行哦,还有,我忘了说,我下载ppt的时候是按了“取消”才会报错的,正常下载的话是不会报错的
victor281004387 2009-08-13
  • 打赏
  • 举报
回复

<%@ page language="java" pageEncoding="GB18030"%>
<jsp:directive.page import="java.net.URLEncoder"/>
<%
String path = request.getContextPath();
String basePath = request.getScheme() + "://"
+ request.getServerName() + ":" + request.getServerPort()
+ path + "/";

//

request.setCharacterEncoding("GB18030");
String srcURL = String.valueOf(request.getAttribute("srcURL"));//资源路径
%>
<html>
<head>
<base href="<%=basePath%>">
</head>

<body>
<%
response.setContentType("application/x-download");
String url = "/upload/"+srcURL;
String fileName = srcURL;
fileName = URLEncoder.encode(fileName, "UTF-8");
response.addHeader("Content-Disposition", "attachment;filename="
+ fileName);
RequestDispatcher rd = application.getRequestDispatcher(url);
rd.forward(request, response);
response.flushBuffer();
out.clear();
out.clearBuffer();
out = pageContext.pushBody();
%>
</body>
</html>
老紫竹 2009-08-13
  • 打赏
  • 举报
回复
<html>
<head>
<base href=" <%=basePath%>">
</head>

<body>

这些都是啥东西啊?既然是下载,把他们删除吧!
另外,加上一行
out.clearBuffer();

81,092

社区成员

发帖
与我相关
我的任务
社区描述
Java Web 开发
社区管理员
  • Web 开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧