Buongiorno a tutti.
Mi trovo a postare dopo che ho sperimentato, per diversi mesi, delle situazioni di errore decisamente strane e controverse. L'ultima mi ha convinto a postare perchè forse sto sbagliando qualcosa.
Mi trovo in questa condizione: ho una Servlet (in realtà in più di una capita la stessa cosa) che saltuariamente lancia delle eccezioni che non possono verificarsi (o almeno non potrebbero).
Esempio:
Se riesco ad arrivare oltre il primo controllo, mi aspetto che esista una sessione e che essa sia attiva. Ora, se così è (ditemi se sto sbagliando), so per certo che all'interno della sessione esiste un oggetto: infatti ho un SessionListener che, alla creazione di una sessione, crea questo oggetto e lo butta dentro (una volta inserito questo oggetto non viene mai più rimosso fino alla invalidazione della sessione).codice:// Recupero la sessione dell'utente, se ne ha una! HttpSession s = request.getSession( false ); // Controllo se ha una sessione attiva: if (s == null) { // Lo indirizzo verso una pagina d'errore, che gli indica che la sua sessione è scaduta. ... }
Quindi:
Ma, magia delle magie, capita che venga lanciata una NullPointerException all'esecuzione di questa seconda if... ergo, l'oggetto DatiUtente è nullo, ergo... che ergo? Che la sessione è scaduta fra il primo ed il secondo if?? Possibile??codice:DatiUtente utente = (DatiUtente) s.getAttribute("utente"); if ( utente.isAbilitato() ) { // L'utente è abilitato a fare certe cose } else { // L'utente non è abilitato a fare cose particolari }![]()
Nessun problema insormontabile: ho tapezzato così:
Oltre al fatto che la cosa non mi piace (ma non ho trovato altri sistemi più decenti), rende il codice della Servlet un porcile...codice:DatiUtente utente = (DatiUtente) s.getAttribute("utente"); if (utente == null) { // Faccio finta che la sessione fosse già scaduta // e lo mando a spasso lo stesso... } if ( utente.isAbilitato() ) { // L'utente è abilitato a fare certe cose } else { // L'utente non è abilitato a fare cose particolari }
Ma veniamo all'assurdo: ho una bella pagina HTML con un form, grossomodo così fatto:
Fra le varie opzioni presenti all'interno della combo box la prima viene sempre selezionata di default, quindi almeno un valore per quel campo c'è sempre.codice:<form action="/Servlet?act=pippo" method="post"> <select name="destinazione" size="1" style="width: 90%"> <option value="0" selected="selected">Prima opzione</option> <option value="1" >Seconda opzione</option> </select> </form>
Questo è il codice che raccoglie quel valore:
Oggi quel codice mi ha sollevato la seguente eccezione:codice:... String dst = request.getParameter("destinazione"); int indice = Integer.parseInt( dst );
Domanda: ma come è possibile che sia arrivato un valore nullo se almeno un valore è sempre selezionato?? Da notare che la parte di codice che ho postata è subordinata all'esistenza di una sessione attiva...codice:NumberFormatException: null at java.lang.Integer.parseInt(unknown source) ...
Chiedo lumi a chi con le Servlet ci programma da più tempo di me...
Ciao.![]()



Rispondi quotando
