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 :

Problème de session sur un exo


Sujet :

Servlets/JSP Java

  1. #1
    Membre averti Avatar de Perfourras
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2008
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2008
    Messages : 175
    Points : 347
    Points
    347
    Par défaut Problème de session sur un exo
    Bonjour, je viens demander votre aide car je débute sur les servlets et je n'arrive tout simplement pas a comprendre comment résoudre cet exercice. Merci pour votre aide.

    L'énoncé de l'exo :
    • Ecrire une application web qui fait la
    somme de 10 entiers saisis
    successivement chacun dans une page
    HTML.
    • Utiliser le champ HIDDEN pour stocker la
    somme intermédiaire



    Et voici ou j'en suis :

    Le controleur principal :

    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
    public class Controleur extends HttpServlet{
        public void doGet (HttpServletRequest requete, HttpServletResponse reponse) throws IOException, ServletException{
            reponse.setContentType("text/html");
            PrintWriter out = reponse.getWriter();
            String actionString = requete.getParameter("action");
            int codeAction = Integer.parseInt(actionString);
            HttpSession session = requete.getSession(true);
            int result = 0;
            int compteur = 0;
     
            switch (codeAction){
                case 1:{
                    while(compteur!=10){
                        String s = requete.getParameter("nombre");
                        int n = Integer.parseInt(s);
                        if(session.getAttribute("resultat")==null){
                            result=0;
                        }
                        else{
                            result = Integer.parseInt(session.getAttribute("resultat").toString());
                        }
                        if(session.getAttribute("compteur")==null){
                            compteur=0;
                        }
                        else{
                            compteur = Integer.parseInt(session.getAttribute("compteur").toString());
                        }               
                        result += n;
                        compteur++;
                        session.setAttribute("resultat", result);
                        session.setAttribute("compteur", compteur);
                        RequestDispatcher disp = getServletContext().getRequestDispatcher("/index.jsp") ;
                        disp.forward( requete, reponse ) ;
     
                    }
     
                    RequestDispatcher disp = getServletContext().getRequestDispatcher("/vueResultat.jsp") ;
                    disp.forward( requete, reponse ) ;                
                    break;
                }
            }
     
            out.flush();
            out.close();
        }
    }


    L'index.jsp qui est lié :

    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
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
     
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Entrainement</title>
        </head>
        <body>
            <h2>Rentre un nombre</h2>
            <form action = "controleur">
                <input type = "HIDDEN" name = "action" value = "1" />
                Nombre : <input type = "text" name = "nombre" value = "10" /><br>
                <input type = "submit" value = "Valider" />
            </form>
        </body>
    </html>

    Et la vueResultat.jsp :

    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
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
     
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <jsp:useBean id="resultat" scope="session" type="int" beanName="resultat" />
     
            <%int n = resultat;%>
     
            Le résultat est <%=n%>
        </body>
    </html>
    Mon problème réside dans le fait que le compteur et le résultat repartent à 0 à chaque fois que je valide. Bref, je merdouille avec les sessions je pense. J'ai aussi du mal a manier les beans...

    Merci de votre aide.

  2. #2
    Membre actif
    Profil pro
    Inscrit en
    Mars 2008
    Messages
    152
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2008
    Messages : 152
    Points : 209
    Points
    209
    Par défaut
    Tu n'as pas du comprendre le concept de la servlet "controller"

    A chaque fois que tu soumets le formulaire tu rappelles ta servlet, donc à chaque fois que tu entres dans le méthode doGet tu réinitialises ton compteur à 0.
    La méthode de la boucle est impossible dans ton cas.

    Il y a 2 méthodes. Elles sont dans ton code mais tu ne les utilises pas correctement. Le paramètre action en hidden c'est une bonne idée, le problème c'est que la valeur est en static donc il ne sert à rien. Donc soit tu utilises une expression <%= %>, soit tu utilises l'el.
    Enfin je sais bien que ce n'est pas ce que tu as voulu faire, mais je ne comprend pas l'utilité d'un switch case, un if aurait suffit, mais ca aurait toujours était inutile!

    La deuxième c'est de mettre ton compteur dans la session. ce que tu a fait en parti. Sauf qu'une session stocke des objets donc le toString() est inutile, il faut juste que tu utilises un Integer à la place d'un int, ce qui t'évitera un Interger.parsInt()et tous les problèmes liés.

    Dernière petite chose:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    if(session.getAttribute("resultat")==null){
                            ....
                        }
                        else{
                            ....
                        }
                        if(session.getAttribute("compteur")==null){
                            ....
                        }
                        else{
                            ....
                        }
    C'est un peu illogique tout ca. Si le compteur est null, le resultat est forcément null non?! Dans ce cas tu fais le testes uniquement si le compteur est null et donc si tu es déjà passé dans la servlet.

    Voila je te laisse réfléchir.

  3. #3
    Membre averti Avatar de Perfourras
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2008
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2008
    Messages : 175
    Points : 347
    Points
    347
    Par défaut
    Allez j'y suis presque, à un détail près. En tout cas, merci pour ta réponse ca m'a bien aidé.
    J'ai remanié mon code donc. Aujourd'hui, les valeurs circulent bien entre la servlet et les vues jsp, et les incrémentations du compteurs + les additions passent bien.

    A un détail près : sur la vue resultat.jsp je souhaite utiliser un formulaire pour retourner le résultat des addition. Hors ca me retourne 0, et je vois pas pourquoi.

    Je vous file les codes, merci d'avance pour votre aide.


    Le controleur Principal
    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
    public class ControleurPrincipal extends HttpServlet{
        public void doGet(HttpServletRequest requete, HttpServletResponse reponse) throws IOException, ServletException{
            reponse.setContentType("text/html");
            PrintWriter out = reponse.getWriter();
            String actionString = requete.getParameter("action");
            int codeAction = Integer.parseInt(actionString);
            HttpSession session = requete.getSession(true);
            RequestDispatcher dispatcher = null;
            FormAjout form = new FormAjout();
     
     
            switch(codeAction){
                case 1 :{
                    dispatcher=getServletContext().getRequestDispatcher("/ajout.jsp");
                    dispatcher.forward(requete, reponse);
                    break;
                }
     
     
     
                case 2 :{
                    int nbr = Integer.parseInt(requete.getParameter("nombre"));                
                    if(session.getAttribute("somme")==null){
                        session.setAttribute("somme", nbr);
                        form.setSomme(nbr);
                    }
                    else{
                        session.setAttribute("somme", nbr + (Integer)session.getAttribute("somme"));
                        form.setSomme((Integer)session.getAttribute("somme"));
                    }
     
     
                    if(session.getAttribute("compteur")==null){
                        session.setAttribute("compteur", 1);
                        form.setSomme(1);
                    }
                    else{
                        session.setAttribute("compteur", 1 + (Integer)session.getAttribute("compteur"));
                        form.setSomme((Integer)(session.getAttribute("compteur")));
                    }
     
     
                    int n = (Integer)(session.getAttribute("compteur"));
                    if(n==3){
                        dispatcher=getServletContext().getRequestDispatcher("/resultat.jsp");
                        dispatcher.forward(requete, reponse);
                    }
                    else{
                        dispatcher=getServletContext().getRequestDispatcher("/ajout.jsp");
                        dispatcher.forward(requete, reponse);
                    }
     
                    break;
                }
            }
            out.flush();
            out.close();
        }
    }

    L'index (sert a rien pour le moment mais ca sera complété + tard)
    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
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
     
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
            <title>JSP Page</title>
        </head>
        <body>
            <h2>Choisis l'exercice</h2>
            <form action = "controleur">
                <input type = "hidden" name="action" value="1" />
                <input type="submit" value="Exercice 1" />
            </form>
        </body>
    </html>


    La page ajout.jsp qui sert a rentrer les valeurs qu'on veut ajouter (au bout de 3 fois on passe a la vue resultat.jsp)
    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
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
     
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
     
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>JSP Page</title>
        </head>
        <body>
            <h2>Hello World!</h2>
            <form action="controleur">
                <input type="hidden" name="action" value="2" />
                <input type="text" name="nombre" value="10" /> 
                <input type="hidden" name="compteur" />
                <input type="hidden" name="somme" /><br>
                <input type="submit" name="Valider" />
            </form>
        </body>
    </html>

    La page resultat.jsp, qui affiche le contenu du formulaire :
    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
    <%@page contentType="text/html" pageEncoding="UTF-8"%>
    <%@page import="controle.FormAjout" %>
    <jsp:useBean id="form" class="controle.FormAjout" scope="session" />
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
       "http://www.w3.org/TR/html4/loose.dtd">
     
    <html>
        <head>
            <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
            <title>Resultat</title>
        </head>
        <body>
            <h2>Le resultat est </h2>
            <%=form.getSomme()%>
        </body>
    </html>


    et le formulaire
    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
    public class FormAjout{
        int somme;
        int compteur;
        public int getSomme(){
            return somme;
        }
        public int getCompteur(){
            return compteur;
        }
        public void setSomme(int n){
            this.somme=n;
        }
        public void setCompteur(int n){
            this.compteur=n;
        }
    }


    Donc pour résumer, pourquoi le form.getSomme de la page resultat.jsp me retourne 0 comme valeur alors que dans la session, l'attribut Somme a une valeur correcte?

    Merci

  4. #4
    Membre averti Avatar de Perfourras
    Homme Profil pro
    Développeur Java
    Inscrit en
    Mars 2008
    Messages
    175
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Java

    Informations forums :
    Inscription : Mars 2008
    Messages : 175
    Points : 347
    Points
    347
    Par défaut
    Problème résolu, il me manquait dans le controleur principal cette ligne de code :

    session.setAttribute("form", form);

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Problème de session sur domaine
    Par eldnit dans le forum Administration
    Réponses: 1
    Dernier message: 04/03/2015, 01h44
  2. Problème de sessions sur 1 seul site
    Par david2511 dans le forum Serveurs (Apache, IIS,...)
    Réponses: 1
    Dernier message: 30/01/2014, 11h24
  3. [WS 2008 R2] Problème ouverture session sur ferme tse
    Par rouchmi dans le forum Windows Serveur
    Réponses: 2
    Dernier message: 27/11/2013, 15h51
  4. Problème de session sur mon site
    Par mulot47 dans le forum Langage
    Réponses: 8
    Dernier message: 16/05/2008, 22h00
  5. problème : plusieurs session sur un site
    Par Piaf dans le forum Langage
    Réponses: 2
    Dernier message: 17/06/2006, 16h14

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