下载PDF时抛错,操作是,在下载进行中时,刷新了页面。后台就抛出了这个错请各位大侠帮忙看看!
小弟在此赶鸡不尽!!!
抛错信息:
12/11/09 16:04:49 java.lang.Exception: 生成response出错!
12/11/09 16:04:49  at com.Pdf.fileToResponseStream(Pdf.java:231)
12/11/09 16:04:49  at com.Pdf.pdf(Pdf.java:106)
12/11/09 16:04:49  at com.NewServlet.downloadMethod(NewServlet.java:2013)
12/11/09 16:04:49  at com.NewServlet.process(NewServlet.java:174)
12/11/09 16:04:49  at com.RootServlet.doPost(RootServlet.java:82)
12/11/09 16:04:49  at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
12/11/09 16:04:49  at com.RootServlet.service(RootServlet.java:47)
12/11/09 16:04:49  at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
12/11/09 16:04:49  at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:765)
12/11/09 16:04:49  at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:317)
12/11/09 16:04:49  at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:790)
12/11/09 16:04:49  at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:270)
12/11/09 16:04:49  at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:112)
12/11/09 16:04:49 12/11/09 16:04:49 delete 89388_0322642.pdf1 success!
12/11/09 16:04:49 delete 89388_8122641.pdf2 success!
at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:192)
12/11/09 16:04:49  at java.lang.Thread.run(Thread.java:534)
12/11/09 16:04:49 Caused by: com.evermind.server.http.HttpIOException: Connection reset by peer: socket write error
12/11/09 16:04:49  at com.evermind.server.http.EvermindServletOutputStream.write(EvermindServletOutputStream.java:250)
12/11/09 16:04:49  at com.evermind.server.http.EvermindServletOutputStream.write(EvermindServletOutputStream.java:151)
12/11/09 16:04:49  at java.io.BufferedOutputStream.write(BufferedOutputStream.java:106)
12/11/09 16:04:49  at java.io.FilterOutputStream.write(FilterOutputStream.java:80)
12/11/09 16:04:49  at com.Pdf.fileToResponseStream(Pdf.java:222)
12/11/09 16:04:49  ... 14 more
INFO com.NewServlet - at LogCommImpl.java:26 
  Exception caught: java.lang.Exception: 生成response出错!  ERROR com.NewServlet - at LogCommImpl.java:45 
  IOException when trying to include the error page path /Error.jsp  com.evermind.server.http.HttpIOException: Connection reset by peer: socket write error
at com.evermind.server.http.EvermindServletOutputStream.write(EvermindServletOutputStream.java:250)
at com.evermind.server.http.EvermindJSPWriter.writeOut(EvermindJSPWriter.java:456)
at com.evermind.server.http.EvermindJSPWriter.jspflush(EvermindJSPWriter.java:373)
at com.evermind.server.http.EvermindJSPWriter.close(EvermindJSPWriter.java:345)
at oracle.jsp.runtime.OracleJspRuntime.extraHandlePCFinally(OracleJspRuntime.java:1460)
at _error._jspService(_error.java:97)
at com.orionserver.http.OrionHttpJspPage.service(OrionHttpJspPage.java:56)
at oracle.jsp.runtimev2.JspPageTable.service(JspPageTable.java:347)
at oracle.jsp.runtimev2.JspServlet.internalService(JspServlet.java:509)
at oracle.jsp.runtimev2.JspServlet.service(JspServlet.java:413)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:765)
at com.evermind.server.http.ServletRequestDispatcher.include(ServletRequestDispatcher.java:121)
at com.RootServlet.include(RootServlet.java:126)
at com.RootServlet.handelException(RootServlet.java:185)
at com.RootServlet.doPost(RootServlet.java:85)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:760)
at com.RootServlet.service(RootServlet.java:47)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at com.evermind.server.http.ServletRequestDispatcher.invoke(ServletRequestDispatcher.java:765)
at com.evermind.server.http.ServletRequestDispatcher.forwardInternal(ServletRequestDispatcher.java:317)
at com.evermind.server.http.HttpRequestHandler.processRequest(HttpRequestHandler.java:790)
at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:270)
at com.evermind.server.http.HttpRequestHandler.run(HttpRequestHandler.java:112)
at com.evermind.util.ReleasableResourcePooledExecutor$MyWorker.run(ReleasableResourcePooledExecutor.java:192)
at java.lang.Thread.run(Thread.java:534)
下载代码:try {
in = new BufferedInputStream(new FileInputStream(printFile
.getPath()));
byte[] b=new byte[in.available()];
in.read(b);
in.close();
response.reset();
if (printFile.getName().substring(
printFile.getName().lastIndexOf(".")).equals(".xls")) {
response.setContentType("application/vnd.ms-excel");
String filename = new String(printFile.getName()
.getBytes("GBK"), "ISO8859_1").trim();
response.setHeader("Content-Disposition", streamType
+ ";filename=" + filename);
} else if (printFile.getName().substring(
printFile.getName().lastIndexOf(".")).equals(".pdf")) {
response.setContentType("application/pdf");
String filename = new String(printFile.getName()
.getBytes("GBK"), "ISO8859_1").trim();
response.setHeader("Content-Disposition", streamType
+ ";filename=" + filename);
} else {
response.setContentType("text/html");
}
out = new BufferedOutputStream(response.getOutputStream());
out.write(b);
out.flush();
out.close();
} catch (IOException e) {
throw new Exception("生成PDF出错!", e);
} catch (Exception e) {
throw new Exception("生成PDF出错!", e);
} finally {
if (out != null) {
try {
out.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}
if (in != null) {
try {
in.close();
} catch (IOException ex) {
ex.printStackTrace();
}
}

解决方案 »

  1.   

    com.evermind.server.http.HttpIOException: Connection reset by peer: socket write error从这句上看,好象是正在下载的时候,客户把下载页关闭了。
      

  2.   

    追加一下,最好不在catch 里面使用 String name=e.getClass().getName(); 去判断,然后屏蔽错误信息。
      

  3.   

    你最后return null,他怎么刷新也没事啊。出现重复提交一般是因为你首次提交的是表单
      

  4.   


    return null 是在类里面还是在前台jsp中写呢?不太懂,最好是能有代码就好了!在线等 !
      

  5.   

    首先你页面上的这个链接是不是只是用来下载PDF?如果是给你一点代码参考
    try{
    ActionContext ctx = ActionContext.getContext();
    HttpServletResponse response = (HttpServletResponse) ctx
    .get(ServletActionContext.HTTP_RESPONSE);
    HttpServletRequest request = (HttpServletRequest)ctx.get(ServletActionContext.HTTP_REQUEST);

    String filename2 = name + ".pdf";
    response.setHeader("Content-disposition",
    "attachment; filename="
    + new String(filename2.getBytes("gb2312"),
    "iso8859-1"));
    response.setContentType("application/pdf");
    response.setContentLength(ba.size());
    ServletOutputStream os = response.getOutputStream();
    ba.writeTo(os);
    ba.flush();
    ba.close();
    os.flush();
    os.close();
    }catch(Exception ex){
    System.out.println("PDF生成异常:"+ex.getMessage());
    }
    return null;
      

  6.   

    10楼的方法是不是运用了Struts??我刚才用了,也没有解决问题。
      

  7.   

    下载代码写在哪个位置?JSP?Servlet?或者service?
      

  8.   

    对了。我的项目里没有用到struts
      

  9.   

    写在Pdf.java的类里面,通过 newServlet.java 的downLoad()方法调用 。
    没有用到框架。。
      

  10.   

    。把你newServlet.java 的downLoad()方法关键代码贴出来看一下
      

  11.   

    private void downLoad(HttpServletRequest request, HttpServletResponse response) throws Exception{
           String po = request.getParameter("isTruePdf");
           Pdf pppf=new Pdf();
           pppf.pdf(request, response,po);
        }
      

  12.   

    那我那段代码写在你的Pdf类里面没有问题,只是我的request和response是在action获取,你获取的步骤都省了,直接可以使用传过去的request和response。既然你的方法无返回值return也免了。
      

  13.   

    高手来了。告诉你罗,将那个out输出增加一个判断,试试!
      while ((i = in.read()) != -1) {
    if(in.available()<response.getBufferSize()){
    out.write(i);
    }
    }
      

  14.   

    这种情况一部份值没有被write,严重导致下载后的文件不能打开!
    求解
    !!!!!!散分了!!!
      

  15.   

    有木有人想到了瓣花??有木有??有木有?俺发现使用token也无济于事,大家就不要尝试了。
    token只会作用于一次请求完毕后,客户端刷新,form里面的数据重复提交 ,而不适用于上述情况,
    上述问题是,第一次请求未响应到客户端,客户端便重新请求所造成的。。
    希望大家再帮忙想想办法!!谢谢了。
      

  16.   

    up  up   up   up  up
      

  17.   

    问题真正解决,开始结帖了。。
    处理方式:
           使用AJAX去下载,完毕!开始散分了!!!大伙儿快快过来。。