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:[EMAIL PROTECTED]] Sent: December 30, 2002 9:13 PM To: Sven Bischoff Cc: [EMAIL PROTECTED] 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 <[EMAIL PROTECTED]> ===== >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:[EMAIL PROTECTED]> For additional commands, e-mail: <mailto:[EMAIL PROTECTED]>