468x60

lunedì 16 febbraio 2009

Monitorare le sessioni attive in JSP

Per tenere traccia delle sessioni attive in un'applicazione JSP occorre creare un listener di sessione che ci permetta di intercettare tutti i client che si connettono e si disconnettono. Per la creazione di un listener è necessario implementare la classe javax.servlet.http.HttpSessionListener. I metodi definiti dall'interfaccia sono i seguenti:
void sessionCreated (HttpSessionEvent e)
void sessionDestroyed (HttpSessionEvent e)
Il metodo sessionCreated() viene invocato nel momento in cui il Container crea una nuova sessione, mentre il metodo sessionDestroyed() viene invocato quando la sessione viene distrutta, sia nel caso in cui venga invalidata esplicitamente mediante il metodo invalidate(), sia nel caso in cui la sessione venga invalidata automaticamente dal container perché scade il timeout.

Entrambi i metodi ricevono in ingresso un'istanza della classe HttpSessionEvent, mediante la quale è possibile intercettare diverse informazioni sulla sessione.

Per la creazione pratica, nella nostra classe Listener definiamo una Collection di Stringhe che conterrà l'elenco delle sessioni create.

Nel metodo sessionCreated() aggiungiamo alla lista l'ID della sessione creata. Nel metodo sessionDestroyed() eliminiamo l'ID della sessione distrutta. Definiamo anche un metodo pubblico che ci permette di ottenere la lista delle sessioni attive.

public class HtmlSessionListener implements HttpSessionListener
{
private static Collection utenti = new ArrayList();

public void sessionCreated(HttpSessionEvent e)
{
System.out.println("Nuova sessione creata. ID sessione: " + e.getSession().getId());
utenti.add(e.getSession().getId());
}

public void sessionDestroyed(HttpSessionEvent e)
{
System.out.println("Distrutta sessione con ID " + e.getSession().getId());
utenti.remove(e.getSession().getId());
}

public static Collection getUtenti()
{
return utenti;
}
}
Per attivare il Listener è necessario definirlo nel file web.xml, nel seguente modo:

HtmlSessionListener
listener.HtmlSessionListener

Possiamo testare il tutto creando una pagina JSP, nella quale stampiamo il numero di sessioni attive con i relativi ID di sessione assegnati.


<%@page import="listener.HtmlSessionListener"%>

<%@page import="java.util.Iterator"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>

<head>

<title>Utenti connessi</title>

</head>

<body>

Gli utenti connessi al sistema sono

<%= HtmlSessionListener.getUtenti().size() %>



<%

Iterator<String> it = HtmlSessionListener.getUtenti().iterator();



while (it.hasNext()){

String id = it.next();

%><p><%= id %></p>

<%

}

%>

</body>

</html>


Per testare l'esempio, impostiamo un valore basso al timeout di sessione. Per farlo è necessario inserire nel web.xml il seguente tag:

Nessun commento:

Posta un commento

468x60

Cerca su Google

Cerca nel Blog con Google