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 pour gérer des exceptions


Sujet :

Servlets/JSP Java

  1. #1
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Points : 26
    Points
    26
    Par défaut problème pour gérer des exceptions
    Bonjour à tous,
    je débute dans le monde J2EE, j'ai donc commencé par suivre un tutoriel dont le but est de créer un formulaire tout simple (nom et age à renseigner) et de rediriger sur l'une des pages suivantes suivant les cas: reponse.jsp, erreurs.jsp ou formulaire.jsp (cas d'un redéploiement de la page)
    Si les champs sont correctement remplis tout se passe bien et l'on est bien redirigé vers reponse.jsp. Par contre si l'un au moins des champs est vide ou mal saisi j'obtiens une erreur d'exception du type IndexOutOfBoundsException comme si j'avais un dépassement d'indice dans un tableau alors que je devrais obtenir un message d'erreur prévu par la servlet...

    Voici le code de la 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
    119
    120
    121
    122
    123
    124
    125
    126
    127
    128
    129
    130
    131
    132
    package yaflt.servlets.djTallCulture;
     
    import java.io.IOException;
    import java.util.ArrayList;
    import java.util.HashMap;
    import java.util.Map;
     
    import javax.servlet.ServletConfig;
    import javax.servlet.ServletException;
    import javax.servlet.http.HttpServlet;
    import javax.servlet.http.HttpServletRequest;
    import javax.servlet.http.HttpServletResponse;
     
    @SuppressWarnings("serial")
    public class ServletDjTallCulture extends HttpServlet {
     
    	//paramètres d'instance
    	private String urlErreurs = null;
    	private ArrayList erreursInitialisation = new ArrayList<String>();
    	private String[] paramètres={"urlFormulaire","urlReponse"};
    	private Map params=new HashMap<String,String>();
     
    	//init
    	@SuppressWarnings("unchecked")
    	public void init() throws ServletException{
    	//on récupère les paramètres d'initialisation de la servlet
    	ServletConfig config = getServletConfig();
    	//on traite les autres paramètres d'initialisation
    	String valeur=null;
    		for(int i=0;i<paramètres.length;i++){
    			//valeur du paramètre
    			valeur = config.getInitParameter(paramètres[i]);
    			//paramètre présent?
    			if(valeur == null){
    				//on note l'erreur
    				erreursInitialisation.add("Le paramètre ["+paramètres[i]+"] n'a pas été initialisé");
    			}else{
    				//on mémorise la valeur du paramètre
    				params.put(paramètres[i], valeur);
    			}
    			//l'url de la vue [erreurs]a un traitement particulier
    			urlErreurs = config.getInitParameter("urlErreurs");
    			if (urlErreurs == null)
    				throw new ServletException("Le paramètre [urlErreurs] n'a pas été initialisé");
    		}
    		
    	}
    	
    	@SuppressWarnings("unchecked")
    	public void doGet(HttpServletRequest request, HttpServletResponse response) 
    	throws IOException, ServletException {
    		
    		// on vérifie comment s'est passé l'initialisation de la servlet
    		if(erreursInitialisation.size()!=0){
    			//on passe la main à la page d'erreurs
    			request.setAttribute("erreurs", erreursInitialisation);
    			getServletContext().getRequestDispatcher(urlErreurs).forward(request, response);
    			//fin
    			return;
    		}
     
    		//on récupère la méthode d'envoi de la requête
    		String méthode = request.getMethod().toLowerCase();
    		//on récupère l'action à exécuter
    		String action = request.getParameter("action");
    		//action?
    		if(action==null){
    			action="init";
    		}
    		//exécution action
    		if(méthode.equals("get") && action.equals("init")){
    			//démarrage application
    			doInit(request,response);
    			return;			
    		}
    		if(méthode.equals("post") && action.equals("validationFormulaire")){
    			//validation du formulaire de saisie
    			doValidationFormulaire(request,response);
    			return;			
    		}
    		// autres cas
    		doInit(request,response);
     
    	}
     
    	//affichage vue initiale
    	void doInit(HttpServletRequest request, HttpServletResponse response)
    	throws IOException, ServletException {
    		//on envoie le formulaire vide
    		request.setAttribute("nom", "");
    		request.setAttribute("age", "");
    		getServletContext().getRequestDispatcher((String)params.get("urlFormulaire")).forward(request, response);
    		return;	
    	}
     
    	//validation du formulaire
    	void  doValidationFormulaire(HttpServletRequest request, HttpServletResponse response)
    	throws IOException, ServletException {
    		//on récupère les paramètres
    		String nom = request.getParameter("txtNom");
    		String age = request.getParameter("txtAge");
    		//vérification des paramètres
    		ArrayList<String> erreursAppel = new ArrayList<String>();
    		//le nom doit être non vide
    		nom = nom.trim();
    		if (nom.equals(""))
    			erreursAppel.add("Le champ [nom] n'a pas été rempli");
    		//l'age doit être un entier >=0
    		if (!age.matches("^\\s*\\d+\\s*$"))
    			erreursAppel.add("Le champ [age] est erroné");
    		//des erreurs dans les paramètres?
    		if(erreursAppel.size()!=0){
    			//on envoie la page d'erreurs
    			request.setAttribute("erreurs", erreursAppel);
    			getServletContext().getRequestDispatcher(urlErreurs).forward(request,response);
    			return;			
    		}
    		// les paramètres sont corrects - on envoie la page réponse
    		request.setAttribute("nom", nom);
    		request.setAttribute("age", age);
    		getServletContext().getRequestDispatcher((String)params.get("urlReponse")).forward(request,response);
    		return;
    	}
     
    	//post
    	public void doPost(HttpServletRequest request, HttpServletResponse response)
    	throws IOException, ServletException {
    		//on passe la main au GET
    		doGet(request, response);
    	}
     
    }
    voici le code de la page erreurs.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
    22
    23
    24
    25
    <%@ page language="java" contentType="text/html; charset=ISO-8859-1"
        pageEncoding="ISO-8859-1"%>
    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
    <%@ page import="java.util.ArrayList" %>
     
    <%
            // on récupère les données du modèle
            ArrayList erreurs = (ArrayList)request.getAttribute("erreurs");
    %>
    <html>
    	<head>
    		<title>DjTallCulture</title>
    	</head>
    	<body>
    		<h2>Les erreurs suivantes se sont produites</h2>
    		<ul>
     
    			<%
                             for(int i=0;i<=erreurs.size();i++){
                                     out.println("<li>"+(String) erreurs.get(i)+"<li>\n");
                             }//for
                            %>
    		</ul>
    	</body>
    </html>
    et enfin le message d'erreur de 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
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    type Rapport d'exception
     
    message
     
    description Le serveur a rencontré une erreur interne () qui l'a empêché de satisfaire la requête.
     
    exception
     
    org.apache.jasper.JasperException: Index: 2, Size: 2
    	org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:460)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:373)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	yaflt.servlets.djTallCulture.ServletDjTallCulture.doValidationFormulaire(ServletDjTallCulture.java:115)
    	yaflt.servlets.djTallCulture.ServletDjTallCulture.doGet(ServletDjTallCulture.java:78)
    	yaflt.servlets.djTallCulture.ServletDjTallCulture.doPost(ServletDjTallCulture.java:129)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
     
    cause mère
     
    java.lang.IndexOutOfBoundsException: Index: 2, Size: 2
    	java.util.ArrayList.RangeCheck(Unknown Source)
    	java.util.ArrayList.get(Unknown Source)
    	org.apache.jsp.WEB_002dINF.vues.erreurs_jsp._jspService(erreurs_jsp.java:63)
    	org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:98)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:331)
    	org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:329)
    	org.apache.jasper.servlet.JspServlet.service(JspServlet.java:265)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    	yaflt.servlets.djTallCulture.ServletDjTallCulture.doValidationFormulaire(ServletDjTallCulture.java:115)
    	yaflt.servlets.djTallCulture.ServletDjTallCulture.doGet(ServletDjTallCulture.java:78)
    	yaflt.servlets.djTallCulture.ServletDjTallCulture.doPost(ServletDjTallCulture.java:129)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:710)
    	javax.servlet.http.HttpServlet.service(HttpServlet.java:803)
    J'ai pourtant repris à la lettre le code du tutoriel mais là je suis à cours d'idée...

  2. #2
    Nouveau membre du Club
    Profil pro
    Inscrit en
    Avril 2006
    Messages
    29
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2006
    Messages : 29
    Points : 26
    Points
    26
    Par défaut
    quel idiot je viens de m'apercevoir de mon erreur qui était dans la boucle for de ma page erreur.jsp (i<erreurs.size() et non i<=erreurs.size() qui entraînait ce dépassement d'indice...

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

Discussions similaires

  1. Problème pour gérer des exceptions
    Par Jiyuu dans le forum GUI
    Réponses: 3
    Dernier message: 29/05/2008, 17h01
  2. Réponses: 4
    Dernier message: 08/04/2007, 17h17
  3. Problème pour Télécharger des fichiers
    Par joce3000 dans le forum C++Builder
    Réponses: 8
    Dernier message: 21/01/2005, 10h30
  4. problème pour faire des blocs
    Par tinkye_winkye dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 04/01/2005, 14h13
  5. Une unité pour gérer des très grands nombres
    Par M.Dlb dans le forum Langage
    Réponses: 2
    Dernier message: 09/09/2003, 12h07

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