Originariamente inviato da SyLaR_is_back
Ciao e grazie della risposta.
Magari è una domanda stupida ma quello che non ho capito è: esiste una ed una sola istanza per ogni servlet a livello globale o per il singolo utente?
A livello globale. Il ServletContainer è uno ed uno solo: Tomcat.

Nello specifico il mio problema è questo.
Ho una classe ControllerX che come prima cosa prende l'id utente dalla classe BeanUtente salvato nella sessione.
Poniamo ke l'id dell'utente X sia 000.
Successivamente la servlet fa dei controlli e altre cosette sue.
E prima di chiamare la nuova pagina chiama un metodo che (tramite facade, bo e dao) arriva sul db e carica una lista di oggetti, che verranno visualizzati poi sulla pagina.
questo metodo prende come parametro proprio l'id utente.
E' possibile che l'id venga sporcato da un ipotetico utente Y che si collega nell'arco temporale tra il getID dalla session e la chiamata di quel metodo? questo spiegherebbe perche alcune volte (casi rarissimi) l'utente X visualizza i dati dell'utente Y, cioè la funzione di caricamento dati viene chiamata con l'id di qualcun'altro

Utente X chiama servlet
.....
idUtenteX = 000 (getID dalla sessione dell'utente X)
...
....*Utente Y chiama servlet
....*idUtenteY = 111 (getID dalla sessione dell'utente Y)
.....
listaObj = caricaLista_UtenteX(111)
...
nuova pagina....

Quello che mi preme sapere è se effettivamente l'utente X e quello Y scorrono la stessa porzione di codice, cioè se lavorano sulla stessa istanza della servlet. Spero di essere riuscito a spiegare il problema
Le servlet, per loro natura, non sono thread-safe. Questo significa che è compito del programmatore evitare situazioni in cui due thread diversi (ovvero, due richieste simultanee diverse) si pestino i piedi a vicenda. La cosa si ottiene usando solo variabili locali (ciascun thread che invoca i metodi della servlet avrà la sua copia dello stack). Se si usano variabili "globali", ovvero di istanza per la servlet, vanno usate in modo molto cauto.

La regola aurea è quella di non usare variabili di istanza per memorizzare informazioni relative ad una richiesta, bensì usare le variabili locali e/o gli attributi di sessione.


Ciao.