Domanda

Sono nuovo di JEE e questo è ciò che mi confonde.Secondo HttpSession.html # setMaxInactiveInterval(intervallo int) documentazione

Un interval valore di zero o meno indica che il la sessione non dovrebbe mai timeout.

ma secondo il mio libro di testo (che ha già pochi anni - quindi mi aspetto che non sia sempre giusto) l'uso di zero come argomento dovrebbe causare immediatamente il timeout della sessione.

Questo codice

public class Test extends HttpServlet {

    protected void doGet(HttpServletRequest request,
            HttpServletResponse response) throws ServletException, IOException {

        response.setContentType("text/html");
        response.setCharacterEncoding("utf-8");

        PrintWriter out = response.getWriter();

        HttpSession session = request.getSession();
        session.setAttribute("foo", 42);
        session.setMaxInactiveInterval(0);

        out.println(session.getAttribute("foo"));//problem here

    }
}

utilizzato su Glassfish 4.0 sembra confermare la teoria dal libro di testo invece della documentazione ufficiale più recente perché restituisce Stato HTTP 500-Errore interno del server con messaggio di errore

java.lang.IllegalStateException: getAttribute: Session already invalidated

Cosa sta succedendo qui?Questo bug di Glassfish 4.0 o la documentazione è sbagliata?O forse c'è una terza opzione?


PS.Questo codice funziona come dovrebbe con valori negativi (la sessione non è invalidata) e sto usando -1 anziché 0 nel mio codice.Sono solo interessato a cosa c'è di sbagliato in 0.

È stato utile?

Soluzione

Il Specifica servlet capitolo sugli stati di timeout della sessione

Per definizione, se il periodo di timeout per una sessione è impostato su -1, il la sessione non scadrà mai.

Così GlasshFish sembra avere che coperto.Non riesco a trovare alcun riferimento nella specifica che dice che lo stesso dovrebbe essere vero per un valore di 0 con setMaxInactiveInterval().Tuttavia dice

Il session-config definisce i parametri di sessione per questo Web applicazione.Il sottoelemento session-timeout definisce il valore predefinito intervallo di timeout della sessione per tutte le sessioni create in questo Web applicazione.Il timeout specificato deve essere espresso in un intero numero di minuti. Se il timeout è 0 o inferiore, il contenitore assicura il comportamento predefinito delle sessioni non è mai il timeout.Se questo elemento non è specificato, il contenitore deve impostare il periodo di timeout predefinito.

Altri suggerimenti

Questo è già time out e invalidare

session.setMaxInactiveInterval(0); // mean inactive immediately

Quindi questo è il messaggio di errore corretto.(si prega di fare riferimento testa prima libro per ulteriori riferimenti.)

Si sta tentando di accedere al valore dell'oggetto che non esiste.è già distrutto

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top