Téléchargez le fichier audiodescription : Partie 5, Chapitre 2
Vous trouverez sous la vidéo les codes source du cours.
Codes source
Renseignez quelques entrées dans votre tables "noms" en exécutant des commandes SQL comme celle-ci (que vous pouvez adapter) depuis l'invite de commande MySQL :
INSERT INTO noms(nom, prenom) VALUES("Dupont", "Jean");
La servlet Test.java joue pleinement son rôle de contrôleur. Elle appelle le modèle qui lui renvoie un résultat, et le transmet à la vue :
package com.octest.servlets;
import java.io.IOException;
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.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import com.octest.bdd.Noms;
import com.octest.beans.Utilisateur;
/**
* Servlet implementation class Test
*/
@WebServlet("/Test")
public class Test extends HttpServlet {
private static final long serialVersionUID = 1L;
public Test() {
super();
// TODO Auto-generated constructor stub
}
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Noms tableNoms = new Noms();
request.setAttribute("utilisateurs", tableNoms.recupererUtilisateurs());
this.getServletContext().getRequestDispatcher("/WEB-INF/bonjour.jsp").forward(request, response);
}
public void doPost( HttpServletRequest request, HttpServletResponse response ) throws ServletException, IOException {
Utilisateur utilisateur = new Utilisateur();
utilisateur.setNom(request.getParameter("nom"));
utilisateur.setPrenom(request.getParameter("prenom"));
Noms tableNoms = new Noms();
tableNoms.ajouterUtilisateur(utilisateur);
request.setAttribute("utilisateurs", tableNoms.recupererUtilisateurs());
this.getServletContext().getRequestDispatcher("/WEB-INF/bonjour.jsp").forward(request, response);
}
}
Notre Java Bean Utilisateur.java est très simple. Il définit qu'un utilisateur est constitué d'un nom et d'un prénom et fournit des accesseurs et mutateurs :
package com.octest.beans;
public class Utilisateur {
private String nom;
private String prenom;
public String getNom() {
return nom;
}
public void setNom(String nom) {
this.nom = nom;
}
public String getPrenom() {
return prenom;
}
public void setPrenom(String prenom) {
this.prenom = prenom;
}
}
La communication avec la base de données se fait avec la classe Noms.java de notre modèle. C'est elle qui charge JDBC ici, se connecte à MySQL et envoie des requêtes SQL :
package com.octest.bdd;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.sql.Statement;
import java.sql.PreparedStatement;
import java.util.ArrayList;
import java.util.List;
import com.octest.beans.Utilisateur;
public class Noms {
private Connection connexion;
public List<Utilisateur> recupererUtilisateurs() {
List<Utilisateur> utilisateurs = new ArrayList<Utilisateur>();
Statement statement = null;
ResultSet resultat = null;
loadDatabase();
try {
statement = connexion.createStatement();
// Exécution de la requête
resultat = statement.executeQuery("SELECT nom, prenom FROM noms;");
// Récupération des données
while (resultat.next()) {
String nom = resultat.getString("nom");
String prenom = resultat.getString("prenom");
Utilisateur utilisateur = new Utilisateur();
utilisateur.setNom(nom);
utilisateur.setPrenom(prenom);
utilisateurs.add(utilisateur);
}
} catch (SQLException e) {
} finally {
// Fermeture de la connexion
try {
if (resultat != null)
resultat.close();
if (statement != null)
statement.close();
if (connexion != null)
connexion.close();
} catch (SQLException ignore) {
}
}
return utilisateurs;
}
private void loadDatabase() {
// Chargement du driver
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
}
try {
connexion = DriverManager.getConnection("jdbc:mysql://localhost:3306/javaee", "root", "");
} catch (SQLException e) {
e.printStackTrace();
}
}
public void ajouterUtilisateur(Utilisateur utilisateur) {
loadDatabase();
try {
PreparedStatement preparedStatement = connexion.prepareStatement("INSERT INTO noms(nom, prenom) VALUES(?, ?);");
preparedStatement.setString(1, utilisateur.getNom());
preparedStatement.setString(2, utilisateur.getPrenom());
preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}
}
Enfin, notre vue ne contient rien de nouveau. On y trouve un formulaire pour saisir des données et une liste sous forme de boucles qui affiche le contenu de notre Java Bean :
<%@ page pageEncoding="UTF-8" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8" />
<title>Test</title>
</head>
<body>
<form method="post" action="bonjour">
<p>
<label for="nom">Nom : </label>
<input type="text" name="nom" id="nom" />
</p>
<p>
<label for="prenom">Prénom : </label>
<input type="text" name="prenom" id="prenom" />
</p>
<input type="submit" />
</form>
<ul>
<c:forEach var="utilisateur" items="${ utilisateurs }">
<li><c:out value="${ utilisateur.prenom }" /> <c:out value="${ utilisateur.nom }" /></li>
</c:forEach>
</ul>
</body>
</html>