mercoledì 15 ottobre 2008

Contatore di Sessioni HTTP Attive

In un applicazione web scritta in Java è possibile contare il numero di sessioni http attive sul server tramite una classe che implementa javax.servlet.http.HttpSessionListener:

package web;
import javax.servlet.http.*;
public class SessionCounter implements HttpSessionListener {
private static int sessionCounter = 0;
public void sessionCreated(HttpSessionEvent evt) {
sessionCounter++;
}
public void sessionDestroyed(HttpSessionEvent evt) {
sessionCounter--;
}
public static int getSessionCounter() {
return sessionCounter;
}
}

In /WEB-INF/web.xml è necessario aggiungere un elemento per definire un application listener specificando il nome della classe appena creata:

<?xml version="1.0" ...>
<web-app>
<listener>
<listener-class> web.SessionCounter </listener-class>
</listener>
...
</web-app>

Infine è possibile conoscere ed eventualmente visualizzare su una pagina jsp il numero delle sessioni http attive nel seguente modo:

sul server ci sono <%=web.SessionCounter.getSessionCounter()%> sessioni attive

In genere tale conteggio può essere utile per capire quanti utenti sono presenti contemporaneamente su un sito web. Inoltre, aggiungendo una semplice struttura dati(p.e. un Vector aggiornato opportunamente quando vengono invocati i metodi sessionCreated e sessionDestroyed) alla classe SessionCounter, è possibile anche determinare quali utenti sono connessi al server in un dato istante.
Non è superfluo notare che il metodo public void sessionDestroyed(HttpSessionEvent evt) viene invocato sia nel caso in cui la sessione venga invalidata esplicitamente, per esempio attraverso un metodo logout(), sia che la sessione venga invalidata dal container, perchè scade il timeout di sessione attiva.

Nessun commento: