HttpSession
è fondamentalmente una mappa dalla chiave di stringa a qualche valore arbitrario. Ogni volta che crei una sessione (accedendo a JSP o chiamando getSession()
/getSession(true)
), il contenitore genera un ID di sessione stringa univoco e contiene un riferimento a quell'oggetto HttpSession
. Di nuovo, utilizzerà una mappa dall'ID di sessione all'oggetto HttpSession
.
Una volta inserito qualcosa nella sessione, il contenitore contiene un riferimento a quella sessione e la sessione contiene un riferimento all'oggetto. Rimarrà lì per un po 'di tempo. Ci sono tre situazione quando il vostro oggetto sarà rimosso dalla sessione:
Quando si rimuove in modo esplicito (removeAttribute()
o setAttribute(null)
)
Quando si invalidate()
l'intera sessione. In pratica rimuove tutti gli attributi e rimuove l'intera sessione dalla mappa di sessione gestita dal contenitore
Quando scade la sessione (stesso comportamento di 2.) Ciò si verifica quando nessuna sessione servlet/JSP accede in un intervallo di tempo configurabile (ad esempio 10 minuti)
il momento in cui un oggetto viene rimosso dalla sessione (uno dei punti di cui sopra) e nessun altro codice contiene un riferimento a tale oggetto, è idonea per la raccolta dei rifiuti e verrà rimosso durante successiva esecuzione GC .
È possibile aggiungere un oggetto che implementa HttpSessionBindingListener a un HttpSession per osservare alcuni dei comportamenti di cui sopra. Un oggetto che implementa questa interfaccia potrebbe, ad esempio, stampare un messaggio di log quando non è associato alla sessione.
È possibile controllare il documentation here.
fonte
2012-07-12 16:48:30