Sean Snyders a �crit :

Hello !

I'm not an expert, but according to the excellent and great book about
Servlets from O'Reilly :

The solution is continuing to compute after having closed the TCP link
providing temporary results. When reload or doing another request, the
user will see the new temporary result. I imagine you could put an
automatic RELOAD (refresh) to do it automatically...

This is done with init() and destroy()

Denis

> Thanx for the detailed explanation. Over the weekend, I sort-of came to
> the same solution but still have a few questions:
>
> Here is the scenario:
> I'm writing a small scale search engine. The browser sends the query
> to the server to do processing:
>
> (1) Now, with sessions: If a browser window is open and the guy makes
> a query and, say, the busy and progress indicator is showing whilst the
> server is processing
> the results, the user goes "BACK" to the initial query page and does another
> query. Is it still
> the same session (i.e. the same session ID) when the request gets to the
> server or what does
> actually happen?
>
> (2) "Once it is running, it places the worker object in state indexed by
> session.getId()." This
> is actually using the putValue of the Session to save your Thread object in
> the Session object ?
>
> Thank you, for this excellent response.
>
> Sean.
>
> >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


--

Denis Bucher,   /  [EMAIL PROTECTED]       T�l. +41-22-8000625   \  Internet
Horus Networks /  horus-networks.com    Fax: +41-22-8000622   \  Services
              /  http://www.horus.ch   US Fax: (508) 437-1261  \  Provider

___________________________________________________________________________
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

Reply via email to