Bug 32707 - Exception when response.getOutputStream is used in JSP-Page
Summary: Exception when response.getOutputStream is used in JSP-Page
Status: RESOLVED INVALID
Alias: None
Product: Tomcat 5
Classification: Unclassified
Component: Jasper (show other bugs)
Version: 5.5.6
Hardware: All All
: P2 normal (vote)
Target Milestone: ---
Assignee: Tomcat Developers Mailing List
URL:
Keywords:
Depends on:
Blocks:
 
Reported: 2004-12-14 23:49 UTC by Sven
Modified: 2004-12-14 15:20 UTC (History)
0 users



Attachments

Note You need to log in before you can comment on or make changes to this bug.
Description Sven 2004-12-14 23:49:35 UTC
The Exception below is produced by this JSP-Page:

<!-- $Id: index.jsp,v 1.39 2004/10/31 20:45:29 sven Exp $ -->
<%@ page import="java.io.*" %>
<%
	response.reset();
	OutputStream os = response.getOutputStream();
	os.write(0);
	os.close();
%>

The Exception:

Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for t
his response
        at org.apache.catalina.connector.Response.getWriter(Response.java:596)
        at
org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:186)
        at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:124)
        at
org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:117)
        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.test.index_jsp._jspService(org.apache.jsp.test.index_jsp:61)
        at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:99)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:802)
        at
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:325)
        at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:295)
        at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:245)
        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 de.djh.servlet.filter.SetDates.doFilter(SetDates.java:80)
        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:214)
        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:825)
        at
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:738)
        at
org.apache.tomcat.util.net.PoolTcpEndpoint.processSocket(PoolTcpEndpoint.java:526)
        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(Unknown Source)
Comment 1 Remy Maucherat 2004-12-14 23:56:22 UTC
The fact that you're calling reset doesn't change the fact that you still have a
pointer to the writer.
Comment 2 Sven 2004-12-15 00:15:34 UTC
The JSP-Page
<!-- $Id: index.jsp,v 1.39 2004/10/31 20:45:29 sven Exp $ -->
<%@ page import="java.io.*" %>
<%@ page import="java.util.*" %>
<%
	response.reset();
	response.setContentType("text/html");
	
	OutputStream os = response.getOutputStream();
	os.write("wurst".getBytes());
	os.close();
	
	return;
%>

works as expected, the client will get 5 bytes of content. Only the cleanup-code
in a finally-block in the compiled JSP-Page causes the exception.
Comment 3 Remy Maucherat 2004-12-15 00:20:25 UTC
If you want to discuss fine points in the specification (such as JSP's usage of
a writer), you should IMO try somewhere other than bugzilla. Thank you, and
please do not reopen the report.