用jsp实现下载时异常

whayoo 2006-07-11 03:55:14
用jsp实现下载时总是出现异常,头都大了。请各位高手帮帮忙,多谢!
用了webwork和sitemesh,不知道有没有影响。

下载部分的代码如下:
response.reset();
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename="+file.getName());
java.io.OutputStream outStream = response.getOutputStream();
outStream.write((byte [])BlobUtil.getObjectFormBlob(file.getContent()););
outStream.close();


异常代码如下:
15:42:30,328 ERROR StandardWrapperValve : Servlet.service() for servlet jsp thre
w exception
java.lang.IllegalStateException: response.getWriter() called after response.getOutputStream()
at com.opensymphony.module.sitemesh.filter.Buffer.getWriter(Buffer.java:52)
at com.opensymphony.module.sitemesh.filter.PageResponseWrapper$3.activateDestination(PageResponseWrapper.java:82)
at com.opensymphony.module.sitemesh.filter.RoutablePrintWriter.getDestination(RoutablePrintWriter.java:38)
at com.opensymphony.module.sitemesh.filter.RoutablePrintWriter.write(RoutablePrintWriter.java:144)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:191)
at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:115)
at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:75)
at org.apache.jsp.files.readdoc_jsp._jspService(readdoc_jsp.java:100)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:97)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:332)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:314)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:264)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:252)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.jwf.security.MonitorLoginFilter.doFilter(MonitorLoginFilter.java:72)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.jwf.webapp.filter.AuthenticationFilter.doFilter(AuthenticationFilter.java:25)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.jwf.webapp.filter.PersistenceFilter.doFilter(PersistenceFilter.java:28)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.jwf.webapp.filter.ContextFilter.doFilter(ContextFilter.java:19)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.jwf.webapp.filter.LogFilter.doFilter(LogFilter.java:38)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at com.opensymphony.module.sitemesh.filter.PageFilter.parsePage(PageFilter.java:118)
at com.opensymphony.module.sitemesh.filter.PageFilter.doFilter(PageFilter.java:52)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:202)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:173)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:213)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:178)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:126)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:105)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:107)
at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:148)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:869)
at org.apache.coyote.http11.Http11BaseProtocol$Http11ConnectionHandler.processConnection(Http11BaseProtocol.java:664)
at org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:527)
at org.apache.tomcat.util.net.LeaderFollowerWorkerThread.runIt(LeaderFollowerWorkerThread.java:80)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:684)
at java.lang.Thread.run(Thread.java:595)
...全文
215 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
cronuz 2006-07-12
  • 打赏
  • 举报
回复
outStream.write((byte [])BlobUtil.getObjectFormBlob(file.getContent()););
这句编译能过吗? 有两个分号!
kingdoom 2006-07-12
  • 打赏
  • 举报
回复
帮顶
Jonthanoscar 2006-07-12
  • 打赏
  • 举报
回复
注意,执行下载的页面,在Java脚本范围外(即<% ... %>之外)
,不要包含HTML代码、空格、回车或换行等字符,有的话将不能正确下载。
不信的话,可以在上述源码中%><%之间加入一个换行符,再下载一下,保证出错。
因为它影响了返回给浏览器的数据流,导致解析出错。
whayoo 2006-07-12
  • 打赏
  • 举报
回复
up
whayoo 2006-07-12
  • 打赏
  • 举报
回复
解决了,用了servlet,把前面下载部分的代码写在servlet的 doget()方法中就可以了
ranranhu 2006-07-12
  • 打赏
  • 举报
回复
mark
bjmylihui 2006-07-12
  • 打赏
  • 举报
回复
java.io.File file = new java.io.File(filename);
response.reset();
response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename="+file.getName());
java.io.OutputStream outStream = response.getOutputStream();
java.io.FileInputStream inStream = new java.io.FileInputStream(file);

//response.setContentType("jsp");
int len = -1;
byte[] bytes = new byte[1024];
while((len=inStream.read(bytes))!=-1){
outStream.write(bytes);
outStream.flush();

}
outStream.close();

81,091

社区成员

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

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