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 :

Requete envoyée 2 fois


Sujet :

Servlets/JSP Java

  1. #1
    Membre à l'essai
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Points : 13
    Points
    13
    Par défaut Requete envoyée 2 fois
    Bonjour,

    je suis sur un bug depuis 3 jours, je n'en peux plus alors je sollicite votre aide!
    J'ai une appli web basée sur un MVC maison et lorsque j'appelle une servlet , l'application recoit 2 fois la même requête.
    Ca ne vient pas du client web, c'est sur.
    Voici le code de ma servlet de login appelée:

    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
     
    public class LoginServlet extends HttpServlet{
     
        static public final String LOGIN_BEAN_NAME = "loginBean";
     
        private String message="";
     
        protected void doPost(HttpServletRequest request, HttpServletResponse response) throws CsaException, ServletException, java.io.IOException {
     
            LoginBean loginBean = new LoginBean();
            decodeInputBean(request,loginBean);
     
            //Essai d'ouverture de session
            try{
                Session session = SessionMgr.instance().openSession(loginBean.getLogin(),
                loginBean.getPassword());
                //Ouverture de session OK
     
                setBeanToSession(request,ServletSession.SESSION_BEAN_NAME,session);
               getServletConfig().getServletContext().getRequestDispatcher("/content/ihm/C_accueil.jsp").forward(request,response);
               return;
            }
            catch(CsaException e){
                loginBean.invalidate();
                setBeanToRequest(request,LOGIN_BEAN_NAME,loginBean);
                request.setAttribute("message",e.getMessage());
    getServletConfig().getServletContext().getRequestDispatcher("/content/ihm/C_index.jsp").forward(request,response);
                return;
            }
            catch(Exception e){
                // Ouverture de session a échoué : erreur anormale
                throw(new TechnicalException(e,tech.Message.getMessage("6040")));
            }
        }
    }
    J'ai un formulaire bateau avec login, pass.
    et je redirige vers une page d'accueil si authentification ok.

    Quand je regarde mes logs, la méthode doPost est appelée 2 fois!!!???
    avec un seul envoi de formulaire.
    j'ai essayé de simuler un envoi de type GET en implémentant doGet et j'ai le même résultat.

    Je ne comprends pas.

    Merci d'avance
    Julien

  2. #2
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 73
    Points : 62
    Points
    62
    Par défaut
    ta servlet se creer elle-même un "LoginBean" comme tu l'a appelé. Si tu t'en creer un, les valeurs que tu aura ne seront pas celle créer par ta servlet et tu aura deux fois la même requete car ta servlet va appeler les methode de ta classe et toi en te créant cet objet tu les apelle, donc les requete sont exécutées deux fois plustot qu'une. Il faut que tu prenne celle créée par ta servlet. Je crois qu'avec la session tu peut avoir les des objets qui ont été crée

  3. #3
    Membre à l'essai
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    ????
    c'est gentil mais je ne comprends pas ce que tu veux dire!

  4. #4
    Membre éprouvé
    Profil pro
    Architecte technique
    Inscrit en
    Mars 2002
    Messages
    966
    Détails du profil
    Informations personnelles :
    Âge : 51
    Localisation : France

    Informations professionnelles :
    Activité : Architecte technique

    Informations forums :
    Inscription : Mars 2002
    Messages : 966
    Points : 1 085
    Points
    1 085
    Par défaut
    Su quel browser as tu testé ?

    Si tu as fais tes tests avec IE essaie avec Firefox ou Netscape, parceque IE à un bug : la requête peut-être postée en double.

  5. #5
    Membre à l'essai
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Oui, j'ai vu ca donc j'ai testé sur IE, Firefox, ...
    mais ca ne vient pas de là.
    je déploie sur Tomcat 4.0.3 et je suis entrain d'investiguer de ce côté.

  6. #6
    Membre régulier
    Inscrit en
    Mai 2004
    Messages
    78
    Détails du profil
    Informations forums :
    Inscription : Mai 2004
    Messages : 78
    Points : 73
    Points
    73
    Par défaut
    Il n'y a pas une histoire de "double clique" ?

  7. #7
    Membre à l'essai
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    non pas de double clic.
    j'ai même essayé avec ca
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    public class Test extends HttpServlet {
     
     
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException  {
            System.err.println("test: passe par doGet()");
            getServletContext().getRequestDispatcher("/index2.jsp").forward(request, response);
            return;
        }
     
     
    }
    avec une page index2.jsp minimaliste et la requete passe 2 fois!

    [/code]

  8. #8
    Membre du Club
    Profil pro
    Inscrit en
    Juin 2005
    Messages
    73
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2005
    Messages : 73
    Points : 62
    Points
    62
    Par défaut
    ok je me suis super mal expliquée.

    j'ai déjà eu le même problème. je ne sais as trop comment l'expliquer mais c que ton code JSP se créer lui même ses objet. Si tu en crée dans ton code, il y aura alors deux objet en circulation mais ca ne sera pas les mêmes. C'est pour ca que tu recois 2 fois la même requete.

    Ne crée pas ton objet
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    LoginBean loginBean = new LoginBean();
    car JSP s'en est surement déjà fait un.
    Va plutot chercher celui qui est créer par ta session HTTP.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    		user = (LoginBean) session.getAttribute("LoginBean");
    ou qqch du genre selon le nom de tes objets....

    je sais opas si je suis plus clair comme ca.... c que j'ai eu un peu de misere avec un bug comme celui la et je n'ai pas tout a fait compris pkoi ca faisait ca mais je sais que ca le fait

  9. #9
    Membre à l'essai
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Re bonjour!

    Pourriez-vous m'expliquer comment la soumission d'un formulaire en requête HTTP de type POST sur la servlet ci-dessous m'affiche les traces de doPost() ET doGet()?????????
    La, j'y comprends vraiment plus rien!
    je deviens fou!
    merci de votre aide

    Julien


    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
     
    public class Test extends HttpServlet {
     
     
        public void doGet(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException  {
            System.err.println("test: passe par doGet()");
            getServletContext().getRequestDispatcher("/index2.jsp").forward(request, response);
            return;
        }
     
     
        public void doPost(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException {
            System.err.println("test:passe par doPost");
                RequestDispatcher rd = getServletContext().getRequestDispatcher("/index2.jsp");
                rd.forward(request, response);
                return;
        }
     
     
    }

  10. #10
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    t'as pas un javascript qui traine dans ta page d'accès ?

  11. #11
    Membre à l'essai
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    voici le code de la page appelante:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    <html>
    <body>
    <form method="post" action="test">
    Login <input type="text" name="login">
     
    Password <input type="text" name="password">
     
    <input type="submit" value="Envoyer">
    </form>
    </body>
    </html>
    Le plus surprenant, c'est que quand j'enlève l'implémentation du doGet dans la servlet, ca marche. (que la trace du doPost)
    si je remets l'implémentation du doGet, j'ai les 2 traces.

  12. #12
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    Un servlet filter quelque part ?

  13. #13
    Membre à l'essai
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    non aucun.
    J'ai posté le message sur le site de sun.
    http://forum.java.sun.com/thread.jspa?forumID=33&threadID=643607

    Certaines personnes ont le même problème sans solution.
    C'est très étrange.

  14. #14
    Membre éprouvé

    Profil pro
    Inscrit en
    Mars 2002
    Messages
    652
    Détails du profil
    Informations personnelles :
    Localisation : France, Haute Garonne (Midi Pyrénées)

    Informations forums :
    Inscription : Mars 2002
    Messages : 652
    Points : 1 151
    Points
    1 151
    Par défaut
    tu as essayer de commenter ton forward comme préconisé par jones-d1 pour test ? même résultat ?

  15. #15
    Membre à l'essai
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    oui, j'ai essayé.
    quand j'enlève le forward, ca marche.
    mais surtout pourquoi ca ne marche pas quand je le mets???

    le RequestDispatcher agit pourtant dans le conteneur de servlet donc le doGet ne devrait pas être appelé.

  16. #16
    Membre à l'essai
    Inscrit en
    Août 2003
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Août 2003
    Messages : 21
    Points : 13
    Points
    13
    Par défaut
    Finalement, j'avais un attribut background dans l'élément BODY de ma page HTML qui foutait la grouille!
    Cet attribut attend une URL vers une image ou une page HTML.
    Or j'avais mis par mégarde "#CCCCCC".
    Le navigateur interprète ceci comme une ancre sur le document courant et donc il fait une requête GET sur la même URL.
    C'est pourquoi je voyais plusieurs requetes passer.

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

Discussions similaires

  1. Tracer les requetes envoyé depuis php.
    Par Rakken dans le forum Oracle
    Réponses: 1
    Dernier message: 25/10/2006, 11h32
  2. [MySQL] plusieurs requetes en une fois
    Par maximenet dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 31/07/2006, 11h57
  3. Réponses: 2
    Dernier message: 22/05/2006, 14h08
  4. Formulaire envoyé plusieurs fois
    Par pierre50 dans le forum Langage
    Réponses: 4
    Dernier message: 29/03/2006, 20h11
  5. Pb Requete jointure (3 fois ?)
    Par bob.lapointe dans le forum Langage SQL
    Réponses: 4
    Dernier message: 05/03/2005, 14h59

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