servlet et mysql
DESCRIPTION
Servlet & MysqlTRANSCRIPT
SERVLET ET BASE DE DONNES MYSQL (MARIA DB) 4ième année -‐ Cours Java EE – M .Messan
Réalisation d’une mini application CRUD de gestion d’utilisateurs
L’acronyme anglais CRUD (Create Read Update Delete) consiste en la réalisation d’un projet mettant en relief les quatre actions principales qu’on peut effectuer au sein d’une base de données. On suppose qu’un utilisateur est caractérisé par les paramètres suivants :
-‐ Son CIN -‐ Son Nom -‐ Son prénom -‐ Son Téléphone -‐ Son Email -‐ Son mot de passe
Dans un premier temps nous allons créer une base de données en MySQL nommée :Gestionutilisateur On suppose que cette base de données est utilisé par un utilisateur ayant les coordonnés suivants : Pseudo : admin_user Mot de passe :Admin123 Nous utiliserons ici la méthode de programmation MVC (Modèle vue Contrôleur) qui permet de subdiviser notre projet en trois couches. La couche Modèle qui gère l’accès à la base données. La couche Vue qui s’occupe de l’affichage La couche Controleur qui gère toutes les actions ou requêtes lancées par l’utilisateur.
Dans notre projet nous allons créer différents packages qui vont représenter chaque couche du modèle MVC. Premier package à créer : net.epsiel.model Dans le package model nous allons donc créer la classe Utilisateur . public class Utilisateur{ private String Nom ; private String Prenom ; private String Telephone ; private String Email ; private String Password ; public Utilisateur (String Nom,String Prenom,String Telephone,String Email,String Password){ this.Nom=Nom ; this.Prenom=Prenom ; this.Telephone=Telephone ; this.Email =Email ; this.Password=Password ; } } Deuxième package : net.epsiel.connection Ce package contiendra la classe qui va assurer la connexion à la base de données (Mysql dans notre cas).Il est à noter que le langage Java dispose d’un API (JDBC) de connexion aux différents systèmes de gestion de base de données qui existent sur le marché. Pour établir la connexion à une base de données l’API a donc besoin d’un pilote de la base de données. Dans notre cas nous avons donc besoin de télécharger le pilote Mysql Database Connector qui est un fichier jar que nous devons ajouter dans les bibliothèques de notre projet. Nous allons donc créer dans le package net.epsiel.connection la classe DBConnection qui va assurer la connexion à la base.Afin de rendre le travail modulaire nous allons stocker les informations de connexion à la base de données dans un fichier que nous nommerons db.properties qui contiendra les lignes suivantes :
driver=com.mysql.jdbc.Driver url=jdbc:mysql://localhost:3306/gestionutilisateur user=admin_user
password= Admin12
Classe de connection à la base de données. import java.io.FileNotFoundException; import java.io.IOException; import java.io.InputStream; import java.sql.Connection; import java.sql.DriverManager; import java.sql.SQLException; import java.util.Properties;
public class DbConnection { //Création de l’objet de connection private static Connection connection = null; //Méthode de connection public static Connection getConnection() { if (connection != null) return connection; else { try { Properties prop = new Properties(); //Récupération des paramètres de connection InputStream inputStream = DbUtil.class.getClassLoader().getResourceAsStream("/db.properties"); prop.load(inputStream); String driver = prop.getProperty("driver"); String url = prop.getProperty("url"); String user = prop.getProperty("user"); String password = prop.getProperty("password"); //Chargement du pilote de connection à la base de données Mysql Class.forName(driver); //Instanciation de la méthode de connection connection = DriverManager.getConnection(url, user, password); } catch (ClassNotFoundException e) { e.printStackTrace(); } catch (SQLException e) { e.printStackTrace(); } catch (FileNotFoundException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } return connection; } } }
Création du package net.epsiel.dao DAO signifie en anglais Data Access Object. Nous allons donc créer ici la classe qui se chargera d’effectuer les différentes actions au niveau de la base de données La classe UtilisateurDao import java.sql.Connection; import java.sql.PreparedStatement; import java.sql.ResultSet; import java.sql.SQLException; import java.sql.Statement; import java.util.ArrayList; import java.util.List;
import net.epsiel.model.Utilisateur; import net.epsiel.connection.DBConnection; public class UtilisateurDao { private Connection connection; public UtilisateurDao() { //Récupération d’un objet de type connection connection = DbConnection.getConnection(); } public void ajoutUtilisateur(Utilisateur u) { try { PreparedStatement preparedStatement = connection.prepareStatement("insert into utilisateur(Cin,Nom,Prenom,Telephone,Email,Password) values (?, ?, ?, ?, ?, ? )"); // Les paramètres débutent avec le numéro 1 preparedStatement.setString(1, u.getCin()); preparedStatement.setString(2, u.getNom()); preparedStatement.setString(3,u.getTelephone()); preparedStatement.setString(4, u.getEmail()); preparedStatement.setString(5, u.getPassword()); preparedStatement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } public void supprimerUtilisateur(int id) { try { PreparedStatement preparedStatement = connection .prepareStatement("delete from utilisateur where Id=?"); // Les paramètres débutent avec l’indice 1 preparedStatement.setInt(1, id); preparedStatement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } public void modifierUtilisateur(Utilisateur u) { try { PreparedStatement preparedStatement = connection .prepareStatement("update utilisateur set Nom=?, Prenom=?, Email=?, Password=?" +"where Id=?"); // Parameters start with 1 preparedStatement.setString(1, u.getNom()); preparedStatement.setString(2, u.getPrenom()); preparedStatement.setString(3,u.getEmail()); preparedStatement.setString(4, u.getPassword());
preparedStatement.setInt(5, user.getId()); preparedStatement.executeUpdate(); } catch (SQLException e) { e.printStackTrace(); } } public List<User> listeUtilisateurs() { List<Utilisateur> liste = new ArrayList<Utilisateur>(); try { Statement statement = connection.createStatement(); ResultSet rs = statement.executeQuery("select * from utilisateur"); while (rs.next()) { Utilisateur u = new Utilisateur (); u.setId(rs.getInt("Id")); u.setCin(rs.getString(" Cin")); u.setNom(rs.getString(" Nom")); u.setPrenom(rs.getString(" Preom")); u.setTelephone(rs.getString(" Telephone")); u.setEmail(rs.getString(" Email")); u.setPassword(rs.getString(" Password")); liste.add(utilisateur); } } catch (SQLException e) { e.printStackTrace(); } return liste; } public Utilisateur getUtilisateurById(int Id) { Utilisateur u = new Utilisateur(); try { PreparedStatement preparedStatement = connection. prepareStatement("select * from utilisateur where Id=?"); preparedStatement.setInt(1, Id); ResultSet rs = preparedStatement.executeQuery(); if (rs.next()) { u.setId(rs.getInt("Id")); u.setNom(rs.getString("Nom")); u.setPrenom(rs.getString("Prenom")); u.setCin(rs.getString("Cin")); u.setTelephone(rs.getString("Telephone")); u.setEmail(rs.getString("Email")); u.setPassword(rs.getString("Password")); } } catch (SQLException e) { e.printStackTrace();
} return u; } } Création du package net.epsiel.controller A l’intérieur de ce package se trouve le controleur(servlet) qui s’occupera de la gestion de toutes les actions au sein de l’application. import java.io.IOException; import java.text.ParseException; import java.text.SimpleDateFormat; import java.util.Date; import javax.servlet.RequestDispatcher; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; import net.epsiel.dao.UtilisateurDao; import net.epsiel.model.Utilisateur; public class Controleur_Utilisateur extends HttpServlet { private static final long serialVersionUID = 1L; private static String AJOUT_MODIFICATION = "/utilisateur.jsp"; private static String LISTE = "/liste_utilisateurs.jsp"; private UtilisateurDao dao; public Controleur_Utilisateur () { super(); dao = new UtilisateurDao(); } protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { String forward=""; String action = request.getParameter("action"); if (action.equalsIgnoreCase("delete")){ int Id = Integer.parseInt(request.getParameter("Id")); dao.Utilisateur(int id); forward = LISTE; request.setAttribute("utilisateurs", dao. listeUtilisateurs()); } else if (action.equalsIgnoreCase("edit")){ forward = AJOUT_MODIFICATION; int Id = Integer.parseInt(request.getParameter("Id")); Utilisateur u = dao.getUtilisateurById (Id); request.setAttribute("utilisateur", u);
} else if (action.equalsIgnoreCase("liste")){ forward = LISTE; request.setAttribute("liste_utilisateurs", dao.listeUtilisateurs()) ; } else { forward = AJOUT_MODIFICATION; } RequestDispatcher view = request.getRequestDispatcher(forward); view.forward(request, response); } protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { Utilisateur u = new Utilisateur(); u.setNom(request.getParameter("nom")) ; u.setPrenom(request.getParameter("prenom")) ; u.setTelephone(request.getParameter("telephone")) ; u.setEmail(request.getParameter("email")) ; u.setPassword(request.getParameter("password")) ; String id = request.getParameter("id"); if(id == null || id.isEmpty()) { dao.ajoutUtilisateur (u); } else { u.setId(Integer.parseInt(id)); dao. modifierUtilisateur (u); } RequestDispatcher view = request.getRequestDispatcher(LISTE); request.setAttribute("liste_utilisateurs", dao.listeUtilisateurs()) ; view.forward(request, response); } }