Nous poursuivons notre application permettant de gestion des clients d'une entreprise de travaux publics. Cette application doit permettre :
Le travail commencé a permis de gérer approximativement l'authentification, l'affichage d'un menu et l'affichage de la liste des clients.
Désormais, il faudrait pouvoir permettre la saisie d'un nouveau client et enregistrer les données saisies dans la base de données bdclient.
Modifier la page nouveauClientVue.jsp en y insérant un formulaire qui devra permettre de saisir toutes les données de la table client (Sauf l'id qui s'incrémente automatiquement). Ce formulaire lancera la méthode doPost de la servlet NouveauServlet.java en cas de soumission. Une fois la création du client terminée, un message indique à l'utilisateur : le client no ….. a été créé avec succès
Cette classe est dédiée aux requêtes SQL concernant la table client.
La méthode readAll est déjà écrite, il faut désormais ajouter la méthode create(Client unClient).
Rappel : Les requêtes SQL ont besoin d'un objet de type Statement qui contiendra la requête SQL. La méthode executeUpdate appliquée à cet objet exécute la requête. Cette méthode retourne le nombre de lignes affectées par la requête. Les accès à la base de données sont des instructions “à risque”, c'est pourquoi elles seront encadrées par try { …}.
La méthode getGeneratedKeys permet de récupérer l'identifiant du client créé.
Exemple de méthode create pour l'ajout d'une occurrence dans une table Salarie (avec requête préparée):
public int create(Client unClient){ int id=-1; String sql = "INSERT INTO client (nom, prenom, mail) VALUES (?,?,?);"; try (PreparedStatement prepStmt = theConnection.prepareStatement(sql, Statement.RETURN_GENERATED_KEYS)) { prepStmt.setString(1, unClient.getNom());//le param. 1 est remplacé par le nom du client prepStmt.setString(2, unClient.getPrenom()); prepStmt.setString(3, unClient.getMail()); int status = prepStmt.executeUpdate(); // récupération de la clé auto-générée if (status > 0) { try (ResultSet result = prepStmt.getGeneratedKeys()) { if (result.next()) { // <-- utiliser next() et pas first() id = result.getInt(1); } } } prepStmt.close(); } catch(SQLException ex){ System.out.println("SQLException:"+ex.getMessage()); System.out.println("SQLState:"+ex.getSQLState()); System.out.println("code Erreur:"+ex.getErrorCode()); } return id; } }
Cette classe contrôlera les saisies effectuées, puis permettra la création du client (Cf exemple AuthentifForm.java)
Ajouter la méthode verifierClient(HttpServletRequest request) :
Cette méthode est exécutée après validation du formulaire de saisie d'un nouveau client. Elle devra instancier un objet de type NouveauClientForm, et appeler la méthode verifierClient. Si l'ajout s'est bien passé, la page de liste des clients s'affichera avec un message indiquant “L'ajout du client xxx s'est bien déroulé”. Sinon, la page de saisie du formulaire se réaffichera avec un message d'erreur.
Vous avez maintenant 2 formulaires dans votre application, testez -les en écrivant dans une zone de texte :
<script>alert("Coucou!");</script>
Pour résoudre ce problème, de type faille xss, il faudra tester les zones saisies, elles ne devront pas comporter le caractère “<” :
Tester.