• Post Reply Bookmark Topic Watch Topic
  • New Topic

problem in response.sendRedirect()  RSS feed

 
Anbu Dhana
Greenhorn
Posts: 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Hi All
I am trying to write a file download, after completion of the download, I am redirecting to some other url, using response.sendRedirect

But it throws the fallowing error


Servlet.service() for servlet FileDownloadZip threw exception
java.lang.IllegalStateException
at org.apache.coyote.tomcat5.CoyoteResponseFacade.sendRedirect(CoyoteResponseFacade.java:379)
at FileDownloadZip.doGet(FileDownloadZip.java:32)
at FileDownloadZip.doPost(FileDownloadZip.java:319)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:763)
at javax.servlet.http.HttpServlet.service(HttpServlet.java:856)
at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:284)
at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:204)
at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:256)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:563)
at org.apache.catalina.core.StandardContextValve.invokeInternal(StandardContextValve.java:245)
at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:199)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:563)
at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:195)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:164)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:149)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:563)
at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:156)
at org.apache.catalina.core.StandardValveContext.invokeNext(StandardValveContext.java:151)
at org.apache.catalina.core.StandardPipeline.invoke(StandardPipeline.java:563)
at org.apache.catalina.core.ContainerBase.invoke(ContainerBase.java:972)
at org.apache.coyote.tomcat5.CoyoteAdapter.service(CoyoteAdapter.java:209)
at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:781)
at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.processConnection(Http11Protocol.java:549)
at org.apache.tomcat.util.net.TcpWorkerThread.runIt(PoolTcpEndpoint.java:589)
at org.apache.tomcat.util.threads.ThreadPool$ControlRunnable.run(ThreadPool.java:666)
at java.lang.Thread.run(Thread.java:536)




The code that throws the error is


Could any one tell me how to over come this problem?

Thank you in advance
Anbu[BPSouther: Added code tags]
[ September 20, 2007: Message edited by: Ben Souther ]
 
David O'Meara
Rancher
Posts: 13459
Android Eclipse IDE Ubuntu
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
For a request, you only get to send one response to the client. The zip file is your response. Calling sendRedirect is equivalent to changing your mind and trying to send them somewhere else: you can't, it's too late.

If you want to do this, you need to call the other page first, and then get that page to call the zip file. Then the user will see the first page while the file downloads, but it is not possible to send them to another location once the download is completed. If you have a look at most download sites (eg sourceforge) this is how they do it.
 
Amol Nayak
Ranch Hand
Posts: 218
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
You cannot perform forwards or redirects once response is committed.

there is a method isCommitted in the ServletResponse,

You can use is before forwarding or redirecting.
 
Craig Peters
Greenhorn
Posts: 1
  • Mark post as helpful
  • send pies
  • Quote
  • Report post to moderator
Yeah, I'm running into this too -- and another variation on this topic is the case where IE sometimes chooses to download files vs. displaying them "in-line", for example Word or Excel files displayed within IE. When that happens, you can't go back to a known page first and "get it to do the download" since you don't always know what the browser is going to do -- invoke a download or just display in-line.

-Craig
  • Post Reply Bookmark Topic Watch Topic
  • New Topic
Boost this thread!