急!Stream closed 的问题

yy2001 2008-01-10 11:33:43
下载文件时可以正常下载,但TOMCAT的日志中报:
2008-01-10 09:31:38 StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception
java.io.IOException: Stream closed
at org.apache.jasper.runtime.JspWriterImpl.ensureOpen(JspWriterImpl.java:202)
at org.apache.jasper.runtime.JspWriterImpl.clearBuffer(JspWriterImpl.java:157)
错误,请问怎么能不出现这个错误?
下载页面代码如下:
<%@page import="java.util.*"%>
<%@page import="java.io.*"%>
<%@page import="java.net.*"%>


<%
String pathname = request.getParameter("path");
String filename=request.getParameter("filename");
out.print(pathname+filename);

response.setContentType("APPLICATION/OCTET-STREAM");
response.setHeader("Content-Disposition","attachment; filename="+filename);

FileInputStream fileInputStream =new FileInputStream(pathname+filename);
out.print(pathname+filename);
out.clear();
out.close();
ServletOutputStream myout=response.getOutputStream();
int i;
while ((i=fileInputStream.read()) != -1)
{myout.write(i);}
fileInputStream.close();
myout.close();

%>
...全文
5167 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
yy2001 2008-01-10
  • 打赏
  • 举报
回复
这样也不行,报的错误变为:
2008-01-10 12:51:47 StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.coyote.tomcat5.CoyoteResponse.getWriter(CoyoteResponse.java:599)
at org.apache.coyote.tomcat5.CoyoteResponseFacade.getWriter(CoyoteResponseFacade.java:163)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:122)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:115)
at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:190)
at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:115)
at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:75)
changjiangzhibin 2008-01-10
  • 打赏
  • 举报
回复
LZ的思想是要顶的,
"随手关门",
严禁长明灯,长流水
shadao 2008-01-10
  • 打赏
  • 举报
回复
and
myout.close();
yy2001 2008-01-10
  • 打赏
  • 举报
回复
out.close();
这个去掉我也试了,结果是一样的
shadao 2008-01-10
  • 打赏
  • 举报
回复
你要知道
"out"和"response.getOutputStream()" 实际对象虽然不一样,但他们引用的流却是一样的

你先close了他 又对他进行write操作。。。

在jsp里你不应该close响应流

顶多flush

去掉所有close()调用
ChDw 2008-01-10
  • 打赏
  • 举报
回复
你要下载文件的话,不要再使用out输出内容,你的JSP中也不能包含任何的HTML内容,回车都不行!


<%@page import="java.util.*"%>
<%@page import="java.io.*"%>
<%@page import="java.net.*"%>


<%


都必须改成

<%@page import="java.util.*"%><%@page
import="java.io.*"%><%@page
import="java.net.*"%><%


下载文件最好使用Servlet,而不要使用JSP

62,614

社区成员

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

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