Aller au menu - Aller au contenu

Icône TP : la loterieZ

Mise à jour : 24/07/2009
Difficulté : Intermédiaire Intermédiaire Creative Commons BY-NC-SA
10 160 visites depuis 7 jours, dont 282 sur ce chapitre classé 25/786
Vous voilà rendus au premier TP de ce tuto.
Il est assez simple, je vous rassure. Par contre, il mettra en oeuvre tout ce que vous aurez vu jusqu'ici, alors accrochez-vous bien !
Sommaire du chapitre :
Icône du chapitre
Chapitre précédent Sommaire Chapitre suivant

Cahier des charges

Alors... La loterieZ est une loterie sous forme de page web que vous devrez coder !

Celle-ci vous demande de choisir deux chiffres DIFFÉRENTS dans deux listes de 1 à 10. Une fois ceci fait, vous devrez envoyer les informations au serveur (ça sent bon les formulaires...).

Une fois les informations reçues, nous aurons un objet LoterieZ qui se charge de faire le tirage des numéros, de voir si vous avez gagné (ou perdu) et qui retourne aussi les numéros de ce tirage !

Par contre, vous devrez gérer un message d'erreur si vous avez choisi deux fois le même numéro.
Il serait de bon ton que vous leviez une exception de votre cru lors du contrôle du tirage. Dans ce cas, vous utiliserez une page JSP différente de celle à utiliser pour l'affichage normal.

Voici un petit schéma :

Image utilisateur


Vous avez carte blanche sur la façon de gérer tout ça... Mais je vais tout de même vous fournir des copies d'écran... Histoire de vous diriger un peu. :)

Copies d'écran

Voici quelques copies d'écran de ce que j'ai pu obtenir.

Le formulaire



Image utilisateur


L'affichage en cas de victoire



Image utilisateur


L'affichage en cas de défaite



Image utilisateur


La page d'erreur



Image utilisateur


Vu que je suis un véritable amour sur pattes, je vous fournis aussi un screenshot du contenu de ma classe LoterieZ :

Image utilisateur


Voilà, les dernières recommandations ont été données, je n'ai plus qu'à vous souhaiter bonne chance et bon courage !
Allez ! GGGGOOOOOO !

Correction

Je me suis longtemps demandé si je devais vous fournir une correction ou si je devais vous laisser chercher...
Nan... Je plaisante. :p

Vous avez bien cherché, j'espère. Vous ne vous ruez pas sur la correction comme ça...
Bon, voici les sources de mon projet :

Secret (cliquez pour afficher)


Le modèle


Classe IllegalGameException.java



Code : Java
1
2
3
4
5
6
7
package com.sdz.model.exception;

public class IllegalGameException extends Exception {	
	public IllegalGameException(){
		super("Vous avez choisi plusieurs fois le même numéro ! !");
	}	
}



Classe LoterieZ.java



Code : Java
 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
package com.sdz.model;

import java.util.ArrayList;

import com.sdz.model.exception.IllegalGameException;

public class LoterieZ {

	/**
	 * Liste des numéros du tirage
	 */
	private ArrayList<Integer> listNumero = new ArrayList<Integer>();
	
	/**
	 * Constructeur
	 */
	public LoterieZ(){
		for(int i=0; i < 2; i++){
			int num = (int)(Math.random() * 10);
			while(listNumero.contains(num)){
				num = (int)(Math.random() * 10);
			}
			listNumero.add(num);
		}
	}
	
	/**
	 * Méthode qui permet de voir si on a gagné 
	 * @param val1
	 * @param val2
	 * @param val3
	 * @return
	 * @throws IllegalGameException
	 */
	public boolean match(int val1, int val2) 
							throws IllegalGameException{
		if(val1 == val2 )
			throw new IllegalGameException();
		else{
			return 	listNumero.contains(new Integer(val1)) &&
					listNumero.contains(new Integer(val2));
		}
	}
	
	/**
	 * Méthode qui retourne la liste des numéros du tirage 
	 * @return
	 */
	public ArrayList<Integer> getTirage(){
		return this.listNumero;
	}
}


Les vues


Fichier index.jsp



Code : JSP
 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
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body style="width:50%; margin:auto;">
	<h2 style="text-align:center;color:white;background-color:#787878">Bienvenue à la loterieZ !</h2>
	<p style="text-align:center;border:1px dashed black; padding:5px;background-color:#efefef">
		<span style="text-decoration:underline;font-style:italic;font-size:1.1em">
			Le but du jeu est simple :
		</span><br /> 
		Vous devez choisir 3 numéros différents dans les listes suivantes !<br />
		Ensuite, vous n'avez plus qu'à valider et voir si vous avez gagné...<br />
		Bonne chance. :)	
	</p>
	
	<form action="tirage.do" method="post" style="text-align:center">
		
		<%
			//On génère les champs.
			for(int i = 1; i < 3; i++){
				out.println("Numéro " + i + ": <select name=\"number"+i+"\">");
				for(int j = 1; j <= 10; j++){
					out.println("<option value=\""+j+"\">"+ j + "</option>");
				}
				out.println("</select><br />");
			}
		%>
		<br />
		<input type="submit" value="Valider" />
	</form>
</body>
</html>


Fichier show.jsp



Code : JSP
 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
<%@ page import="java.util.ArrayList" %>
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body style="width:50%; margin:auto;">
	<h2 style="text-align:center;color:white;background-color:blue;border:2px solid black">
		Bienvenue au tirage de la loterieZ !<br />
		Voici le tirage d'aujourd'hui : <br />
		<span style="font-size:1.4em;">
		<%
			//On récupère les numéros de la loterie et on les affiches
			ArrayList<Integer> list = (ArrayList<Integer>)request.getAttribute("tirage");
			for(int i = 0; i < list.size();i++){
				out.println(list.get(i));
				if(i < list.size() -1 )
					out.println(" - ");
			}
		%>
		
		</span>
	</h2>
	
	<h2 style="text-align:center">
		Vous aviez joué : 
			<%=request.getAttribute("number1").toString() %> - 
			<%=request.getAttribute("number2").toString() %><br />
		<%=request.getAttribute("message").toString() %>
	</h2>
	
	<h2 style="text-align:center">
		Vous pouvez tenter à nouveau votre chance en suivant <a href="home">ce lien</a>
	</h2>
	
	
	
</body>
</html>


Fichier error.jsp



Code : JSP
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
<!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=ISO-8859-1">
<title>Insert title here</title>
</head>
<body style="width:50%; margin:auto;">
	<h2 style="text-align:center;color:white;background-color:red;border:2px solid black">
		Une erreur est survenue : <br />
		<%=request.getAttribute("error").toString() %>
	</h2>
	
	<h2 style="text-align:center">Vous pouvez retenter votre chance en suivant <a href="home">ce lien</a></h2>
	
</body>
</html>


Les contrôleurs


Servlet Index.java



Code : Java
 1
 2
 3
 4
 5
 6
 7
 8
 9
10
11
12
13
14
15
16
17
18
19
package com.sdz.control;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class Index extends HttpServlet {

	public void doGet(	HttpServletRequest request, 
						HttpServletResponse response)
						throws IOException, ServletException{
		//Bon, là, c'est simple tout de même...
		request.getRequestDispatcher("index.jsp").forward(request, response);
		
	}	
}



Servlet FormulaireAction.java



Code : Java
 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
package com.sdz.control;

import java.io.IOException;
import java.util.ArrayList;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import com.sdz.model.LoterieZ;
import com.sdz.model.exception.IllegalGameException;

public class FormulaireAction extends HttpServlet {

	public void doPost(	HttpServletRequest request, 
						HttpServletResponse response)
						throws IOException, ServletException{
		
		
		LoterieZ loto = new LoterieZ();
		
		String message = "";
		
		try {
			//On teste si le client a gagné ou non
			if(loto.match(	Integer.parseInt(request.getParameter("number1")), 
							Integer.parseInt(request.getParameter("number2")))){
				message = "Félicitations, vous avez gagné ! ! ! ";
			}
			else{
				message = "Quel dommage, vous avez perdu... ";
			}
			//On affecte des attributs à notre JSP pour l'affichage
			request.setAttribute("message", message);
			request.setAttribute("number1", Integer.parseInt(request.getParameter("number1")));
			request.setAttribute("number2", Integer.parseInt(request.getParameter("number2")));
			request.setAttribute("tirage", loto.getTirage());
			
			request.getRequestDispatcher("show.jsp").forward(request, response);
			
		} catch (IllegalGameException e) {
			//Si le contrôle à levé une exception, on prend la JSP correspondante
			request.setAttribute("error", e.getMessage());
			request.getRequestDispatcher("error.jsp").forward(request, response);
		}			
	}	
}


Et le fichier web.xml



Code : XML
 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
<web-app>

	<servlet>
		<servlet-class>com.sdz.control.Index</servlet-class>
		<servlet-name>StartPage</servlet-name>
	</servlet>
	
	<servlet>
		<servlet-class>com.sdz.control.FormulaireAction</servlet-class>
		<servlet-name>FormAction</servlet-name>
	</servlet>
	
	<servlet-mapping>
		<servlet-name>StartPage</servlet-name>
		<url-pattern>/home</url-pattern>
	</servlet-mapping>
	
	<servlet-mapping>
		<servlet-name>StartPage</servlet-name>
		<url-pattern>/</url-pattern>
	</servlet-mapping>
	
	<servlet-mapping>
		<servlet-name>FormAction</servlet-name>
		<url-pattern>*.do</url-pattern>
	</servlet-mapping>
	
</web-app>






Voilà, vous avez toutes les informations pour comprendre ce code.
Si vous avez du mal, je suis là, mais essayez d'abord de comprendre par vous-mêmes, en relisant les chapitres par exemple. Car c'est comme ça qu'on retient le mieux les choses ! ;)

Pour les Zéros qui le souhaitent, je mets le contenu de mon application dans une archive.
Vous pouvez la télécharger ici !
Il ne vous restera plus qu'à décompresser celle-ci dans le dossier "webapps" de Tomcat et à redémarrer celui-ci. ^^
Vous avez aimé ce TP ?
Quoi ? On a perdu des Zéros dans la bataille ? o_O

Ouf ! C'était une fausse alerte... :lol:

Bon, prenez bien le temps de digérer cette partie car la suite promet d'être un chouilla plus compliquée...
Chapitre précédent Sommaire Chapitre suivant

Partager

15 commentaires pour "TP : la loterieZ"
Note moyenne : 3.17 / 4 (294 votes)
Pseudo Commentaire
Hors ligne magikk # Posté le 07/09/2009 à 16:45:45

Salut,
Moi ce que je n'ai pas compris c'est le while dans le constructeur LoterieZ():ok on génère un nombre aléatoire entre 1 et 10 que l'on met dans num,mais pourquoi faut-il le faire tant que la liste des numéros contient num?Elle se produit quand la condition d'arrêt de cette boucle?
Hors ligne lecods # Posté le 25/02/2010 à 04:27:36

Salut, j'ai commencé le TP et pour mettre en forme le titre etc je veux utiliser un fichier css comme indiqué dans le cours de xhtml et css. j'ai mis dans l'entete de mon fichier index.jsp la ligne suivante : <link rel="stylesheet" media="screen" type="text/css" title="Indexjsp" href="css/indexjsp.css" />

dans le projet tomcat j'ai index.jsp à la racine et le fichier css dans un repertoire css

mon fichier index.jsp et indexjsp.css sont aux meme endroits sur le disque. Quand j evais sur la page d'accueil rien ne se passe, à croire que le fichier css n'est pas lier au fichier. Comment faire pour que ca fonctionne merci?

edit: désolé je viens de voir qu'il y avait un forum et qu'on ne devait pas poser de question ici, et je n'ai pas trouvé comment supprimer mon message.
Hors ligne Gnarkinou # Posté le 17/05/2010 à 10:43:01
Dans le mouton, tout est bon !
Avatar

Ville : Bangaluru
Pays : Inde

Salut tout le monde!

Merci csboy pour ce tuto. Mais ma solution comme la tienne possede le meme probleme.

Je suis avec NetBeans et chez moi la loterie marche bien, sauf le retour au debut. Le lien qui propose de revenir tenter sa chance m`envoie... Sur une page blanche...

J`ai hate de lire la suite, meme si le tuto a l`air maintenant mort...

:p Mouwhahahahaha :p
Secret (cliquez pour afficher)
Ehh!? Qui ta permis de clicker la toi?? Non mais! Clickeur va!

Codeur: C/java/html/css/J2EE Apprend: C++
Recherche: projet jeux video
Image utilisateurImage utilisateurImage utilisateurImage utilisateurImage utilisateurImage utilisateur
 
Hors ligne sidouo # Posté le 14/08/2010 à 15:40:37

bonjour,

grace a ce turo, j'ai pu comprendre le modele MVC et l'adaptation de ce modele sur les application J2EE, juste une chose, pour les web service ? y'a-t-il u tuto ? ou bien ca sera la suite de ce tuto merci. si queqlu'un veut qu'on travaille ensemble sur les web service ?? !!! bein je suis pret
Hors ligne Don_Diego # Posté le 08/09/2010 à 19:30:48

bien joué cysboy!

Voir tous les commentaires