日期:2014-05-18  浏览次数:20728 次

jspSmartUpload 下载,烦透了,救命
第一次用smartUpload的时候成功地下载了一个txt文件,但是后来想常试再次下载一个文件试验的时候,就报了这个错误,我比较菜,以为是tomcat内置的什么对象已经取得关联,重新启动tomcat,甚至重新启动计算机都还有这个毛病!

我写的下载页面是这个:
  <%
      mySmartUpload.initialize(pageContext);
      mySmartUpload.setContentDisposition(null);
      mySmartUpload.downloadFile( "c:\\ "+ "aaa.txt ");
  %>

报告的错误是这个:
java.lang.IllegalStateException:   getOutputStream()   has   already   been   called   for   this   response
org.apache.coyote.tomcat5.CoyoteResponse.getWriter(CoyoteResponse.java:609)
org.apache.coyote.tomcat5.CoyoteResponseFacade.getWriter(CoyoteResponseFacade.java:190)
org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:165)
org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:158)
org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:234)
org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:160)
org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:120)
org.apache.jsp.VAL.prepare.downloadDefect_jsp._jspService(downloadDefect_jsp.java:130)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:133)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:311)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:301)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:248)
javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
util.HibernateFilter.doFilter(HibernateFilter.java:48)


请教大侠们支招,在线求解!!谢谢!!真的很急!!!

补充:我确认下载没有写错,因为第一次已经能下载了,问题出在以后下载的时候都不能下了.

------解决方案--------------------
getWriter() 及 getOutputStream(),
只能2选1.不然会产生IllegalStateException.

在jsp中,一开始已使用了PrintWriter.
即已使用了getWriter()来写东西.

如果你再使用getOutputStream()就会出现你上面的问题.
因为jsp转译成servlet时,当有输出就会使用getWriter().
它是javax.servlet.jsp.JspWriter类型(extends java.io.Writer).

而getOutputStream().
它是javax.servlet.ServletOutputStream类型(extends java.io.OutputStream).

而对客户端的输出只能使用一种类别输出.
当它在jsp里使用了getOutputStream().
就会产生了两种类别输出,所以就会形成冲突.program根本不知道你要使用那一个作为输出.

一般在下载档案时都要使用getOutputStream().对客户端串流输出.

使用jsp作为下载档案时,
在jsp档案里,不能有任何的输出.
包括空格或out.println( "xxx ");
因为会使用了jspWriter().

所以使用jsp作为下载档案时.
检查一下{Tomcat_home}/work/xxx/xxx_jsp.java
看它到底在那里使用了JspWriter.
把它修正,就能解决问题.
------解决方案--------------------
是的,楼上两位说的极是!你看看代码吧,
------解决方案--------------------
楼上是一位,不是两位 ^_^
------解决方案--------------------
所以使用jsp作为下载档案时.
检查一下{Tomcat_home}/work/xxx/xxx_jsp.java
看它到底在那里使用了JspWriter.
把它修正,就能解决问题. "

怎么找jspwriter ,怎么修正??能详细点么