Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312

    httpsession e HttpSessionBindingListener

    Buongiorno,
    sto studiando le sessioni in java e leggendo un tutorial ho trovato scritto questo:
    To let your values
    perform side effects when they are stored in a session, simply have the object you
    are associating with the session implement the HttpSessionBindingListener
    interface. That way, every time setAttribute is called on one of those objects, its
    valueBound method is called immediately afterward.
    Francamente non mi è molto chiaro. Qualcuno potrebbe spiegarmi quando utilizzare questa interfaccia e se posso farne a meno?
    Grazie

  2. #2
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284

    Re: httpsession e HttpSessionBindingListener

    Originariamente inviato da lio.b
    Francamente non mi è molto chiaro. Qualcuno potrebbe spiegarmi quando utilizzare questa interfaccia e se posso farne a meno?
    HttpSessionBindingListener è uno degli 8 listener relativi alle servlet. A differenza di altri listener, non va dichiarato nel DD (web.xml) perché non è un listener "globale" ma specifico solo di certi oggetti che la implementano.

    Il concetto è abbastanza semplice ed ha chiaramente a che fare con le sessioni. Se fai:

    session.setAttribute("unNome", mioOggetto);

    Se mioOggetto è di una classe che implementa HttpSessionBindingListener, allora proprio questo oggetto, esattamente questa istanza (non altre istanze!), viene notificata tramite il valueBound() che implementa. E quando verrà rimosso: valueUnbound().

    Per dirla a parole: l'oggetto è notificato quando esso viene aggiunto o rimosso tra gli attributi in sessione.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  3. #3
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Grazie.
    E' questo concetto che non capisco:'notifica' (che tra l'altro è lo stesso che viene descritto nella documentazione ufficiale). Che intendi per notifica?
    Nel senso, nel metodo bound cosa dovrei scrivere? un tipico esempio....
    Però dalla frase che ho postato dice che permette di fare side-effect altrimenti con il semplice utilizzo di session.setAttribute() sovrascrivo soltanto l'oggetto....è vero e pensa a tutto lui in modo trasparente?

  4. #4
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da lio.b
    E' questo concetto che non capisco:'notifica' (che tra l'altro è lo stesso che viene descritto nella documentazione ufficiale). Che intendi per notifica?
    Che "qualcuno", che in questo caso è il servlet container, invoca valueBound()/valueUnbound() sull'oggetto per segnalargli "guarda che sei stato inserito in sessione", "guarda che sei stato rimosso dalla sessione".

    Originariamente inviato da lio.b
    Nel senso, nel metodo bound cosa dovrei scrivere? un tipico esempio....
    Ma non è che c'è un esempio "tipico" .... dipende da cosa vuoi fare e per quale motivo l'oggetto ha bisogno di essere notificato quando viene inserito/rimosso in sessione.

    Un caso potrebbe essere questo: si stabilisce per esempio che se un certo tipo di oggetto viene inserito in sessione, servono altri attributi particolari in sessione per rendere coerente una certa gestione. Al valueBound() si potranno quindi settare questi altri attributi.

    Oppure un oggetto che contiene dati parziali (o vecchi) da un DB. Quando viene inserito in sessione è perché di certo serve per essere usato da altre entità nella webapp. A quel punto si potrebbe nel valueBound() "aggiornare" l'oggetto andando a leggere dal DB.

    Non so ... cose di questo tipo .... io ne ho solo "sparate" alcune che mi possono venire in mente.

    Originariamente inviato da lio.b
    dice che permette di fare side-effect
    Con questa frase non intende dire un effetto "collaterale" negativo (o altro che si può interpretare) ma il fatto: se un oggetto viene inserito/rimosso in sessione, fai come "effetto" anche qualcos'altro di conseguenza.

    Ed è proprio quel "qualcos'altro" da fare che dipende e che è il motivo per cui si ha bisogno di sfruttare HttpSessionBindingListener.
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

  5. #5
    Utente di HTML.it
    Registrato dal
    Sep 2008
    Messaggi
    312
    Ok, sei stato chiaro, grazie. Un'ultima cosa. il valuebound() è invocato prima o dopo il setAttribute()? Perchè dagli esempi che hai scritto dovrebbe essere eseguito dopo altrimenti prima inserisco un oggetto e poi lo vado ad aggiornare...non avrebbe senso.
    Ciao e grazie ancora

  6. #6
    Utente di HTML.it L'avatar di andbin
    Registrato dal
    Jan 2006
    residenza
    Italy
    Messaggi
    18,284
    Originariamente inviato da lio.b
    il valuebound() è invocato prima o dopo il setAttribute()?
    Dentro, internamente a setAttribute() !

    Nel senso, tu invochi setAttribute() su (Http)ServletRequest/ServletContext/HttpSession, questo va a scatenare internamente le invocazioni sui listener relativi agli attibuti (per la request ServletRequestAttributeListener, per la session HttpSessionBindingListener/HttpSessionAttributeListener ecc...)
    Andrea, andbin.devSenior Java developerSCJP 5 (91%) • SCWCD 5 (94%)
    java.util.function Interfaces Cheat SheetJava Versions Cheat Sheet

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.