PDA

Visualizza la versione completa : [JAVA/JSP] Codice lato server al caricamento di JSP


orione1979
24-01-2006, 12:12
Ciao a tutti,
problema semplicissimo:
1. quando carico il body di una pagina jsp posso eseguire codice lato server in questo modo:
<body onLoad="<%session.setAttribute("nome_attributo","oggetto");%>" />

?

2. quando invece "scarico" il body di una pagina jsp posso eseguire codice lato server in questo modo:
<body onUnload="<%session.removeAttribute("nome_attributo");%>" />
?
Grazie in anticipo

floyd
24-01-2006, 12:18
1- s ma ha lo stesso effetto di mettere il codice in cima alla jsp
2- certo ma vedi 1

la jsp una servlet, il codice java che si trova nella jsp viene eseguito al momento della richiesta, dunque genera la pagina html che viene mandata al client, se devi eseguire del codice sul server dopo il caricamento della pagina devi per forza mandare una nuova richiesta

orione1979
24-01-2006, 13:41
Grazie. In effetti nel punto 2 ho commesso una piccola imprecisione. Il codice che vorrei eseguire dovrebbe partire alla chiusura del browser, non tanto al cambiamento di pagina.
Sostanzialmente, devo fare in modo che se un utente non esegue il logout ma esce semplicemente chiudendo il browser, l'oggetto Connessione che rappresenta la connessione ad un db venga rimosso dalla sessione. C' un modo per fare ci?
Il mio dubbio che chiudere il browser non vuol dire effettuare una richiesta al server; n tantomeno posso usare un evento javascript del tipo:
<body onExit="<%session.removeAttribute("nome_attributo");%>" />
visto che esso non pu fare elaborazioni lato server.... :master: Idee?

floyd
24-01-2006, 13:53
prima di un'idea, una domanda
lasci le connessioni aperte alla fine dell'esecuzione di una jsp?

orione1979
24-01-2006, 16:02
Si, le connessioni mi serve che vengano chiuse al logout dell'utente e solo allora. Al massimo, quando l'utente chiude il browser dimenticando di effettuare il logout (da cui il punto 2).

floyd
24-01-2006, 16:18
ecco
le connessioni al database si chiudono appena non se ne ha pi bisogno per motivi di sicurezza
metti che uno si logga, lascia il browser per due ore l
la sessione scade, la connessione resta aperta e sei costretto a scrivere codice per gestire questo problema
e questo si potrebbe risolvere
metti che succede un errore in una transazione, nessuno fa commit n rollback, tutte le altre sessioni sono bloccate da quella in errore
ma anche questo si potrebbe risolvere
metti che il tuo sito ha 1000 (e non sono molti) accessi contemporanei, tu lasci aperte 1000 connessioni :dott:
i connection pool servono a migliorare la gestione delle connessioni ma in questo modo tu li eviti
io ti sconsiglio vivamente di lasciare le connessioni aperte

se non ne puoi fare a meno (anche se non ne vedo il motivo) puoi creare una classe listener sulla session e alla creazione apri una connessione, alla distruzione la chiudi
http://java.sun.com/j2ee/1.4/docs/api/javax/servlet/http/HttpSessionListener.html

orione1979
24-01-2006, 16:49
Grazie di cuore, provo a risolvere la questione con i listener.
Visto che ci siamo, ti chiedo solo di dirmi se il mio punto 2 rappresenta un errore concettuale oppure, tralasciando l'aspetto efficienza, quello che ho scritto ha un senso.
Ovvero, alla chiusura del browser, si pu comunque eseguire codice lato server che coinvolga la sessione oppure impossibile?
Ciao

floyd
24-01-2006, 17:08
la chiusura del browser o il passaggio di dominio da www.tuosito.com a www.sonoaffarisuoi.com non puoi vederlo sul server
puoi eseguire codice alla distruzione della sessione

Loading