JSP (page direction) problem.

Posted on 2002-03-12
Medium Priority
Last Modified: 2008-03-10
First, my set-up is.. weblogic, ejb backend, jsp front end, with a servlet brokering requests.

My problem is that I need to execute some serverside work, as a result of a POST request, that can take up to 2 hours to complete (legacy system). Therefore the browser times out b4 it's completed......

In "pseudocode" what I (the servlet) need to do is...

* recieve and handle POST request
* display a re-freshing "please wait" page/jsp to avoid
  the browser timing out the request.
* execute the work that can take hours.
* redirect to "finished" page & display details.

The main difficultly is that you seem to be only able to call HttpServletResponse::sendRedirect() *once*, it says so in the docs.

So I call it once to display the "please wait" page, but then can't call it again to show the "finished" page.

But also, weblogic seems to ignore my request to display the "please wait" page until *after* the 2-hour long method executes! I've tried flushing the buffers but it doesn't help.

any suggestions greatly appreciated!

Question by:somadude
  • 3
  • 2
  • 2
  • +5

Expert Comment

ID: 6857181
One possibility would be to use javascript to create a new window just before the submit is processed.  the new window would display the "please wait" and could do refreshing to avoid timeouts.  Once the initial window is finished processing it can close that secondary window via javascript.  The down-side is that you end up with two windows rather than one.

You could also do some shenanigans using frames and create the same type of behavior if keeping it one window is important.
LVL 18

Expert Comment

ID: 6857280
LVL 18

Expert Comment

ID: 6857326
use thread, something like this:

public class BackgroundProcessorServlet extends HttpServlet implements Runnable {

     private static final int NOT_WORKING = 0;    
     private static final int WORKING = 1;

     Thread runner; // this is the thread that does the work
     int status;
     String strStatus;
     public void init(ServletConfig config) throws ServletException
          status = NOT_WORKING;
          strStatus = "Not working";

     public void doGet(HttpServletRequest req, HttpServletResponse res)
                         throws ServletException, IOException {

          PrintWriter out = res.getWriter();

          if (status != WORKING) {
               runner = new Thread(this);
               runner.setPriority(Thread.MIN_PRIORITY); // be nice ;)

               strStatus = "Working";
               status = WORKING;

     public void doPost(HttpServletRequest req, HttpServletResponse res)
                         throws ServletException, IOException {

     public void run() {

          // make the thread do whatever you need it to do

          // when your done, set strStatus and status back to not working


The 14th Annual Expert Award Winners

The results are in! Meet the top members of our 2017 Expert Awards. Congratulations to all who qualified!

LVL 86

Expert Comment

ID: 6858704
Don't know if this would work, but you could try to add this to your headers of your 'wait' screen.
<META HTTP-EQUIV=Refresh CONTENT="180; URL=http://www.your-wait-page.jsp/"> This *should* cause is to refresh every three minutes in your browser. You could maybe then get the servlet to check a variable and redirect when the data is available, otherwise simply return.

Expert Comment

ID: 6859164
Look at this website:


Author Comment

ID: 6859997
CEHJ - I actually tried a something almost exactly like that a few days ago. What I did was..

* redirect to wait page
* continue processing
* wait-page checks flag in session to see if processing is
  finished, if finished, redirect to finish-page.
* processing is finished, flag is set in session

I thought this was going to work, but there are 2 problems

1) you can only call response.sendRedirect once
2) alot of the time, weblogic won't even display the
   wait-page until the server-side processing is
   finished. ??
LVL 86

Expert Comment

ID: 6860016
As far as the problems are concerned:

1) Surely you only need to redirect once per page - once to the 'wait' page, then once to the 'finished' page (redirected *by* the wait page)?

2) You are doing the processing in another thread aren't you?

Of course, you really need messaging paradigms for this sort of thing...

Accepted Solution

saxaboo earned 800 total points
ID: 6860119

having faced this problem a number of times, I'm truly convinced that the solution is not such or such technical trick.
The real question is : do you really need synchronous processing ?

Imagine one of you users posting data to your app, which sends it to your back-end and manages to somewhat make the browser "wait" for the response. Your user is very unlikely to wait for the response doing nothing but looking at the browser screen. He or she will probably return back to Word or PowerPoint to do something else, maybe have a coffee break, and maybe every 15 minutes he or she will Alt-tab to IE to see if the result is here.

My point is : even if your system is synchronous, your end-user is probably not. I may be mistaken but the question is worth asking.

A more "conventional" solution would therefore be to launch the task as an asynchronous process, by starting a thread like bobbit31 suggested (better : use a Message-driven bean !), or using a MOM like MQSeries, and immediately returning a page saying "Your request is being processed. Check out <a href="/results_received.jsp">this page</a> for results every 2 hours or so !"

When you task completes, it writes something somewhere in your local DB (or in a file, or whatever ...) saying "the request submitted by user 'chandler' returned the following results : blah blah ...."

And your results_received.jsp questions your DB to check if any results have been received from the back-end.

As a conclusion, I suggest you to work on the functional side first

LVL 86

Expert Comment

ID: 6860147
I'd go along with Saxaboo on this one, as the last line of my previous message suggests.

You could even implement a quick and dirty email solution!

Author Comment

ID: 6861134
saxaboo - yeah I agree with you, I actually started checking out JMS this morning, looks like it could be the ticket.

Expert Comment

ID: 7901842
No comment has been added lately, so it's time to clean up this TA.
I will leave a recommendation in the Cleanup topic area that this question is:
Answered by: saxaboo
Please leave any comments here within the next seven days.
EE Cleanup Volunteer

Expert Comment

ID: 7962606
Per recommendation, force-accepted.

EE Admin

Featured Post

Free Tool: Path Explorer

An intuitive utility to help find the CSS path to UI elements on a webpage. These paths are used frequently in a variety of front-end development and QA automation tasks.

One of a set of tools we're offering as a way of saying thank you for being a part of the community.

Question has a verified solution.

Are you are experiencing a similar issue? Get a personalized answer when you ask a related question.

Have a better answer? Share it in a comment.

Join & Write a Comment

Are you developing a Java application and want to create Excel Spreadsheets? You have come to the right place, this article will describe how you can create Excel Spreadsheets from a Java Application. For the purposes of this article, I will be u…
In this post we will learn how to connect and configure Android Device (Smartphone etc.) with Android Studio. After that we will run a simple Hello World Program.
Viewers learn about the third conditional statement “else if” and use it in an example program. Then additional information about conditional statements is provided, covering the topic thoroughly. Viewers learn about the third conditional statement …
This video teaches viewers about errors in exception handling.

624 members asked questions and received personalized solutions in the past 7 days.

Join the community of 500,000 technology professionals and ask your questions.

Join & Ask a Question