I am tried to use JFreeChart in a jsp page. Although it renders correctly on the web page, I have found the exception regarding getOutputStream() in the tomcat log. Any idea why this is happening?
Tomcat 4.06 on XP Pro SP1
JDK 1.4.1_01
<<< Error: >>>
2002-12-03 11:48:14 StandardContext[/metric]: Mapped to servlet 'jsp' with servlet path '/chart.jsp' and path info 'null' and update=true
2002-12-03 11:48:14 StandardWrapperValve[jsp]: Servlet.service() for servlet jsp threw exception
java.lang.IllegalStateException: getOutputStream() has already been called for this response
at org.apache.catalina.connector.ResponseBase.getWriter(ResponseBase.java:750)
at org.apache.catalina.connector.ResponseFacade.getWriter(ResponseFacade.java:165)
at org.apache.jasper.runtime.JspWriterImpl.initOut(JspWriterImpl.java:166)
at org.apache.jasper.runtime.JspWriterImpl.flushBuffer(JspWriterImpl.java:158)
at org.apache.jasper.runtime.JspWriterImpl.flush(JspWriterImpl.java:205)
at org.apache.jasper.runtime.PageContextImpl.release(PageContextImpl.java:177)
at org.apache.jasper.runtime.JspFactoryImpl.internalReleasePageContext(JspFactoryImpl.java:198)
at org.apache.jasper.runtime.JspFactoryImpl.releasePageContext(JspFactoryImpl.java:193)
at org.apache.jsp.chart$jsp._jspService(chart$jsp.java:108)
at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:107)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(JspServlet.java:201)
at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:381)
at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:473)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:853)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:247)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:193)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:243)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:190)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.CertificatesValve.invoke(CertificatesValve.java:246)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardContext.invoke(StandardContext.java:2347)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:180)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.valves.ErrorDispatcherValve.invoke(ErrorDispatcherValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:170)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:468)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:564)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:174)
at org.apache.catalina.core.StandardPipeline.invokeNext(StandardPipeline.java:566)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:472)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:943)
at org.apache.catalina.connector.http.HttpProcessor.process(HttpProcessor.java:1027)
at org.apache.catalina.connector.http.HttpProcessor.run(HttpProcessor.java:1125)
at java.lang.Thread.run(Thread.java:536)
<<< Code: >>>
<%@page contentType="image/jpeg"%>
<%@page import="java.util.*,java.io.*,java.awt.*"%>
<%@page
import="com.jrefinery.data.*,com.jrefinery.chart.*,com.jrefinery.chart.ui.*,com.jrefinery.chart.data.*"%>
<%
String[] xAxisData = {"11", "22", "33", "44"};
Number[][] data ={
{new Integer(120),new Integer(138),new Integer(300), new Integer(400)},
{new Integer(95), new Integer(87), new Integer(99), new Integer(400)},
{new Integer(180),new Integer(156),new Integer(173), new Integer(400)}
};
String[] year ={"2000","2001","2002"};
DefaultCategoryDataset dataSet = new DefaultCategoryDataset(year,data);
dataSet.setCategories(xAxisData);
JFreeChart chart=null;
chart = ChartFactory.createVerticalBarChart3D("1111111", "xx", "yy", dataSet, true);
OutputStream ostream = response.getOutputStream();
ChartUtilities.writeChartAsJPEG(ostream, chart, 300, 200);
ostream.close();
%>
Thanks,
Jack
jsp error: getOutputStream() has already been called for thi
Re: jsp error: getOutputStream() has already been called for
I ran into the same problem. Using Tomcat, the output stream is already called. I had a hard time getting around it but what I eventually did was use a servlet to request the work to be done. Hope this helps.
Re: jsp error: getOutputStream() has already been called for
That does it. Thanks for the hint...
-Jack
-Jack
Re: jsp error: getOutputStream() has already been called for
Hi,
omit blanks and line breaks outside the script delimiters (also at the beginning and at the end of your code), e.g.:
<%
@page contentType="image/jpeg"%><%
@page import="java.util.*,java.io.*,java.awt.*"%><%
@page import="com.jrefinery.data.*,com.jrefinery.chart.*,com.jrefinery.chart.ui.*,com.jrefinery.chart.data.*"%><%
String[] xAxisData = {"11", "22", "33", "44"};
Number[][] data ={
{new Integer(120),new Integer(138),new Integer(300), new Integer(400)},
[...]
%>
hth
Gid
omit blanks and line breaks outside the script delimiters (also at the beginning and at the end of your code), e.g.:
<%
@page contentType="image/jpeg"%><%
@page import="java.util.*,java.io.*,java.awt.*"%><%
@page import="com.jrefinery.data.*,com.jrefinery.chart.*,com.jrefinery.chart.ui.*,com.jrefinery.chart.data.*"%><%
String[] xAxisData = {"11", "22", "33", "44"};
Number[][] data ={
{new Integer(120),new Integer(138),new Integer(300), new Integer(400)},
[...]
%>
hth
Gid
getOutputStream() has already been called for
I also receive the exception "org.apache.jasper.JasperException: getOutputStream() has already been called for this response". I'm using a jsp which invokes a servlet to obtain 2 different graphs to display. I have included the jsp and servlet code below. How can I avoid the exception?
.....the jsp file...............
<tr>
<td colspan=2 valign='top' align='left'>
<img src='DB?imgType=dbUsage' border=0 width=250 height=187>
</td>
</tr>
<tr>
<td colspan=2 valign='top' align='left'>
<img src='DB?imgType=poolUsage' border=0 width=400 height=300>
</td>
</tr>
...
....the servlet
String imgType = request.getParameter("imgType");
OutputStream out = response.getOutputStream();
if(imgType.equals("dbUsage"))
{
.........
response.setContentType("image/png");
ChartUtilities.writeChartAsPNG(out, chart, 250, 187);
}
else if(imgType.equals("poolUsage"))
{
CategoryDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
response.setContentType("image/png");
ChartUtilities.writeChartAsPNG(out, chart, 400, 300);
}
.....the jsp file...............
<tr>
<td colspan=2 valign='top' align='left'>
<img src='DB?imgType=dbUsage' border=0 width=250 height=187>
</td>
</tr>
<tr>
<td colspan=2 valign='top' align='left'>
<img src='DB?imgType=poolUsage' border=0 width=400 height=300>
</td>
</tr>
...
....the servlet
String imgType = request.getParameter("imgType");
OutputStream out = response.getOutputStream();
if(imgType.equals("dbUsage"))
{
.........
response.setContentType("image/png");
ChartUtilities.writeChartAsPNG(out, chart, 250, 187);
}
else if(imgType.equals("poolUsage"))
{
CategoryDataset dataset = createDataset();
JFreeChart chart = createChart(dataset);
response.setContentType("image/png");
ChartUtilities.writeChartAsPNG(out, chart, 400, 300);
}