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

Java EE Discussion :

Erreur qui provoque l'affichage d'une page blanche


Sujet :

Java EE

  1. #1
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 221
    Points : 92
    Points
    92
    Par défaut Erreur qui provoque l'affichage d'une page blanche
    Bonjour,

    Je débute avec le EJB, cependant dans mon application lors de la vérification de ma connexion, ma servlet me retourne un page blanche ou d'une autre JSP comme prévu.

    Après étude j'en ai déduit que cela est dû à la valeur retournée par ma BD lors du test dans la servlet. Pourtant, la connexion existe donc la valeur retournée ne peut être vide et même si c'était le cas cela aurait dû entraîner une redirection. Bref, la je suis perdu.

    Voici un extrait de mon code :
    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
       // dans mon module EJB
        @Stateless
    public class UserSession implements UserSessionLocal {
        @PersistenceContext(unitName = "Administration_des_etudiants-ejbPU")
        private EntityManager em;
     
     
        Personnage user ;
     
        public void begin(String login,String password) {
     
            String pswd = null;
            Query  query = em.createNamedQuery("Personnage.findByLogin").setParameter("login",login);
            try
            {
               pswd  = cryptage.cryptage(password);
            } catch (NoSuchAlgorithmException ex) {
                Logger.getLogger(UserSession.class.getName()).log(Level.SEVERE, null, ex);
            }
              Personnage utilisateur =(Personnage)query.getSingleResult();
     
             if(utilisateur.getPswd().equals(pswd))
            {
               user = utilisateur;
            }
        };
     
      public Personnage getUtilisateur()
        {
             return user;
        };
    }
     
    @Local
    public interface UserSessionLocal {
     
     public void begin(java.lang.String login, java.lang.String password);
     
      public Bd.Personnage getUtilisateur();
    }
    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
     
    //Dans mon module web
     
        // ma servlet
    @WebServlet(name="ServletCommand", urlPatterns={"/ServletCommand"})
    public class ServletCommand extends HttpServlet {
        @EJB
        private UserSessionLocal userSession;
     
        @SuppressWarnings("empty-statement")
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            response.setContentType("text/html;charset=UTF-8");
            try {
                if(request.getParameter("Connexion")!= null)
                {
     
                    userSession.begin(request.getParameter("login"), request.getParameter("password"));
                    Personnage user = userSession.getUtilisateur();
                    if(user == null)
                    {
                       request.setAttribute("ERROR","Login ou Password Erronne veuillez réessayer");
                       RequestDispatcher dps = request.getRequestDispatcher("index.jsp");
                       dps.forward(request, response);
                    }
                    else
                    {
                      request.setAttribute("USER",user.getNom());
                      RequestDispatcher dps = request.getRequestDispatcher("Page/DisplayMenuGestude.jsp");
                      dps.forward(request, response);
                    }
     
                };
            } finally { 
                out.close();
            }
        } 
     
        @Override
        protected void doGet(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
          //  processRequest(request, response);
        } 
     
        @Override
        protected void doPost(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
            processRequest(request, response);
        }
     
        @Override
        public String getServletInfo() {
            return "Short description";
        }// </editor-fold>
    }
     
    //mon fichier index
     
    <form name="firstForm" action="ServletCommand" method="post">
      <table border="0" width="100%">
                         <tr>
                             <td>
                                 <div style="width:40%" align="center">
                                    <table border="0">
                                            <tr>
                                                <td align="center"> Login : </td>
                                               <td align="center"> <input type="text" name="login" /> </td>
                                            </tr>
                                            <tr>
                                                <td align="center"> Password : </td>
                                                <td align="center"> <input type="password" name="password" /> </td>
                                            </tr>
                                            <tr>
                                                <td align="center" style="text-align:center;" colspan="2"> <input type="submit" name="Connexion"  value="Connexion" /</td>
                                            </tr>
                                    </table>
     
                 <div style="margin:auto;text-align:center;">
                    <p>  <c:out value="${requestScope['ERROR']}" /></p>
                 </div>
        </form>
     
     // mon menu : DisplayMenuGestude.jsp
     
        <div style="width:50%;margin:auto;text-align:center;">
                  <p><img src="image/bannier.jng" align="top" width="400px" height="60px" alt="bannier" /></p>
            <ul>
                <li>Nom : <c:out value="${requestScope['USER']}" /></li>
            </ul>
        </div>
    Quelqu'un saurait-il m'indiquer d'où peut venir le problème ?

    Merci d'avance pour votre aide.

  2. #2
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Bonjour,

    Deux choses pour résoudre ton problème.

    Premièrement, ton EJB est stateless, donc il ne doit garder aucune variable d'instance liée au client comme tu le fais pour "user" ici (sinon il faudrait utiliser un EJB stateful, mais pour ton cas d'utilisation, ce n'est pas nécessaire). Il faut donc supprimer cette variable d'instance et faire en sorte que ta méthode de recherche retourne l'objet Personnage. On va au passage renommer ta méthode begin() en authenticate() juste pour que ce soit plus explicite:

    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
     
    @Stateless
    public class UserSession implements UserSessionLocal {
        @PersistenceContext(unitName = "Administration_des_etudiants-ejbPU")
        private EntityManager em;
     
     
        public Personnage authenticate(String login, String password) {
     
            Personnage user = null;
            String pswd = null;
            Query  query = em.createNamedQuery("Personnage.findByLogin").setParameter("login",login);
            try
            {
               pswd  = cryptage.cryptage(password);
            } catch (NoSuchAlgorithmException ex) {
                Logger.getLogger(UserSession.class.getName()).log(Level.SEVERE, null, ex);
            }
              Personnage utilisateur =(Personnage)query.getSingleResult();
     
             if(utilisateur != null && utilisateur.getPswd().equals(pswd))
            {
               user = utilisateur;
            }
     
            return user;
        }
     
    }
     
    @Local
    public interface UserSessionLocal {
     
     public Personnage authenticate(String login, String password);
     
    }
    Je suppose ici que l'objet "cryptage" que tu utilise dans ton EJB, tu sais bien d'où ça vient (par injection ou autre) ...

    Et deuxièmement, il ne te reste plus qu'à modifier la méthode "processRequest()" dans ta servlet :

    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
     
    @WebServlet(name="ServletCommand", urlPatterns={"/ServletCommand"})
    public class ServletCommand extends HttpServlet {
        @EJB
        private UserSessionLocal userSession;
     
        @SuppressWarnings("empty-statement")
        protected void processRequest(HttpServletRequest request, HttpServletResponse response)
        throws ServletException, IOException {
     
     
                if(request.getParameter("Connexion")!= null)
                {
     
                    Personnage user = userSession.authenticate(request.getParameter("login"), request.getParameter("password"));
                    if(user == null)
                    {
                       request.setAttribute("ERROR","Login ou Password Erronne veuillez réessayer");
                       RequestDispatcher dps = request.getRequestDispatcher("index.jsp");
                       dps.forward(request, response);
                    }
                    else
                    {
                      request.setAttribute("USER", user.getNom());
                      RequestDispatcher dps = request.getRequestDispatcher("Page/DisplayMenuGestude.jsp");
                      dps.forward(request, response);
                    } 
                }
            }
     
    ...
     
    }
    Voilà, je crois que ceci devrait te permettre d'avancer.

  3. #3
    Membre régulier
    Inscrit en
    Novembre 2010
    Messages
    221
    Détails du profil
    Informations forums :
    Inscription : Novembre 2010
    Messages : 221
    Points : 92
    Points
    92
    Par défaut [EJB] Erreur qui provoque l'affichage d'une page blanche
    slt merci encore pour votre remarque mais apres une bonne tentative j'obtient le même résultat et je ne vois tout pas pourquoi j'obtiens cette page blanche au lieu de celle de ma redirection.
    ainsi toute aide serait la bien venu .
    a++

  4. #4
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Est-ce que tu as des traces d'erreurs dans tes logs ?

    Et sinon, pourrais-tu poster le code exact sur lequel tu testes ?

    Est-ce que la page blanche est affichée quelque soit le user, c-à-d que l'utilisateur existe ou pas dans ta base ?

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    365
    Détails du profil
    Informations personnelles :
    Localisation : Maroc

    Informations forums :
    Inscription : Janvier 2006
    Messages : 365
    Points : 495
    Points
    495
    Par défaut
    Citation Envoyé par manblaizo Voir le message
    Est-ce que la page blanche est affichée quelque soit le user, c-à-d que l'utilisateur existe ou pas dans ta base ?
    En fait, je pose cette question à cause du comportement de la méthode "query.getSingleResult()". Cette méthode lance une exception NoResultException quand la recherche ne retourne aucun résultat, et non pas null comme attendu dans le code de l'ejb, mais aussi une exception NonUniqueResultException si la recherche retourne plus d'un résultat.

    Il faut donc modifier cette partie du code pour soit catcher l'exception, soit utiliser la méthode getResultList() de Query, ce qui est mieux:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
     
    ...
     
    List<Personnage> result = (List<Personnage>) query.getResultList();
     
    if (!result.isEmpty() && result.get(0).getPswd().equals(pswd)) {
       user = result.get(0);
    }
     
    return user;
    ...

Discussions similaires

  1. Affichage d'une page blanche
    Par lita-31 dans le forum Langage
    Réponses: 3
    Dernier message: 26/01/2014, 19h27
  2. affichage d'une page blanche au lieu de index.phtml
    Par hindou90 dans le forum Zend Framework
    Réponses: 3
    Dernier message: 22/08/2011, 17h10
  3. [MySQL] Requête qui ralentit l'affichage d'une page
    Par dlm64 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 08/12/2009, 19h27
  4. affichage d'une page blanche
    Par bourbita.thameur dans le forum Langage
    Réponses: 16
    Dernier message: 24/03/2009, 11h48
  5. Réponses: 5
    Dernier message: 11/09/2007, 13h42

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