Sean;
I have had several requests to explain this so at some
point I will post a working sample.
It goes like this:
1. Browser sends request to servlet for long running
process.
2. Servlet receives request. The servlet thread
(requester) instantiates a "worker" object that
extends Thread.
3. The worker object has 3 public methods:
a) StringBuffer getStatus()
b) boolean isComplete()
c) void run() // for running Thread
Internally, the worker places progress messages in a
string buffer. This buffer is returned by getStatus().
When the worker is initialized, a boolean bComplete is
set to false. The run() method sets this boolean to
true when the run process is complete. (Preferably in
a finally block so it is guaranteed to "complete").
4. The requester initializes the worker and starts it
running.(start()) Once it is running, it places the
worker object in state indexed by session.getId().
5. The servlet now builds a web page that has
something like:
a) A status (IN PROGRESS)
b) A list of messages showing the progress of the
worker. (from worker.getStatus())
c) A refresh tag to resubmit the request to get an
update.
6. Every time the refresh submits, the servlet grabs
the worker from state (possibly still runing) and
grabs the status messages and tests to see if it is
complete.
7. If the worker is not complete, go to 5.
8. When the worker returns isComplete()==true, then
your long running process has finished.
9. The servlet now builds a web page that has
something like:
a) A status (COMPLETE)
b) A list of messages showing the progress of the
worker. (from worker.getStatus())
c) **NO** refresh tag.
10. The servlet removes the worker from state.
Done.
//Nicholas
--- Sean Snyders <[EMAIL PROTECTED]> wrote:
> The problem is as follows:
>
> I am not using 'n client side program (applet) for
> reasons
> of distribution and availability, thus I only have a
> browser doing "gets"
> from the server.
>
> This limits my application to one request from the
> server and then the
> client receives the result.
> If I have to do a refresh from the server as you
> suggested, the server will
> process this as a new request
> and start afresh. Does this mean session management?
> and does session
> management need a client application?
>
> Another question: What do you mean by: "Then I put
> the thread object in
> state."
>
> Thanx
>
> Sean.
>
> -: Sean Snyders
> -: mailto:[EMAIL PROTECTED]
> www.cs.sun.ac.za/~snyders
> -: Computer Science Department ph:
> +27-21-808-4393
> -: University of Stellenbosch fax:
> +27-21-808-4416
> -: Republic of South Africa
>
>
> -----Original Message-----
> From: Nicholas Whitehead <[EMAIL PROTECTED]>
> To: [EMAIL PROTECTED]
> <[EMAIL PROTECTED]>
> Date: 13 January 2000 19:03
> Subject: Re: Timing out of response data
>
>
> >There was recently a post about this issue. The
> person
> >was using IE though, and I believe they fixed it
> with
> >a patch.
> >
> >Alternatively, I tend to send a progress refresh
> back
> >to the browser when I have a long running process.
> >
> >Basically, I start a new thread and run the process
> in
> >that. Internally the thread updates a string buffer
> >with messages that tell the user the status of the
> >running process. Then I put the thread object in
> >state. I send a page back to the user trhat
> contains
> >the buffer messages plus a refresh tag.
> >
> >The page comes back and then periodically refreshes
> >with new data from the message buffer, until the
> >process completes. Then the complete message buffer
> is
> >returned with a completion announcement and no
> refresh
> >tag.
> >
> >Wasthatamouthful,itfeltlikeit.
> >
> >//Nicholas
> >
> >--- Sean Snyders <[EMAIL PROTECTED]> wrote:
> >> Hi,
> >>
> >> The following situation exists:
> >>
> >> I have a servlet that answers a request from a
> >> browser (the browser sending
> >> a request eg:
> >>
> >>
>
>http://host:8080/servlet/myServlet.class?QueryField=some_param_here)
> >> I then have ALOT of information to process and as
> >> they are processed I write
> >> them to the OutputStream
> >> of the response as such:
> >> first getting the outputstream:
> >> PrintStream outputStream = new
> >> PrintStream(response.getOutputStream());
> >> I then write to the stream like this:
> >> outputStream.println("<br> FINITO
> !");
> >> But this all occurs during processing done by my
> >> servlet.
> >>
> >> My browser, during all of this comotion, says
> >> "waiting for reply", is this
> >> correct, because I get a TIMEOUT error
> >> which terminates my servlet? Where does this
> error
> >> originate? Whilst I am
> >> writing to the outputstream the output doesn't
> >> appear
> >> on the browser. Only when the service method ends
> >> (when it doesn't timeout)
> >> it all appears on the browser. I've tried
> flushing
> >> the stream but to no
> >> avail. Why is this ?
> >>
> >> PLEASE HELP.
> >>
> >> Thanx.
> >>
> >> Sean.
> >>
> >>
> >>
> >> -: Sean Snyders
> >> -: mailto:[EMAIL PROTECTED]
> >> www.cs.sun.ac.za/~snyders
> >> -: Computer Science Department ph:
> >> +27-21-808-4393
> >> -: University of Stellenbosch fax:
> >> +27-21-808-4416
> >> -: Republic of South Africa
>
>
___________________________________________________________________________
> To unsubscribe, send email to [EMAIL PROTECTED]
> and include in the body
> of the message "signoff SERVLET-INTEREST".
>
> Archives:
>
http://archives.java.sun.com/archives/servlet-interest.html
> Resources:
>
http://java.sun.com/products/servlet/external-resources.html
> LISTSERV Help:
> http://www.lsoft.com/manuals/user/user.html
>
=====
"Piper, Piper the red red worm
awoke last night to the sound of the storm
the words are the words I sailed upon."
Piper, Phish
--
Nicholas Whitehead
__________________________________________________
Do You Yahoo!?
Talk to your friends online with Yahoo! Messenger.
http://im.yahoo.com
___________________________________________________________________________
To unsubscribe, send email to [EMAIL PROTECTED] and include in the body
of the message "signoff SERVLET-INTEREST".
Archives: http://archives.java.sun.com/archives/servlet-interest.html
Resources: http://java.sun.com/products/servlet/external-resources.html
LISTSERV Help: http://www.lsoft.com/manuals/user/user.html