Bonjour,
Je cherche a savoir comment faire pour que le servlet connaisse et accede a toutes les sessions ouvertes?
Faut il crée un conteneur de session,utiliser javaBean, ou fonction interne a tomcat ....
Merci d'avance
Bonjour,
Je cherche a savoir comment faire pour que le servlet connaisse et accede a toutes les sessions ouvertes?
Faut il crée un conteneur de session,utiliser javaBean, ou fonction interne a tomcat ....
Merci d'avance
de memoire je crois qu'il existe un SessionEventListener
merci de ta reponse mais j'ai un petit probleme a savoir comment l'ajou d'un listener me permettra d'avoir un conteneur de session.
il te suffit de créer un singleton qui implement cette interface
il suffira de maintenir un cache (une hashmap par exemple) qui conservera la liste des context
Salut,
moi aussi je cherche une solution pour un pb identique.
je voudrais récupérer toutes les sessions ouvertes par les users connectés. j'ai trouvé une solution dans le web qui utilise la classe HttpSessionContext, voici le code:
cette solution ne fonctionne pas, car le context.getIds(); renvoie une Enum vide.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12 HttpSession dummySession = req.getSession(true); HttpSessionContext context = dummySession.getSessionContext(); // Use the session context to get a list of session IDs Enumeration ids = context.getIds(); // Iterate over the session IDs checking for stale sessions while (ids.hasMoreElements()) { String id = (String)ids.nextElement(); out.println("Checking " + id + "..."); HttpSession session = context.getSession(id);
Si vous avez des réponses à ce sujet...des exemples si c'est possible
un truc du style devrait t'aider
ensuite pour l'utiliser tu fais
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36 import java.util.HashMap; import java.util.Iterator; import javax.servlet.http.HttpSession; import javax.servlet.http.HttpSessionEvent; import javax.servlet.http.HttpSessionListener; public class SessionListener implements HttpSessionListener { private static SessionListener me = new SessionListener(); private HashMap<String, HttpSession> sessions = new HashMap<String, HttpSession>(); private SessionListener() { } public void sessionCreated(HttpSessionEvent hse) { sessions.put(hse.getSession().getId(), hse.getSession()); } public void sessionDestroyed(HttpSessionEvent hse) { sessions.remove(hse.getSession().getId()); } public static SessionListener getInstance() { return me; } public Iterator<HttpSession> getSessions() { return sessions.values().iterator(); } }
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 SessionListener.getInstance().getSession();
Pour faire ce genre de traitement, il suffit de créer un objet implémentant l'interface HttpSessionBindingListener.
Tu définis la méthode valueBound et tu sauvegarde dans le context serveur la session en cours dans une liste.
Il faut également définir la méthode valueUnbound pour supprimer la référence quand la session s'arrête.
Ensuite, tu peux savoir à tout moment quelles sessions sont actives.
Tu peux utiliser autre chose qu'une Hashtable bien sûr...
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 public void valueBound(HttpSessionBindingEvent event) { Hashtable ht = System.getProperty("ListeSessions"); if ( ht == null ) ht = new Hashtable(); ht.put(event.getSession(), event.getSession()); } public void valueUnbound(HttpSessionBindingEvent event) { Hashtable ht = System.getProperty("ListeSessions"); if ( ht != null ) ht.remove(event.getSession()); }
A+
Oups, trop tard... Désolé Austin P.
Merci de votre reponse
pourriez vous m'expliquer ce que fait cette methode:
Hashtable ht = System.getProperty("ListeSessions");
parceque le recoit le message suivant
Type mismatch: cannot convert from String to Hashtable
Merci
scalappo
Oui, effectivement, il faut caster
System.getProperty("unNom") sert à récupérer du context application un objet nommé "unNom" (dans l'exemple).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Hashtable ht = (Hashtable)System.getProperty("ListeSessions");
A+
Partager