[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