IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Servlets/JSP Java Discussion :

Conteneur de session


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Par défaut Conteneur de session
    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

  2. #2
    Membre confirmé Avatar de austin P.
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Par défaut
    de memoire je crois qu'il existe un SessionEventListener

  3. #3
    Membre averti
    Profil pro
    Inscrit en
    Juin 2006
    Messages
    51
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2006
    Messages : 51
    Par défaut
    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.

  4. #4
    Membre confirmé Avatar de austin P.
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Par défaut
    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

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Décembre 2006
    Messages
    67
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2006
    Messages : 67
    Par défaut
    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:

    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);
    cette solution ne fonctionne pas, car le context.getIds(); renvoie une Enum vide.
    Si vous avez des réponses à ce sujet... des exemples si c'est possible

  6. #6
    Membre confirmé Avatar de austin P.
    Inscrit en
    Juin 2004
    Messages
    182
    Détails du profil
    Informations personnelles :
    Âge : 50

    Informations forums :
    Inscription : Juin 2004
    Messages : 182
    Par défaut
    un truc du style devrait t'aider

    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();
    	}
     
    }
    ensuite pour l'utiliser tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SessionListener.getInstance().getSession();

  7. #7
    Invité de passage
    Inscrit en
    Avril 2008
    Messages
    1
    Détails du profil
    Informations forums :
    Inscription : Avril 2008
    Messages : 1
    Par défaut petite modif
    Citation Envoyé par austin P. Voir le message
    un truc du style devrait t'aider

    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();
    	}
     
    }
    ensuite pour l'utiliser tu fais

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    SessionListener.getInstance().getSession();
    La map sessions doit être en static sinonn ca ne marche pas

  8. #8
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 2
    Par défaut
    Citation Envoyé par austin P. Voir le message

    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();
    	}
     
    }
    Vau mieux mettre le constructeur en public sinon le listener ne pourra pas être chargé par le serveur.

  9. #9
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    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.
    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());
    }
    Tu peux utiliser autre chose qu'une Hashtable bien sûr...

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  10. #10
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Oups, trop tard... Désolé Austin P.
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

  11. #11
    Nouveau candidat au Club
    Profil pro
    Inscrit en
    Avril 2007
    Messages
    2
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2007
    Messages : 2
    Par défaut
    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

  12. #12
    Modérateur
    Avatar de OButterlin
    Homme Profil pro
    Inscrit en
    Novembre 2006
    Messages
    7 313
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations forums :
    Inscription : Novembre 2006
    Messages : 7 313
    Billets dans le blog
    1
    Par défaut
    Oui, effectivement, il faut caster
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Hashtable ht = (Hashtable)System.getProperty("ListeSessions");
    System.getProperty("unNom") sert à récupérer du context application un objet nommé "unNom" (dans l'exemple).

    A+
    N'oubliez pas de consulter les FAQ Java et les cours et tutoriels Java

Discussions similaires

  1. [Servlets - JSP] Problème de session
    Par the java lover dans le forum Servlets/JSP
    Réponses: 8
    Dernier message: 28/11/2011, 09h54
  2. [JSP][session] perte de session et sendRedirect
    Par blaz dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 30/03/2007, 09h32
  3. Réponses: 12
    Dernier message: 24/09/2003, 15h26
  4. [XMLRAD] session
    Par jml dans le forum XMLRAD
    Réponses: 4
    Dernier message: 17/12/2002, 09h24

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo