Partage
  • Partager sur Facebook
  • Partager sur Twitter

Redémarrer tomcat pour mettre à jour la session

Tuto: Créez votre application web avec Java EE

Sujet résolu
    23 novembre 2014 à 23:04:07

    Bonjour

    J'ai mon filtre PrechargementFilter :

    /*
     * To change this template, choose Tools | Templates
     * and open the template in the editor.
     */
    package filters;
    
    import java.io.IOException;
    import java.util.HashMap;
    import java.util.List;
    import java.util.Map;
    
    import javax.servlet.Filter;
    import javax.servlet.FilterChain;
    import javax.servlet.FilterConfig;
    import javax.servlet.ServletException;
    import javax.servlet.ServletRequest;
    import javax.servlet.ServletResponse;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpSession;
    
    
    import beans.Offre;
    import dao.DAOFactory;
    import dao.OffreDao;
    
    public class PrechargementFilter implements Filter {
        public static final String CONF_DAO_FACTORY      = "daofactory";
       
        public static final String ATT_SESSION_OFF   = "offres";
        public static final String ATT_SESSION_CPT_OFF   = "cpt_offres";
        
        private OffreDao          offreDao;
    
        public void init( FilterConfig config ) throws ServletException {
            /* Récupération d'une instance de nos DAO Client et Commande */
            this.offreDao = ( (DAOFactory) config.getServletContext().getAttribute( CONF_DAO_FACTORY ) ).getOffreDao();
        }
    
        public void doFilter( ServletRequest req, ServletResponse res, FilterChain chain ) throws IOException,
                ServletException {
            
            /* Cast de l'objet request */
            HttpServletRequest request = (HttpServletRequest) req;
    request.setCharacterEncoding("UTF-8");
            /* Récupération de la session depuis la requête */
            HttpSession session = request.getSession();
    
            
    
            if ( session.getAttribute( ATT_SESSION_CPT_OFF ) == null ) {
            
            int aa =offreDao.compter();
            System.out.println("le second enreg:" +aa);
            session.setAttribute( ATT_SESSION_CPT_OFF, aa );
            }
            
            if ( session.getAttribute( ATT_SESSION_OFF ) == null ) {
                /*
                 * Récupération de la liste des clients existants, et enregistrement
                 * en session
                 */
                List<Offre> listeOffres = offreDao.lister();
                Map<Long, Offre> mapOffres = new HashMap<Long, Offre>();
                for ( Offre offre : listeOffres ) {
                    mapOffres.put( offre.getId(), offre );
                }
                session.setAttribute( ATT_SESSION_OFF, mapOffres );
            }
            
    
            /* Pour terminer, poursuite de la requête en cours */
            chain.doFilter( request, res );
        }
    
        public void destroy() {
        }
    }

    Et j'affiche la liste des offres dans ma page liste.jsp:

    ...
    
    <%-- Parcours de la Map des offres en session, et utilisation de l'objet varStatus. --%>
                    <c:forEach items="${ sessionScope.offres }" var="mapOffres" varStatus="boucle">
                         <div class="${boucle.index % 2 == 0 ? 'indent3' : 'indent5'}">
                                                                            <div class="row">
                                                                                <div class="container bg">
                                                                                     <div class="container bg1">
                                                                                        <div class="container bg2">
                                                                                            <div class="container bg3">
                                                                                                <div class="col-1"><c:out value="${ mapOffres.value.dateLimite }"/></div>
                                                                                                <div class="col-2"><a href="<c:url value="/pages/offres/ppc/${ mapOffres.value.poste }"/>" target="blank"><c:out value="${ mapOffres.value.poste }"/><span></span> </a></div>
                                                                                                <div class="col-3"><c:out value="${ mapOffres.value.nomEmploy }"/></div>
                                                                                                <div class="col-4"><c:out value="${ mapOffres.value.typeOffre }"/></div>
                                                                                                <div class="col-5" ><a class ="voir_offre" href="<c:url value="/pages/offres/ppc/${ mapOffres.value.nomOffre }"/>" target="blank">Voir l'offre</a></div>                                   
                                                                                            </div>
                                                                                        </div>
                                                                                    </div>
                                                                                </div>       
                                                                            </div>
                                                                        </div>
                    
                    </c:forEach>
    
    ...

    Le problème est que quand j'ajoute une nouvelle offre dans la base de données, je suis obligé de redémarrer le serveur pour que la nouvelle offre soit mise en session.

    Y'a t-il un moyen qui permet juste d'actualiser la page pour mettre à jour la session?

    Merci


    • Partager sur Facebook
    • Partager sur Twitter
      24 novembre 2014 à 9:17:18

      Bonjour,

      je sais pas si j'ai bien compris ton problème, mais tu pourrais simplement rediriger l'utilisateur sur la page en question, ça servirai de rafraîchissement.

      Cordialement,

      • Partager sur Facebook
      • Partager sur Twitter
        24 novembre 2014 à 13:36:58

        Je vais tenter d'être plus explicite. La page liste.jsp affiche la liste de toutes les offres qu'il y a dans la table "Offre" de ma base de données. Et pour pouvoir afficher cette liste, je crée un filtre qui récupère la liste des offres et la met en session. Ensuite je récupère cette liste dans ma page liste.jsp.Donc si j'ai par exemple 4 lignes (ou champs) dans ma table "Offre", j'aurais 4 lignes affichées dans la page liste.jsp. Et si ensuite j'insère une 5e ligne (ou champ) dans ma table "Offre", j'aurais 5 lignes affichées dans la page liste.jsp.

        Mais le problème est que quand j'ajoute cette 5e ligne dans ma table "Offre", et que j'actualise la page liste.jsp, j'ai toujours 4 lignes qui sont affcihées, c'est-à-dire que la 5e ligne n'est pas ajoutée automatiquement à la session.

        J'ai fermé le navigateur et je l'ai relancé l'application mais toujours rien. Il a fallu que je redémarre tomcat pour que la session soit mise à jour.

        Le problème vient de la session. Même quand je relance l'application, l'ancienne session est toujours là. Donc l'ajout de la 5e ligne n'est pas prise en compte.

        • Partager sur Facebook
        • Partager sur Twitter
          24 novembre 2014 à 13:41:12

          Il faut plutôt que tu récupères la liste des offres depuis une servlet plutôt que depuis un filtre.

          Si tu passe par la servlet, à chaque affichage de la page, tu pourras aller chercher toutes les offres qui se trouvent dans ta base de données.

          • Partager sur Facebook
          • Partager sur Twitter
            25 novembre 2014 à 9:13:38

            Tu peux aussi mettre à jour la session à chaque mise à jour de la BDD (c'est-à-dire à chaque ajout dans latable Offre).
            • Partager sur Facebook
            • Partager sur Twitter

            Redémarrer tomcat pour mettre à jour la session

            × Après avoir cliqué sur "Répondre" vous serez invité à vous connecter pour que votre message soit publié.
            × Attention, ce sujet est très ancien. Le déterrer n'est pas forcément approprié. Nous te conseillons de créer un nouveau sujet pour poser ta question.
            • Editeur
            • Markdown