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 :

<welcome-file-list> problème MAJ variable


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Par défaut <welcome-file-list> problème MAJ variable
    Bonjour!

    Dans mon application Web, je souhaite comptabiliser le nombre de sessions actives et afficher le résultat sur l'ensemble des pages, y compris la page d'acceuil.

    Le comptage s'effectue à l'aide d'un filtre.

    Ma page d'acceuil est déclarée en tant que:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    <welcome-file-list>
      <welcome-file>index.jsp</welcome-file>
    </welcome-file-list>
    dans le fichier web.xml.

    Problème:
    J'affiche une variable qui m'indique le nombre de session actives, ce qui fonctionne bien en dehors de la page d'acceuil....Cette variable étant mise à jour dans le filtre.
    La variable se met correctement à jour sur la page d'acceuil si je rafraîchis la page (F5)

    Ma question:
    Est-ce qu'il vous semble plausible que le fait de passer par la balise <welcome-file-list> explique le comportement différent de celui observer lors d'un passage d'une page à l'autre par un controlleur (Spring MVC)?

    Merci de vos suggestions!

  2. #2
    Membre chevronné


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 855
    Par défaut
    Bonjour,

    il faut nous en dire plus sur ton filtre (le pattern match aussi les *.jsp ?) et sur ta variable compteur.

    Au cas où : http://java.developpez.com/faq/javae...UCTION_SESSION

  3. #3
    Membre à l'essai
    Inscrit en
    Mai 2007
    Messages
    5
    Détails du profil
    Informations forums :
    Inscription : Mai 2007
    Messages : 5
    Par défaut
    Merci!

    Tout d'abord voici la déclaration de mon filtre
    Code xml : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
      <filter>
        	<filter-name>SessionCountFilter</filter-name>
        	<filter-class>ui.filter.SessionCountFilter</filter-class>
      </filter>
     
      <filter-mapping>
       	<filter-name>SessionCountFilter</filter-name>
        	 <url-pattern>/*</url-pattern>
      </filter-mapping>

    Je débute, mais sauf erreur, ce filtre match bien les *.jsp et *.html je suppose.

    Ensuite mon filtre ressemble à ceci (source empruntée :-) ):
    Naïvement, j'enregistre le nombre de sessions crées dans ma session par session.setAttribute("nbreSession", sessions.size()); sous l'attribut "nbreSession" dans la méthode doFilter

    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
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    133
    134
    135
    136
    137
    138
    139
    140
    141
    142
    143
    144
    package ui.filter;
     
    import java.io.IOException;
    import java.io.Serializable;
    import java.util.Hashtable;
     
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletContext;
    import javax.servlet.ServletContextEvent;
    import javax.servlet.ServletContextListener;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
    import javax.servlet.http.HttpSession;
    import javax.servlet.http.HttpSessionBindingEvent;
    import javax.servlet.http.HttpSessionBindingListener;
     
    import org.acegisecurity.context.SecurityContextHolder;
    import org.acegisecurity.userdetails.UserDetails;
    import org.apache.commons.logging.Log;
    import org.apache.commons.logging.LogFactory;
    import org.springframework.context.ApplicationContext;
    import org.springframework.context.i18n.LocaleContextHolder;
    import org.springframework.web.context.support.WebApplicationContextUtils;
    /**
     * J2EE "Filter" to count page hits.  What it counts depends on the 
    url-mapping
     * in web.xml.
     *
     * @author tim.lucia
     */
    public class SessionCountFilter implements Filter, HttpSessionBindingListener, Serializable {
        private final static Log logger = LogFactory.getLog(SessionCountFilter.class);
     
        public static final Hashtable sessions = new Hashtable();
        public static int sessionCountHighWater = 0;
     
        /**
         * Container startup notification
         */
        public void init(FilterConfig arg0) throws ServletException 
        {
            logger.debug("init(): " + arg0);
        }
     
        /**
         * Container shutdown notification
         */
        public void destroy() 
        {
            logger.debug("destroy()");
        }
     
        /**
         * Process the container's filter request.
         * @param request - Request object
         * @param response - response object
         * @param chain - next filter in the chain.
         */    
        public void doFilter(ServletRequest request, ServletResponse response,
                             FilterChain chain)
            throws IOException, ServletException 
        {
            chain.doFilter(request, response);
            HttpServletRequest httpRequest = (HttpServletRequest)request;
            HttpSession session = httpRequest.getSession(false);
            if (logger.isDebugEnabled()) {
                logger.debug("Request " + httpRequest.getRequestURI() + 
                        (session == null ? " returned no session" :
                         " belongs to session ID " + session.getId()));
            }
     
            // Bind to the session, if there is one, and it is new:
            if (null != session && session.isNew()) {
                session.setAttribute(toString(), this);
                session.setAttribute("nbreSession", sessions.size());
            } 
     
        }
     
        /**
         * Implement HttpSessionBindingListener#valueBound
         */
        public void valueBound(HttpSessionBindingEvent bindEvent) 
        {
            HttpSession session = bindEvent.getSession();
            final String sessionID = session.getId();
            sessions.put(session, sessionID);
            if (logger.isDebugEnabled()) {
                logger.debug("[" + sessions.size() + "] CREATE:  " +
    sessionID);
            }
            sessionCountHighWater = 
                (sessionCountHighWater < sessions.size() ? sessions.size() :
    sessionCountHighWater);
     
     
        }
     
        /**
         * Implement HttpSessionBindingListener#valueUnbound
         */
        public void valueUnbound(HttpSessionBindingEvent bindEvent) 
        {
            HttpSession session = bindEvent.getSession();
            final String sessionID = (String)sessions.get(session);
            sessions.remove(session);
            if (logger.isDebugEnabled()) {
                logger.debug("[" + sessions.size() + "] DESTROY: " +sessionID);
            }
     
        }
     
        /**
         * Return current count of sessions
         * @return The number of sessions currently tracked
         */
        public static int getSessionCount()
        {
            return sessions.size();
        }
     
        /**
         * Return high water mark of number of sessions
         * @return The high water mark of sessions tracked
         */
        public static int getSessionCountHighWater()
        {
            return sessionCountHighWater;
        }
     
        /**
         * Return string representation of this object
         * @return a String representation of this object
         */
        public String toString()
        {
            return getClass().getName() + "#" + hashCode();        
        }
    }

    Finalement j'affiche dans ma page jsp. la variable de compteur en récupérant dans ma session la variable enregistrée dans le filtre:

    nombre de sessions utilisateurs; : <b><%= (Integer)session.getAttribute( "nbreSession") %></b>


    Ceci fontionne quand je passe d'une page à une autre, par contre la variable est nulle lorsque j'arrive sur la page d'acceuil...la session ne l'est pas par contre..

    Merci

  4. #4
    Membre chevronné


    Profil pro
    Inscrit en
    Octobre 2003
    Messages
    7 855
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2003
    Messages : 7 855
    Par défaut
    Tu as assez de log dans le code pour voir d'où vient le problème.
    J'ai l'impression que ca peut venir du httpRequest.getSession(false);

Discussions similaires

  1. Tomcat 6 - welcome-file-list sans effet
    Par jiber2fr dans le forum Tomcat et TomEE
    Réponses: 1
    Dernier message: 10/07/2011, 10h34
  2. problème de variables / . MAT files
    Par jocqfd dans le forum MATLAB
    Réponses: 8
    Dernier message: 05/02/2008, 11h20
  3. Réponses: 7
    Dernier message: 09/12/2007, 11h51
  4. [Débutant] Problème de variables
    Par bonnefr dans le forum SWT/JFace
    Réponses: 9
    Dernier message: 12/05/2004, 17h41
  5. [servlet]problème de variable jamais nulle
    Par omega dans le forum Servlets/JSP
    Réponses: 2
    Dernier message: 18/03/2004, 09h31

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