Newsgroup: it.comp.java
Titolo: jsp e chiusura browser

Salve,sto sviluppando una piccola applicazione composta da un bean ed alcuni
jsp.Avrei bisogno di eseguire alcune operazioni nel caso in cui il browser
venga chiuso in maniera brutale(con la 'X' per intenderci).qualcuno ha
qualche idea?
Grazie in anticipo.


Credo non ci siano speranze: Il server non ha nessuna possibilita' di
sapere se un'applicazione e' stata chiusa.
Cosa dovresti fare, esattamente ?
-- 
Giambo - Occhio al filtro antispam _e_ alla whitelist !

vascaiolo wrote:

Si. Rivedere il programma in modo da non dover far affidamento su eventi 
del browser su cui non ha controllo (come questo).

vascaiolo wrote:

HttpSessionListener
articolo su:
http://www.onjava.com/pub/a/onjava/2001/04/12/listeners.html?page=1
-- 
Davide Consonni
http://csvtosql.sourceforge.net

 
http://www.onjava.com/pub/a/onjava/2001/04/12/listeners.html?page=1
La sessione non viene notificata della chiusura del browser, per cui il 
listener se ne accorgerebbe solo allo scadere della stessa.
Come dicevo, è bene che la webapp non abbia bisogno di essere notificata 
di questo evento.



Io farei in questo modo... un po' contorto, ma potrebbe funzionare:
1) Crea un'applicazione-miniserver, sempre in java, che giri parallelamente
al webserver (sulla stessa macchina ovviamente) e che resti in ascolto su
una porta superiore a 1024
2) Crei un'applet semplicissima da "infilare" nelle pagine inviate ai
browser (magari in un frame a parte) il cui unico compito è di connettersi
via socket all'applicazione di cui sopra, trasmettendogli una sorta di
identificativo univoco creato al momento di generare la sessione - hint:
potresti usare lo stesso JSPSESSIONID...
3) Quando l'utente maldestro chiude brutalmente il browser, l'applet si
disconnette dal suo miniserver. Il miniserver rileva la disconnessione
socket, ma essendo ancora attivo ha la possibilità di mettersi in contatto
con il webserver (127.0.0.1). A questo punto dal miniserver richiami una
pagina del webserver (una jsp o servlet o quello che vuoi) per effettuare
tutte le operazioni after-death che desideri. Per sapere come:
http://java.sun.com/j2se/1.4.2/docs/api/java/net/URL.html
Ovviamente nella creazione dell'URL includerai anche l'identificativo di
sessione generato...
-- 
Fermiamo Scientology prima che sia troppo tardi!!!
http://xenu.com-it.net
 - 
http://xenu.freewinds.cx/
 - 
http://www.xenu.net/
(per rispondere personalmente leva IlDitoDalCulo)

 Io farei in questo modo... un po' contorto, ma potrebbe funzionare:
In realtà, un sistema utilizzato (es. alcune webmail, che hanno bisogno 
di sapere quando l'utente ha finito per togliere il lock alla casella 
postale) è quello di aprire una pagina di uscita durante l'unload della 
pagina principale. Questo vincola però l'utente ad avere javascript 
attivato e non funziona se l'utente killa il browser in modo brutale. Si 
tratta comunque di meccanismi fragili, notavo infatti che capitava di 
frequente che accedendo POP3 alla casella postale questa rimanesse 
lockata per svariato tempo (in pratica fino allo scadere della sessione) 
dopo aver usato la webmail, a meno che non facessi una logoff esplicita.
Io non ci perderei molto tempo nel tentativo di essere più realisti del re.

 attivato e non funziona se l'utente killa il browser in modo brutale. 
io uso questo sistema e funziona bene. I problemi sono: L'utente non ha 
Javascript oppure il browser ha disabilitato i popup.
In quei casi non c'e' soluzione. Aspetti la chiusura della sessione, 
magari imposti un timeout molto basso.
Se devi fare alcune operazioni critiche, usi l'event listener, come t 
han gia' detto. Funziona molto bene.
In ogni caso, al massimo, il sistema aspettera' il timeout, per 
effettuare le operazioni critiche.
Ciao
[CUT]
-- 
            Davide Gurgone
      web: 
http://www.gurgone.it/
mail: davidechiocciolinagurgonepuntoit

Inanzitutto ringrazio tutti per avermi risposto in maniera cosě
esauriente.Il mio problema č che questo programma deve funzionare su pocket
pc che non supporta le applet,altrimenti avrei usato la destroy di essa.ciň
che devo fare č rilasciare dei record bloccati da una transazione,in poche
parole dovrei lanciare un setAutocommit(true) sul bean subito prima che
venga chiusa la finestra...chiedo troppo eh?

l'evento onUnload del body? Hai gia' provato?
-- 
---
Francesco Galli / Cinghiale Mannaro
Personal: 
http://cinghialemannaro.splinder.com
TMS project: 
http://tms.inera.it


 si ho provato,ma non funziona se viene chiuso brutalmente il browser.Ho
risolto in un altro modo,aggirando il problema,grazie mille a tutti per
l'attenzione.

QUALE modo? magari interessa anche agli altri, no? :-)


 sessione generato...
Si potrebbe ovviare al problema della porta con meccanismi + articolati :
l'applet fantasma quando "pinga" anziche' contattare il "miniserver"
contatta un URL sulla 80. Questo URL e' un action ( una servlet)
che puo' fare una delle seguenti cose:
1. modifica qualcosa di persistente, tipo db o file e il miniserver pinga su
questo per vedere se si e' diconnessa l'applet ( non un granche')
2. l'action(sertvlet) pinga a sua volta sul miniserver, che puo' stare in
ascolto in qualsiasi modalita' : HTTP su una porta != 80, RMI, o quello che
volete
, e questa forse e' la soluzione migliore di tutte
ciao Nicola
--------------------------------
Inviato via 
http://arianna.libero.it/usenet/

 ciao Nicola


 ha scritto nel
messaggio news:4263...@x-privat.org...

Hai ragione chiedo venia,praticamente ho dato una chiave identificativa ad
ogni sessione che si connette al bean,e ad ogni accesso al db da parte dei
jsp setto sul bean il tempo in millisecondi del momento dell'accesso.Con un
thread poi controllo da quanto tempo ogni sessione è ferma,se è ferma da più
tempo di quanto ho deciso io la chiudo.non so se sono stato chiaro...

 tempo di quanto ho deciso io la chiudo.non so se sono stato chiaro...
sei stato chiarissimo, ma nn ho capito una cosa: che c'entra quello che hai
fatto con la tua domanda iniziale?
quello che hai fatto č che hai replicato il meccanismo esistente di gestione
delle sessioni, cioč puoi fare la solita ed identica cosa settando il ttl
della sessione a quanto vuoi tu! ci pensa poi il container a fartela
expirare
la domanda iniziale era come accorgersi lato server della chiusura del
browser e l unico modo per farlo č intercettarlo lato client con ad esempio
js e notificarlo in qualche modo al server o via applet e comunicazione tcp
based o tramite una chiamata ad una url, quindi http e parametri,  messa li
apposta.......
ciaps