Précédent   Forum du club des développeurs et IT Pro > Java > Développement Web en Java > Servlets/JSP
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 03/01/2013, 13h36   #1
linuxien_62
Nouveau Membre du Club
 
Homme
Administrateur systèmes et réseaux
Inscription : avril 2012
Messages : 110
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Administrateur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : avril 2012
Messages : 110
Points : 30
Points : 30
Par défaut J2EE et Base de données MySQL

Bonjour ,

je me dirige vers vous car étant en 2eme année de master , j'ai un petit TD à faire , J'ai déjà bien avancé mais je me perds au moment d'établir une insertion des champs de mon formulaire dans ma base de donnée mysql. Pouvez vous m'aider ?

En détail j'ai tout d'abord une classe TestJDBC.java :

Code :
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
package com.td.bdd;
 
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.util.ArrayList;
import java.util.List;
 
import javax.servlet.http.HttpServletRequest;
 
//@WebServlet("/test_jdbc")
public class TestJDBC {
 
	private List<String> messages = new ArrayList<String>();
 
	public List<String> executerTests( HttpServletRequest request ){
		 /* Chargement du driver JDBC pour MySQL */
	    try {
	        messages.add( "Chargement du driver..." );
	        Class.forName( "com.mysql.jdbc.Driver" );
	        messages.add( "Driver chargé !" );
	    } catch ( ClassNotFoundException e ) {
	        messages.add( "Erreur lors du chargement : le driver n'a pas été trouvé dans le classpath ! <br/>"
	                + e.getMessage() );
	    }
 
	    /* Connexion à la base de données */
	    String url = "jdbc:mysql://localhost:3306/bdd_contacts";
	    String utilisateur = "java";
	    String motDePasse = "123456";
	    Connection connexion = null;
	    Statement statement = null;
	    ResultSet resultat = null;
	    try {
	        messages.add( "Connexion à la base de données..." );
	        connexion = DriverManager.getConnection( url, utilisateur, motDePasse );
	        messages.add( "Connexion réussie !" );
 
	        /* Création de l'objet gérant les requêtes */
	        statement = connexion.createStatement();
	        messages.add( "Objet requête créé !" );
 
	        /* Exécution d'une requête de lecture */
	        resultat = statement.executeQuery( "SELECT id, nom, prenom, email FROM contact;" );
	        messages.add( "Requête \"SELECT id, nom, prenom, email FROM contact;\" effectuée !" );
 
	        /* Récupération des données du résultat de la requête de lecture */
	        while ( resultat.next() ) {
	            int idContact = resultat.getInt( "id" );
	            String nomContact = resultat.getString( "nom" );
	            String prenomContact = resultat.getString( "prenom" );
	            String emailContact = resultat.getString( "email" );
	            /* Formatage des données pour affichage dans la JSP finale. */
	            messages.add( "Données retournées par la requête : id = " + idContact + ", nom = " + nomContact
	                    + ", prenom = "
	                    + prenomContact + ", email = " + emailContact + "." );
	        }
	    } catch ( SQLException e ) {
	        messages.add( "Erreur lors de la connexion : <br/>"
	                + e.getMessage() );
	    } finally {
	        messages.add( "Fermeture de l'objet ResultSet." );
	        if ( resultat != null ) {
	            try {
	                resultat.close();
	            } catch ( SQLException ignore ) {
	            }
	        }
	        messages.add( "Fermeture de l'objet Statement." );
	        if ( statement != null ) {
	            try {
	                statement.close();
	            } catch ( SQLException ignore ) {
	            }
	        }
	        messages.add( "Fermeture de l'objet Connection." );
	        if ( connexion != null ) {
	            try {
	                connexion.close();
	            } catch ( SQLException ignore ) {
	            }
	        }
	    }
 
	    return messages;
	}
 
}
Une servlet Inscription.java :

Code :
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
package com.td.servlet;
 
import java.io.IOException;
import java.util.HashMap;
import java.util.Map;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
@SuppressWarnings("serial")
public class Inscription extends HttpServlet {
 
	public static final String VUE = "/WEB-INF/contact.jsp";
	public static final String CHAMP_NOM = "nom";
	public static final String CHAMP_PRENOM = "prenom";
	public static final String CHAMP_EMAIL = "email";
	public static final String CHAMP_GROUPE = "groupe";
	public static final String ATT_ERREURS = "erreurs";
	public static final String ATT_RESULTAT = "resultat";
 
	public void doGet( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException{
		/* Affichage de la page d'inscription */
		this.getServletContext().getRequestDispatcher( VUE ).forward( request, response );
	}
 
 
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
 
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		String resultat;
		Map<String, String> erreurs = new HashMap<String, String>();
		//récupération des champs du formulaire		
		String nom = request.getParameter(CHAMP_NOM);
		String prenom = request.getParameter(CHAMP_PRENOM);
		String email = request.getParameter(CHAMP_EMAIL);
		String groupe = request.getParameter(CHAMP_GROUPE);
 
 
		try {			
			validationNom(nom);
		} catch (Exception e){
			erreurs.put(CHAMP_NOM, e.getMessage());
		}
 
		try {
			validationPrenom(prenom);
		} catch (Exception e){
			erreurs.put(CHAMP_PRENOM, e.getMessage());
		}
 
		try {
			validationEmail(email);
		} catch (Exception e){
			erreurs.put(CHAMP_EMAIL, e.getMessage());
		}
 
		//initialisation du résultat global de la validation
		if(erreurs.isEmpty()){
			resultat = "Succès de l'inscription.";
		}else{
			resultat = "Echec de l'inscription.";
		}
 
		//Stockage du résultat et des messages d'erreur dans l'objet request
		request.setAttribute(ATT_ERREURS, erreurs);
		request.setAttribute(ATT_RESULTAT, resultat);
 
		//transmission de la paire d'objets request/response à la JSP
		this.getServletContext().getRequestDispatcher(VUE).forward(request, response);
	}
 
	//verification taille du nom
	private void validationNom(String nom)throws Exception{
		if(nom.trim().length()<2){
			throw new Exception("un nom contient au moins deux caractères celui saisi est trop court");
		}
	}
 
	//verification taille du prenom
	private void validationPrenom(String prenom)throws Exception{
		if(prenom.trim().length()<2){
			throw new Exception("un prenom contient au moins deux caractères celui saisi est trop court");
		}
	}
 
	//verification email formulaire
	private void validationEmail(String email)throws Exception{
		if ( email != null && email.trim().length() != 0 ) {
			if ( !email.matches( "([^.@]+)(\\.[^.@]+)*@([^.@]+\\.)+([^.@]+)" ) ) {
				throw new Exception( "Merci de saisir une adresse mail valide." );
			}
		} else {
			throw new Exception( "Merci de saisir une adresse mail." );
		}
	}
 
}
Une JSP , contact.jsp :

Code :
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
<%@ page pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
    <head>
        <meta charset="utf-8" />
        <title>Inscription</title>
    </head>
    <body>
        <form method="post" action="contact">
            <fieldset>
                <legend>Inscription</legend>
                <p>Vous pouvez vous inscrire via ce formulaire.</p>
 
                <label for="nom">Nom d'utilisateur</label>
                <input type="text" id="nom" name="nom" value="<c:out value="${param.nom}"/>" size="20" maxlength="20" />
                <span>${erreurs['nom']}</span>
                <br />
 
                <label for="prenom">Prenom d'utilisateur</label>
                <input type="text" id="prenom" name="prenom" value="<c:out value="${param.prenom}"/>" size="20" maxlength="20" />
                <span>${erreurs['prenom']}</span>
                <br />
 
				<label for="email">Adresse email <span>*</span></label>
                <input type="email" id="email" name="email" value="<c:out value="${param.email}"/>" size="20" maxlength="60" />
                <span>${erreurs['email']}</span>
                <br />
 
                <label for="groupe">Groupe d'utilisateur</label>
                <input type="radio" id="groupe1" name="groupe1" value="<c:out value="${param.groupe}"/>" />
                <input type="radio" id="groupe2" name="groupe2" value="<c:out value="${param.groupe}"/>" />
                <span>${erreurs['nom']}</span>
                <br />
 
                <input type="submit" value="Inscription" class="sansLabel" />
                <br />
 
                <p class="${empty erreurs ? 'succes' : 'erreur'}">${resultat}</p>
            </fieldset>
        </form>
    </body>
</html>
Et mon fichier web.xml :

Code :
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
<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xmlns:javaee="http://java.sun.com/xml/ns/javaee" xmlns="http://java.sun.com/xml/ns/javaee"
	xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
	xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
	version="3.0">
	<javaee:description>Interface web</javaee:description>
	<javaee:display-name>Service bdd</javaee:display-name>
	<servlet>
		<servlet-name>GestionTestJDBC</servlet-name>
		<servlet-class>com.td.servlet.GestionTestJDBC</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>GestionTestJDBC</servlet-name>
		<url-pattern>/test_jdbc</url-pattern>
	</servlet-mapping>
	<servlet>
	    <servlet-name>Inscription</servlet-name>
	    <servlet-class>com.td.servlet.Inscription</servlet-class>
	</servlet>
	<servlet-mapping>
		<servlet-name>Inscription</servlet-name>
		<url-pattern>/contact</url-pattern>
	</servlet-mapping>
</web-app>
Au préalable j'avais effectué un test pour savoir si j'arrivais bien à communiquer avec ma base de donnée mysql en mode lecture via la requête présente dans ma classe TestJDBC.java ( c'est une requête Select * from ...)

Voici la servlet de test qui se charge d'executer la requete et d'afficher le contenu de ma base et cela fonctionne correctement j'en déduis donc que je n'ai pas de problème d'implémentation de ma base. :

Code :
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
package com.td.servlet;
 
import java.io.IOException;
import java.util.List;
 
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
 
import com.td.bdd.TestJDBC;
 
/**
 * Servlet implementation class GestionTestJDBC
 */
//@WebServlet("/test_jdbc")
public class GestionTestJDBC extends HttpServlet {
	private static final long serialVersionUID = 1L;
	 public static final String ATT_MESSAGES = "messages";
	 public static final String VUE = "/WEB-INF/test_jdbc.jsp";   
    /**
     * @see HttpServlet#HttpServlet()
     */
    public GestionTestJDBC() {
        super();
        // TODO Auto-generated constructor stub
    }
 
	/**
	 * @see HttpServlet#doGet(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		 /* Initialisation de l'objet Java et récupération des messages */
        TestJDBC test = new TestJDBC();
        List<String> messages = test.executerTests( request );
 
        /* Enregistrement de la liste des messages dans l'objet requête */
        request.setAttribute( ATT_MESSAGES, messages );
 
        /* Transmission vers la page en charge de l'affichage des résultats */
        this.getServletContext().getRequestDispatcher( VUE ).forward( request, response );
	}
 
	/**
	 * @see HttpServlet#doPost(HttpServletRequest request, HttpServletResponse response)
	 */
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		// TODO Auto-generated method stub
	}
 
}
Ma question pour finir est , comment je fais maintenant pour pouvoir faire un Insert à partir de mon formulaire contact.jsp. Je précise que le model MVC n'est pas encore trop respecter car me manque le controleur et pour le moment c'est ma servlet Inscription.java qui s'occupe de tout ou presque.

Pouvez vous m'aiguiller svp. Merci
linuxien_62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 15h37   #2
linuxien_62
Nouveau Membre du Club
 
Homme
Administrateur systèmes et réseaux
Inscription : avril 2012
Messages : 110
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France, Pas de Calais (Nord Pas de Calais)

Informations professionnelles :
Activité : Administrateur systèmes et réseaux
Secteur : Enseignement

Informations forums :
Inscription : avril 2012
Messages : 110
Points : 30
Points : 30
En fait j'ai un probleme juste pour joindre ma classe testjdbc.java qui contient une requete en dur , select * from ... , et si je fais un INSERT ... ça fonctionne bien mais en dur dans la classe. Moi ce que je voudrais c'est récupérer les parametres via GetParametre et les intégrer en tant que champ en dynamique dans mon INSERT lorsque mon formulaire est soumis.
linuxien_62 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 15h41   #3
Malinaka
Membre confirmé
 
Femme
Étudiant
Inscription : décembre 2009
Messages : 165
Détails du profil
Informations personnelles :
Sexe : Femme

Informations professionnelles :
Activité : Étudiant
Secteur : Finance

Informations forums :
Inscription : décembre 2009
Messages : 165
Points : 287
Points : 287
Salut,
Si je comprend la question tu devrais regarder du coté des prepared statement:
http://docs.oracle.com/javase/1.4.2/docs/api/java/sql/PreparedStatement.html
Malinaka est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/01/2013, 16h07   #4
olivier.pitton
Membre éprouvé
 
Avatar de olivier.pitton
 
Homme olivier pitton
Étudiant
Inscription : juin 2012
Messages : 210
Détails du profil
Informations personnelles :
Nom : Homme olivier pitton
Âge : 24
Localisation : France

Informations professionnelles :
Activité : Étudiant
Secteur : High Tech - Éditeur de logiciels

Informations forums :
Inscription : juin 2012
Messages : 210
Points : 439
Points : 439
Plop,

Il te suffit de faire une classe gérant la connexion à la base de données, avec des méthodes insert / select / ... que tu appelles depuis ta Servlet. Toutes les Servlets que tu crées utilises ta classe TestJDBC pour effectuer les traitements.

Pour récupérer les paramètres depuis un formulaire, il te suffit de faire getParameter(name) et de passer ces paramètres à la méthode effectuant le insert. Par exemple faire "getParameter("name")" pour récupérer le nom et le passer à "TestJDBC.insert(name)".
olivier.pitton est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 13h30.


 
 
 
 
Partenaires

Hébergement Web