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 :

Message d'erreur: Impossible d'utiliser forward..


Sujet :

Servlets/JSP Java

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Candidat au Club
    Inscrit en
    Juillet 2011
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 2
    Par défaut Message d'erreur: Impossible d'utiliser forward..
    je suis débutant en JAVA/J2EE, et je m'exerce sur un livre de JEE

    voilà mon prob: j'ai une j'ai une servlet "main" qui forward vers les deux jsp (formulaire, erreurs) selon les valeurs des paramétre de "formulaire"

    voilà le code de ma 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
    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
    import java.io.*;
    import javax.servlet.*;
    import javax.servlet.http.*;
    import java.util.regex.*;
    import java.util.*;
    public class main extends HttpServlet{
    // variables d'instance
    String msgErreur=null;
    String urlAffichageImpots=null;
    String urlErreur=null;
    String DSNimpots=null;
    String admimpots=null;
    String mdpimpots=null;
    impotsJDBC impots=null;
    //-------- GET
    public void doGet(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{
    // l'initialisation s'est-elle bien passée ?
    if(msgErreur!=null){
    // on passe la main à la page d'erreur
    request.setAttribute("msgErreur",msgErreur);
    getServletContext().getRequestDispatcher(urlErreur).forward(request,response);
    }
    // des attributs de la requête
    String chkoui=null;
    String chknon=null;
    String txtImpots=null;
    // on récupère les paramètres de la requête
    String optMarie=request.getParameter("optMarie"); // statut marital
    String txtEnfants=request.getParameter("txtEnfants"); // nbre d'enfants
    if(txtEnfants==null) txtEnfants="";
    String txtSalaire=request.getParameter("txtSalaire"); // salaire annuel
    if(txtSalaire==null) txtSalaire="";
    // a-t-on tous les paramètres attendus
    if(optMarie==null || txtEnfants==null || txtSalaire==null){
    // il manque des paramètres
    request.setAttribute("chkoui","");
    request.setAttribute("chknon","checked");
    request.setAttribute("txtEnfants","");
    request.setAttribute("txtSalaire","");
    request.setAttribute("txtImpots","");
     
    // on passe la main à l'url d'affichage de l'impôt
    getServletContext().getRequestDispatcher(urlAffichageImpots).forward(request,response);
    }
    // on a tous les paramètres - on les vérifie
    ArrayList erreurs=new ArrayList();
    // état marital
    if( ! optMarie.equals("oui") && ! optMarie.equals("non")){
    // erreur
    erreurs.add("Etat marital incorrect");
    optMarie="non";
    }
    // nombre d'enfants
    txtEnfants=txtEnfants.trim();
    if(! Pattern.matches("^\\d+$",txtEnfants)){
    // erreur
    erreurs.add("Nombre d'enfants incorrect");
    }
    //salaire
    txtSalaire=txtSalaire.trim();
    if(! Pattern.matches("^\\d+$",txtSalaire)){
    //erreur
    erreurs.add("Salaire incorrect");
    }
    //s'il y a des erreurs, on les passe en attribut de la requête
    if(erreurs.size()!=0){
    request.setAttribute("erreurs",erreurs);
    txtImpots="";
    }else{
    //on peut calculer l'impôt à payer
    try{
    int nbEnfants=Integer.parseInt(txtEnfants);
    int salaire=Integer.parseInt(txtSalaire);
    txtImpots=""+impots.calculer(optMarie.equals("oui"),nbEnfants,salaire);
    }catch(Exception ex){}
    }
    //les autres attributs de la requête
    if(optMarie.equals("oui")){
    request.setAttribute("chkoui","checked");
    request.setAttribute("chknon","");
    }else{
    request.setAttribute("chknon","checked");
    request.setAttribute("chkoui","");
    }
    request.setAttribute("txtEnfants",txtEnfants);
    request.setAttribute("txtSalaire",txtSalaire);
    request.setAttribute("txtImpots",txtImpots);
    //on passe la main à l'url d'affichage de l'impôt
    getServletContext().getRequestDispatcher(urlAffichageImpots).forward(request,response);
    }
    //-------- POST
    public void doPost(HttpServletRequest request, HttpServletResponse response)
    throws IOException, ServletException{
    doGet(request,response);
    }
    //-------- INIT
    public void init(){
    //on récupère les paramètres d'initialisation
    ServletConfig config=getServletConfig();
    urlAffichageImpots=config.getInitParameter("urlAffichageImpots");
    urlErreur=config.getInitParameter("urlErreur");
    DSNimpots=config.getInitParameter("DSNimpots");
    admimpots=config.getInitParameter("admimpots");
    mdpimpots=config.getInitParameter("mdpimpots");
    //paramètres ok ?
    if(urlAffichageImpots==null || DSNimpots==null || admimpots==null || mdpimpots==null){
    msgErreur="Configuration incorrecte";
    return;
    }
    //on crée une instance d'impotsJDBC
    try{
    impots=new impotsJDBC(DSNimpots,admimpots,mdpimpots);
    }catch(Exception ex){
    msgErreur=ex.getMessage();
    }
    }
    }
    et le message d'erreur tomcat

    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
     
    type Rapport d'exception
     
    message 
     
    description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête.
     
    exception 
     
    java.lang.IllegalStateException: Impossible d'utiliser faire-suivre (forward) après que la réponse ait été envoyée
    	main.doGet(main.java:43)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
     
     
    note La trace complète de la cause mère de cette erreur est disponible dans les fichiers journaux de Apache Tomcat/6.0.35.
    Cordialement...

  2. #2
    Membre Expert
    Avatar de fxrobin
    Homme Profil pro
    Architecte SI, Java Fan, API Manager
    Inscrit en
    Novembre 2007
    Messages
    875
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Ille et Vilaine (Bretagne)

    Informations professionnelles :
    Activité : Architecte SI, Java Fan, API Manager
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Novembre 2007
    Messages : 875
    Par défaut
    Le truc, c'est qui si msgErreur != null; tu rentres dans ton if :

    if(msgErreur!=null){
    // on passe la main à la page d'erreur
    request.setAttribute("msgErreur",msgErreur);
    getServletContext().getRequestDispatcher(urlErreur).forward(request,response);
    }


    et tu forward alors vers ta page d'erreur,
    puis, ça reviens ...

    ça déroule le code (par ce que tu n'a pas fait de else) et ligne 44 tu "reforwardes" ... double forward, ce qui est interdit.

    Je te propose donc ce code à la place de ta méthode doGet, avec un else.

    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
     
    public void doGet(HttpServletRequest request, HttpServletResponse response)
                throws IOException, ServletException
        {
    // l'initialisation s'est-elle bien passée ?
            if (msgErreur != null)
            {
    // on passe la main à la page d'erreur
                request.setAttribute("msgErreur", msgErreur);
                getServletContext().getRequestDispatcher(urlErreur).forward(request, response);
            } else
            {
    // des attributs de la requête
                String chkoui = null;
                String chknon = null;
                String txtImpots = null;
    // on récupère les paramètres de la requête
                String optMarie = request.getParameter("optMarie"); // statut marital
                String txtEnfants = request.getParameter("txtEnfants"); // nbre d'enfants
                if (txtEnfants == null)
                {
                    txtEnfants = "";
                }
                String txtSalaire = request.getParameter("txtSalaire"); // salaire annuel
                if (txtSalaire == null)
                {
                    txtSalaire = "";
                }
    // a-t-on tous les paramètres attendus
                if (optMarie == null || txtEnfants == null || txtSalaire == null)
                {
    // il manque des paramètres
                    request.setAttribute("chkoui", "");
                    request.setAttribute("chknon", "checked");
                    request.setAttribute("txtEnfants", "");
                    request.setAttribute("txtSalaire", "");
                    request.setAttribute("txtImpots", "");
     
    // on passe la main à l'url d'affichage de l'impôt
                    getServletContext().getRequestDispatcher(urlAffichageImpots).forward(request, response);
                }
    // on a tous les paramètres - on les vérifie
                ArrayList erreurs = new ArrayList();
    // état marital
                if (!optMarie.equals("oui") && !optMarie.equals("non"))
                {
    // erreur
                    erreurs.add("Etat marital incorrect");
                    optMarie = "non";
                }
    // nombre d'enfants
                txtEnfants = txtEnfants.trim();
                if (!Pattern.matches("^\\d+$", txtEnfants))
                {
    // erreur
                    erreurs.add("Nombre d'enfants incorrect");
                }
    //salaire
                txtSalaire = txtSalaire.trim();
                if (!Pattern.matches("^\\d+$", txtSalaire))
                {
    //erreur
                    erreurs.add("Salaire incorrect");
                }
    //s'il y a des erreurs, on les passe en attribut de la requête
                if (erreurs.size() != 0)
                {
                    request.setAttribute("erreurs", erreurs);
                    txtImpots = "";
                } else
                {
    //on peut calculer l'impôt à payer
                    try
                    {
                        int nbEnfants = Integer.parseInt(txtEnfants);
                        int salaire = Integer.parseInt(txtSalaire);
                        txtImpots = "" + impots.calculer(optMarie.equals("oui"), nbEnfants, salaire);
                    } catch (Exception ex)
                    {
                    }
                }
    //les autres attributs de la requête
                if (optMarie.equals("oui"))
                {
                    request.setAttribute("chkoui", "checked");
                    request.setAttribute("chknon", "");
                } else
                {
                    request.setAttribute("chknon", "checked");
                    request.setAttribute("chkoui", "");
                }
                request.setAttribute("txtEnfants", txtEnfants);
                request.setAttribute("txtSalaire", txtSalaire);
                request.setAttribute("txtImpots", txtImpots);
    //on passe la main à l'url d'affichage de l'impôt
                getServletContext().getRequestDispatcher(urlAffichageImpots).forward(request, response);
            }
        }
    qqs petits conseils en supplément :

    - ta méthode doGet est beaucoup trop grande : créer des sous-méthodes dans ta classe, en private, qui traite de chaque petite problématique métier. C'est à cause de ça que tu t'es trompé. Ta méthode doGet, appelera donc succesivement ces méthodes.

    - Nomme bien tes classe en commençant par une majuscule (Par exemple ici class Main, ou encore ta classe ImpotsJDBC

    - utilise des booléens (boolean, ou encore la classe Boolean) pour gérer tes "flags" chkXXX à la place des String "oui" / "non".

    Bon courage.

  3. #3
    Candidat au Club
    Inscrit en
    Juillet 2011
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : Juillet 2011
    Messages : 2
    Par défaut
    Merci pour la réponse et pour les conseils

Discussions similaires

  1. [AC-2007] erreur impossible d'utiliser la fonction dans cette expression
    Par tibofo dans le forum VBA Access
    Réponses: 2
    Dernier message: 05/06/2010, 09h27
  2. Message d'erreur : impossible d'utiliser l'application
    Par batman25 dans le forum Runtime
    Réponses: 1
    Dernier message: 15/03/2010, 18h09
  3. Erreur:Impossible d'utiliser faire-suivre (forward)
    Par mazizou dans le forum Struts 1
    Réponses: 6
    Dernier message: 28/03/2007, 00h57
  4. Message d'erreur lors d'utilisation d'un Objet
    Par dirty_boy dans le forum Langage
    Réponses: 3
    Dernier message: 28/10/2005, 16h16
  5. [ASP] message d'erreur (impossible d'excuter un projet ...)
    Par haganidjamel dans le forum Delphi .NET
    Réponses: 6
    Dernier message: 06/09/2005, 17h28

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