type Exception report
message
description The server encountered an internal error () that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: java.lang.IllegalStateException: getOutputStream() has already been called for this response
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:528)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:417)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
root cause
java.lang.IllegalStateException: getOutputStream() has already been called for this response
org.apache.catalina.connector.Response.getWriter(Response.java:608)
org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:200)
org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:125)
org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:118)
org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:189)
org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:122)
org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:79)
org.apache.jsp.do_005fdownload_jsp._jspService(do_005fdownload_jsp.java:74)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:68)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:376)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:320)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
javax.servlet.http.HttpServlet.service(HttpServlet.java:722)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.2 logs.
----------------------
由于jsp container在處理完成請(qǐng)求后會(huì)調(diào)用releasePageContet方法釋放所用的PageContext object,并且同時(shí)調(diào)用getWriter方法,由于getWriter方法與在jsp頁(yè)面中使用流相關(guān)的getOutputStream方法沖突,所以會(huì)造成這種異常,解決辦法是: 只需要在jsp頁(yè)面的最后加上兩條語(yǔ)句: out.clear(); out=pageContext.pushBody();即可(其中out,pageContext均為jsp內(nèi)置對(duì)象!)
1 <%@ page language="java" contentType="text/html; charset=utf-8" 2 pageEncoding="utf-8" import="com.jspsmart.upload.*"%> 3 <% 4 String dfilename = request.getParameter("dfilename"); 5 6 SmartUpload su = new SmartUpload(); 7 su.initialize(pageContext); 8 su.setContentDisposition(null); 9 su.downloadFile("/upload/" + dfilename); 10 out.clear(); 11 out = pageContext.pushBody(); 12 %>
|