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
Version imprimable
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:
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...:aie: des exemples si c'est possible
un truc du style devrait t'aider
ensuite pour l'utiliser tu faisCode:
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:
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:
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:
1
2 Hashtable ht = (Hashtable)System.getProperty("ListeSessions");
A+
non ce ne marchera pasCode:
1
2 Hashtable ht = (Hashtable)System.getProperty("ListeSessions");
getProperty retourne String
donc au mieux tu obtiendra un ClassCastException
Autant pour moi... J'ai oublié le niveau intermédiaire...
Fait ceci :
A+Code:
1
2
3
4
5
6
7 // Pour récupérer... Hashtable ht = (Hashtable)System.getProperties().getProperty("ListeSessions"); // Pour écrire Hashtable ht = new Hashtable(); System.getProperties().setProperty("ListeSessions", ht);
Merci Obutterlin
a+
scalappo