紧急紧急!下载PDF时遇到的问题,UP有分了!
下载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();
}
}
[最优解释]
首先你页面上的这个链接是不是只是用来下载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;
[其他解释]
楼主,这个问题问的好,我也碰到过这样的问题,但不知道如何解决啊!
[其他解释]
问题解决了就好……
[其他解释]
null
[其他解释]
只能在此顶一下了啊
[其他解释]
com.evermind.server.http.HttpIOException: Connection reset by peer: socket write error
从这句上看,好象是正在下载的时候,客户把下载页关闭了。
[其他解释]
追加一下,最好不在catch 里面使用 String name=e.getClass().getName(); 去判断,然后屏蔽错误信息。
[其他解释]
不是关闭,而是刷新 。刷新后请求被重新提交 ,使用令牌也无效。。。郁闷啊。。。
[其他解释]
这种错误 直接把流关闭就行了,下载的时候客户关闭下载页是很正常的。
[其他解释]
你最后return null,他怎么刷新也没事啊。出现重复提交一般是因为你首次提交的是表单
[其他解释]
请问具体怎样写代码?
[其他解释]
return null 是在类里面还是在前台jsp中写呢?不太懂,最好是能有代码就好了!在线等 !
[其他解释]
10楼的方法是不是运用了Struts??我刚才用了,也没有解决问题。。。。
[其他解释]
你是写在哪儿的?
[其他解释]
写在下载代码里。。
[其他解释]
下载代码写在哪个位置?JSP?Servlet?或者service?
[其他解释]
对了。我的项目里没有用到struts
[其他解释]
写在Pdf.java的类里面,通过 newServlet.java 的downLoad()方法调用 。
没有用到框架。。
[其他解释]
private void downLoad(HttpServletRequest request, HttpServletResponse response) throws Exception{
String po = request.getParameter("isTruePdf");
Pdf pppf=new Pdf();
pppf.pdf(request, response,po);
}
[其他解释]
。。。。
把你newServlet.java 的downLoad()方法关键代码贴出来看一下
[其他解释]
还真是和你说的一样。。报一样的错。真的。再帮我想想吧。。。
[其他解释]
那我那段代码写在你的Pdf类里面没有问题,只是我的request和response是在action获取,你获取的步骤都省了,直接可以使用传过去的request和response。既然你的方法无返回值return也免了。
[其他解释]
居然没人顶贴,分数不少了诶
[其他解释]
大家别让帖子沉了。。。这个问题在网上好多人都遇到过,大家发表一下意见或者建议,说说当初是怎么解决的吧。。
[其他解释]
楼上的肯定是欠抽了,快快帮忙想想办法吧。。。
[其他解释]
竟然没人顶,路过,顶起!
[其他解释]
高手来了。告诉你罗,将那个out输出增加一个判断,试试!
while ((i = in.read()) != -1) {
if(in.available()<response.getBufferSize()){
out.write(i);
}
}
[其他解释]
顶起,求高手 !
[其他解释]
楼上的真是深藏不露点的牛人啊。。。真没报错了。。结帖了!!散分了!!
[其他解释]
这种情况一部份值没有被write,严重导致下载后的文件不能打开!
求解
!!!!!!散分了!!!
[其他解释]
下载下来的文件不能打开 ……什么 情况??错是不报了。。
[其他解释]
楼上的,您乐什么?这个办法是不行的、
[其他解释]
[其他解释]
你怎么看?
[其他解释]
看来高手和专家们不在这儿……
[其他解释]
别让帖子沉了。。大家再想想办法吧。
[其他解释]
楼主问的好
[其他解释]
up up up up up
[其他解释]
问题真正解决,开始结帖了。。
处理方式:
使用AJAX去下载,完毕!开始散分了!!!大伙儿快快过来。。
------其他解决方案--------------------
有木有人想到了瓣花??有木有??有木有?俺发现使用token也无济于事,大家就不要尝试了。
token只会作用于一次请求完毕后,客户端刷新,form里面的数据重复提交 ,而不适用于上述情况,
上述问题是,第一次请求未响应到客户端,客户端便重新请求所造成的。。
希望大家再帮忙想想办法!!谢谢了。
[其他解释]
没想到瓣花,想到摘花。。呵呵
[其他解释]
null