[prev in list] [next in list] [prev in thread] [next in thread] 

List:       struts-user
Subject:    RE: problem streaming file to browser
From:       pqin () shareowner ! com
Date:       2002-12-31 14:21:56
[Download RAW message or body]


Did u close all the resources before u return null?

Regards,
 
 
PQ
 
"This Guy Thinks He Knows Everything"
"This Guy Thinks He Knows What He Is Doing"

-----Original Message-----
From: Srinivas Sampige [mailto:sampige@mailandnews.com] 
Sent: December 30, 2002 9:13 PM
To: Sven Bischoff
Cc: struts-user@jakarta.apache.org
Subject: RE: problem streaming file to browser

Hi
 Sven's suggestion on returning null in "ReportAction" got me past the
problem 
of not being able to run the "report generation" a second time
consecutively. 
Now, another problem still remains. In "ReportAction" depending on various 
conditions I am doing processing and forwarding back to the calling page or
if 
it is specifically a report generation I am returning a null(as per sven's 
suggestion). But what is happening here is if I keep doing a submit from the

JSP only for report generation consecutively  the report generation works. 
Now, when I do a submit for another operation from the same JSP .... 
ReportAction does the processing and forwards back to the JSP successfully, 
but then if I hit the "report" button i.e to generate a report... 
"ReportAction" breaks down with this exception (after the stack trace I have

typed in some of my thoughts so please read them)..

===================================
Error: 500
Location: /etrac/jsp/report.jsp
Internal Servlet Error:

javax.servlet.ServletException: OutputStream is already being used for this 
request
	java.lang.Throwable(java.lang.String)
	java.lang.Exception(java.lang.String)
	javax.servlet.ServletException(java.lang.Throwable)
	void 
org.apache.jasper.runtime.PageContextImpl.handlePageException(java.lang.Exce
pt
ion)
	void 
jsp._0002fjsp_0002freport_0002ejspreport_jsp_43._jspService(javax.servlet.ht
tp
.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	void 
org.apache.jasper.runtime.HttpJspBase.service(javax.servlet.http.HttpServlet
Re
quest, javax.servlet.http.HttpServletResponse)
	void
javax.servlet.http.HttpServlet.service(javax.servlet.ServletRequest, 
javax.servlet.ServletResponse)
	void 
org.apache.jasper.servlet.JspServlet$JspCountedServlet.service(javax.servlet
.h
ttp.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	void
javax.servlet.http.HttpServlet.service(javax.servlet.ServletRequest, 
javax.servlet.ServletResponse)
	void 
org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(javax.servlet
.h
ttp.HttpServletRequest, javax.servlet.http.HttpServletResponse, boolean)
	void 
org.apache.jasper.servlet.JspServlet.serviceJspFile(javax.servlet.http.HttpS
er
vletRequest, javax.servlet.http.HttpServletResponse, java.lang.String, 
java.lang.Throwable, boolean)
	void 
org.apache.jasper.servlet.JspServlet.service(javax.servlet.http.HttpServletR
eq
uest, javax.servlet.http.HttpServletResponse)
	void
javax.servlet.http.HttpServlet.service(javax.servlet.ServletRequest, 
javax.servlet.ServletResponse)
	void 
org.apache.tomcat.core.ServletWrapper.doService(org.apache.tomcat.core.Reque
st
, org.apache.tomcat.core.Response)
	void
org.apache.tomcat.core.Handler.service(org.apache.tomcat.core.Request, 
org.apache.tomcat.core.Response)
	void 
org.apache.tomcat.core.ServletWrapper.service(org.apache.tomcat.core.Request
, 
org.apache.tomcat.core.Response)
	void 
org.apache.tomcat.facade.RequestDispatcherImpl.doForward(javax.servlet.Servl
et
Request, javax.servlet.ServletResponse)
	void 
org.apache.tomcat.facade.RequestDispatcherImpl.forward(javax.servlet.Servlet
Re
quest, javax.servlet.ServletResponse)
	void 
org.apache.struts.action.ActionServlet.processActionForward(org.apache.strut
s.
action.ActionForward, org.apache.struts.action.ActionMapping, 
org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, 
javax.servlet.http.HttpServletResponse)
	void 
org.apache.struts.action.ActionServlet.process(javax.servlet.http.HttpServle
tR
equest, javax.servlet.http.HttpServletResponse)
	void 
com.boeing.etrac.action.EtracServlet.process(javax.servlet.http.HttpServletR
eq
uest, javax.servlet.http.HttpServletResponse)
	void 
org.apache.struts.action.ActionServlet.doPost(javax.servlet.http.HttpServlet
Re
quest, javax.servlet.http.HttpServletResponse)
	void 
javax.servlet.http.HttpServlet.service(javax.servlet.http.HttpServletRequest
, 
javax.servlet.http.HttpServletResponse)
	void
javax.servlet.http.HttpServlet.service(javax.servlet.ServletRequest, 
javax.servlet.ServletResponse)
	void 
org.apache.tomcat.core.ServletWrapper.doService(org.apache.tomcat.core.Reque
st
, org.apache.tomcat.core.Response)
	void
org.apache.tomcat.core.Handler.service(org.apache.tomcat.core.Request, 
org.apache.tomcat.core.Response)
	void 
org.apache.tomcat.core.ServletWrapper.service(org.apache.tomcat.core.Request
, 
org.apache.tomcat.core.Response)
	void 
org.apache.tomcat.core.ContextManager.internalService(org.apache.tomcat.core
.R
equest, org.apache.tomcat.core.Response)
	void 
org.apache.tomcat.core.ContextManager.service(org.apache.tomcat.core.Request
, 
org.apache.tomcat.core.Response)
	void 
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(org.a
pa
che.tomcat.service.TcpConnection, java.lang.Object [])
	void
org.apache.tomcat.service.TcpWorkerThread.runIt(java.lang.Object [])
	void org.apache.tomcat.util.ThreadPool$ControlRunnable.run()
	void java.lang.Thread.run()


Root cause: 
java.lang.IllegalStateException: OutputStream is already being used for this

request
	java.lang.Throwable(java.lang.String)
	java.lang.Exception(java.lang.String)
	java.lang.RuntimeException(java.lang.String)
	java.lang.IllegalStateException(java.lang.String)
	java.io.PrintWriter 
org.apache.tomcat.facade.HttpServletResponseFacade.getWriter()
	void org.apache.jasper.runtime.JspWriterImpl.initOut()
	void org.apache.jasper.runtime.JspWriterImpl.flushBuffer()
	void org.apache.jasper.runtime.JspWriterImpl.write(java.lang.String,
int, 
int)
	void org.apache.jasper.runtime.JspWriterImpl.write(java.lang.String)
	void 
jsp._0002fjsp_0002freport_0002ejspreport_jsp_43._jspService(javax.servlet.ht
tp
.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	void 
org.apache.jasper.runtime.HttpJspBase.service(javax.servlet.http.HttpServlet
Re
quest, javax.servlet.http.HttpServletResponse)
	void
javax.servlet.http.HttpServlet.service(javax.servlet.ServletRequest, 
javax.servlet.ServletResponse)
	void 
org.apache.jasper.servlet.JspServlet$JspCountedServlet.service(javax.servlet
.h
ttp.HttpServletRequest, javax.servlet.http.HttpServletResponse)
	void
javax.servlet.http.HttpServlet.service(javax.servlet.ServletRequest, 
javax.servlet.ServletResponse)
	void 
org.apache.jasper.servlet.JspServlet$JspServletWrapper.service(javax.servlet
.h
ttp.HttpServletRequest, javax.servlet.http.HttpServletResponse, boolean)
	void 
org.apache.jasper.servlet.JspServlet.serviceJspFile(javax.servlet.http.HttpS
er
vletRequest, javax.servlet.http.HttpServletResponse, java.lang.String, 
java.lang.Throwable, boolean)
	void 
org.apache.jasper.servlet.JspServlet.service(javax.servlet.http.HttpServletR
eq
uest, javax.servlet.http.HttpServletResponse)
	void
javax.servlet.http.HttpServlet.service(javax.servlet.ServletRequest, 
javax.servlet.ServletResponse)
	void 
org.apache.tomcat.core.ServletWrapper.doService(org.apache.tomcat.core.Reque
st
, org.apache.tomcat.core.Response)
	void
org.apache.tomcat.core.Handler.service(org.apache.tomcat.core.Request, 
org.apache.tomcat.core.Response)
	void 
org.apache.tomcat.core.ServletWrapper.service(org.apache.tomcat.core.Request
, 
org.apache.tomcat.core.Response)
	void 
org.apache.tomcat.facade.RequestDispatcherImpl.doForward(javax.servlet.Servl
et
Request, javax.servlet.ServletResponse)
	void 
org.apache.tomcat.facade.RequestDispatcherImpl.forward(javax.servlet.Servlet
Re
quest, javax.servlet.ServletResponse)
	void 
org.apache.struts.action.ActionServlet.processActionForward(org.apache.strut
s.
action.ActionForward, org.apache.struts.action.ActionMapping, 
org.apache.struts.action.ActionForm, javax.servlet.http.HttpServletRequest, 
javax.servlet.http.HttpServletResponse)
	void 
org.apache.struts.action.ActionServlet.process(javax.servlet.http.HttpServle
tR
equest, javax.servlet.http.HttpServletResponse)
	void 
com.boeing.etrac.action.EtracServlet.process(javax.servlet.http.HttpServletR
eq
uest, javax.servlet.http.HttpServletResponse)
	void 
org.apache.struts.action.ActionServlet.doPost(javax.servlet.http.HttpServlet
Re
quest, javax.servlet.http.HttpServletResponse)
	void 
javax.servlet.http.HttpServlet.service(javax.servlet.http.HttpServletRequest
, 
javax.servlet.http.HttpServletResponse)
	void
javax.servlet.http.HttpServlet.service(javax.servlet.ServletRequest, 
javax.servlet.ServletResponse)
	void 
org.apache.tomcat.core.ServletWrapper.doService(org.apache.tomcat.core.Reque
st
, org.apache.tomcat.core.Response)
	void
org.apache.tomcat.core.Handler.service(org.apache.tomcat.core.Request, 
org.apache.tomcat.core.Response)
	void 
org.apache.tomcat.core.ServletWrapper.service(org.apache.tomcat.core.Request
, 
org.apache.tomcat.core.Response)
	void 
org.apache.tomcat.core.ContextManager.internalService(org.apache.tomcat.core
.R
equest, org.apache.tomcat.core.Response)
	void 
org.apache.tomcat.core.ContextManager.service(org.apache.tomcat.core.Request
, 
org.apache.tomcat.core.Response)
	void 
org.apache.tomcat.service.http.HttpConnectionHandler.processConnection(org.a
pa
che.tomcat.service.TcpConnection, java.lang.Object [])
	void
org.apache.tomcat.service.TcpWorkerThread.runIt(java.lang.Object [])
	void org.apache.tomcat.util.ThreadPool$ControlRunnable.run()
	void java.lang.Thread.run()
===========================================

So, what I am thinking is....that on the specific request for generation of
a 
report I think that I am going to forward the request from the 
"ReportAction"(after doing processing to generate the report) to a special 
Action whose job will be to just send the PDF back to the browser. Is this
the 
best approach? What do you guys think?

thanks
-Srinivas






>===== Original Message From Sven Bischoff <sven.bischoff@web.de> =====
>hmm, i don't think that it works. what you're trying to do, is to
>generate 2 responses for one request (1: pdf-generation, 2: new
>info-page in window a).
>
>the only way i can think of, is to generate a second request on
>form-submission in window A via onclick=self.location.href="info.do" or
>onsubmit=...; and let the action mapped to info.do block until the
>pdf-generation has been finished. the pdf-generation action could set an
>attribute in session scope which the info-action periodically polls.
>when it finds the attribute, it returns the "look at window b"-forward.
>but i have absolutely no idea, if this works...
>
>sven
>
>Srinivas Sampige wrote:
>> Oops, thanks for the help. But in this case I am first opening another 
window
>> through javascript before calling this action and setting the target as 
that
>> window. So... the scenarion being window A is the main application
window. 
On
>> hitting "report" button windo "B" gets created and the target is set to 
window
>> B and the form in window A gets submitted. "ReportAction" gets executed.
As
>> per your suggestion I return null in "ReportAction". Okay, the PDF
appears
>> fine in window B, but when the PDF appears I want to return some output
to
>> window A also(for example.... Report generated successfully , please view

it
>> in window B ,save it bla bla bla ........ ) OR perhaps change the 
display(in
>> Window A) by forwarding to another JSP; I am asking this because this is 
what
>> I finally intend to do. Is this possible?
>>
>> thanks
>> Srinivas

------------------------------------------------------------
 Get your FREE web-based e-mail and newsgroup access at:
                http://MailAndNews.com

 Create a new mailbox, or access your existing IMAP4 or
 POP3 mailbox from anywhere with just a web browser.
------------------------------------------------------------


--
To unsubscribe, e-mail:
<mailto:struts-user-unsubscribe@jakarta.apache.org>
For additional commands, e-mail:
<mailto:struts-user-help@jakarta.apache.org>


[prev in list] [next in list] [prev in thread] [next in thread] 

Configure | About | News | Add a list | Sponsored by KoreLogic