Vous êtes sur la page 1sur 8

Section : 2 LTIC-IOT

Ecole nationale d’Electronique et des


Matière : Java 2
Télécommunications de Sfax
Enseignante : Ghada Feki
Année Universitaire : 2022 - 2023

Application 3

Les objectifs sont :


 Accès aux bases de données relationnelles via JDBC (Java Data
Base Connectivity).
 Mise en place du design pattern DAO (Data Access Object)
 Intégration du DAO dans une application web.

1. Création BD

Créer la base de données MySQL TpJavaEE contenant les tables suivantes :


 CompteClient (numero, idClient, dateCreation,
chiffreAffaire) ayant respectivement les types :
entier(10), entier(10), Date, Decimal(10,3).
 ProfilClient(idProp, nom, prenom, societe, ville, adresse) ayant
respectivement les types : entier(10), varchar(15) , varchar(15),
varchar(15) varchar(15) , varchar(15).

2. Ajout du driver

Pour pouvoir utiliser la BD Mysql « TpJavaEE » dans votre projet web


JavaEE, il faut faire cette première étape :
 Avec Apache Netbeans : ajouter la dépendance ci-dessous au fichier
pom.xml.
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>5.1.49</version>
</dependency>

1
Section : 2 LTIC-IOT
Ecole nationale d’Electronique et des
Matière : Java 2
Télécommunications de Sfax
Enseignante : Ghada Feki
Année Universitaire : 2022 - 2023

 Avec Eclipse ou Netbeans : ajouter le driver Mysql sous WEB-


CONTENT\WEB-INF\lib (copier-coller le ficher .jar) et dans le "Build
Path" de votre projet : Librairies\Add Exertnal Jar.

Pour manipuler une base de données, il faut importer des classes du package
java.sql. Les principales classes de ce package sont : DriverManager,
Connection, Statement, PreparedStatement et ResultSet.

3. Création du modèle

Ajouter les objets Java Bean dans le modèle (le package com.tests.beans) :
 CompteClient (numero, idProp, dateCreation, chiffreAffaire) : les
attributs privés+ constructeurs - getters&setters.
 ProfilClient (idProp, nom, prenom, societe, ville, adresse) : les
attributs privés+ constructeurs - getters&setters.
Les types des attributs conformes aux champs de tables : int, String, Date,
double.
Utiliser les outils sources d’Eclipse / Netbeans pour générer automatiquement
les constructeurs, les setters et les getters.

4. Création de la couche DAO

Pour éviter de mélanger le code responsable des traitements métier et le code


responsable du stockage des données, la couche intermédiaire DAO est
ajoutée.
Créer la couche dao contenant les opérations de base de mise à jour de
données de la base TpJavaEE avec des opérations CRUD (Create, Read,
Update, Delete).
Ajouter une classe de connexion à la base dans laquelle nous définissons les
paramètres de connexion : type de driver, nom de la BD, nom de l’user et son
mot de passe.

2
Section : 2 LTIC-IOT
Ecole nationale d’Electronique et des
Matière : Java 2
Télécommunications de Sfax
Enseignante : Ghada Feki
Année Universitaire : 2022 - 2023

Les opérations du CRUD seront déclarées dans une interface.

import java.sql.*;
public class DaoFactory {
private String url;
private String username;
private String password;

DaoFactory(String url, String username, String


password) {
this.url = url;
this.username = username;
this.password = password;
}
public static DaoFactory getInstance() {
try {
Class.forName("com.mysql.jdbc.Driver");
} catch (ClassNotFoundException e) {
}
DaoFactory instance = new
DaoFactory("jdbc:mysql://localhost/tpjavaee", "root", "");

return instance;
}
public Connection getConnection() throws
SQLException {
return DriverManager.getConnection(url, username,
password);
}
// Récupération du Dao
public CompteClientsDao getCompteClientsDao() {
return new CompteClientImp(this);
}
}

public interface CompteClientsDao {


void ajouter( CompteClient compteClient );
List<CompteClient> lister();
//ajouter les autres méthodes CRUD
}

3
Section : 2 LTIC-IOT
Ecole nationale d’Electronique et des
Matière : Java 2
Télécommunications de Sfax
Enseignante : Ghada Feki
Année Universitaire : 2022 - 2023

import java.sql.*;
import java.sql.Date;
import java.util.List;
import java.util.ArrayList;

public class CompteClientImp implements CompteClientsDao{

private DaoFactory daoFactory;


public CompteClientImp(DaoFactory daoFactory) {
this.daoFactory = daoFactory;
}

@Override
public void ajouter(CompteClient compteClient) {
Connection connexion = null;
PreparedStatement preparedStatement = null;
try {
connexion = daoFactory.getConnection();
preparedStatement = connexion.prepareStatement("Insert
into compteclient(numero,idClient,dateCreation,chiffreAffaire)
values (?,?,?,?);");
preparedStatement.setInt(1, compteClient.getNumero());
preparedStatement.setInt(2, compteClient.getIdClient());
preparedStatement.setDate(3, (Date)
compteClient.getDateCreation());
preparedStatement.setDouble(4,
compteClient.getChiffreAffaire());

preparedStatement.executeUpdate();
} catch (SQLException e) {
e.printStackTrace();
}
}

@Override
public List <CompteClient> lister() {
List<CompteClient> compteClients = new
ArrayList<CompteClient>();
Connection connexion = null;
Statement statement = null;
ResultSet resultat = null;
try {
connexion = daoFactory.getConnection();
statement = connexion.createStatement();
resultat = statement.executeQuery("Select
numero,idClient,dateCreation,chiffreAffaire from
compteclient;");
while (resultat.next()) {
int numero = resultat.getInt("numero");
int idClient = resultat.getInt("idClient");

4
Section : 2 LTIC-IOT
Ecole nationale d’Electronique et des
Matière : Java 2
Télécommunications de Sfax
Enseignante : Ghada Feki
Année Universitaire : 2022 - 2023

Date dateCreation = resultat.getDate("dateCreation");


Double chiffreAffaire =
resultat.getDouble("chiffreAffaire");

CompteClient compteClient = new CompteClient();


compteClient.setNumero(numero);
compteClient.setIdClient(idClient);
compteClient.setDateCreation(dateCreation);
compteClient.setChiffreAffaire(chiffreAffaire);

compteClients.add(compteClient);
}
} catch (SQLException e) {
e.printStackTrace();
}
return compteClients;
}
}

5. Création de la vue

Les pages pour les formulaires :


 formulaire pour la création d’un nouveau profil client
 formulaire pour la création d’un nouveau compte client
 formulaire pour la saisie d’un numéro de compte à consulter
 etc

Les pages pour l'affichage des tableaux :


 afficher tous les profils clients
 afficher tous les comptes clients
 etc

Exemple de vue :

<%@page contentType="text/html" pageEncoding="UTF-8"%>


<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<!DOCTYPE html>
<html>

5
Section : 2 LTIC-IOT
Ecole nationale d’Electronique et des
Matière : Java 2
Télécommunications de Sfax
Enseignante : Ghada Feki
Année Universitaire : 2022 - 2023

<head>
<meta http-equiv="Content-Type" content="text/html;
charset=UTF-8">
<title>JSP Page</title>
</head>
<body>
<form method="post" action="/mavenproject6/ClientA">
<p>
<label for="numero">Numero : </label>
<input type="text" name="numero" id="numero" />
</p>
<p>
<label for="idClient">IdClient : </label>
<input type="text" name="idClient" id="idClient" />
</p>
<p>
<label for="dateCreation">Date de Creation : </label>
<input type="text" name="dateCreation" id="dateCreation" />
</p>
<p>
<label for="chiffreAffaire">Chiffre Affaire : </label>
<input type="text" name="chiffreAffaire" id="chiffreAffaire" />
</p>
<input type="submit" />
</form>
<ul>
<c:forEach var="compteClient" items="${ compteClients }">
<li><c:out value="${ compteClient.numero }" /> <c:out value="${
compteClient.idClient }" />
<c:out value="${ compteClient.dateCreation }" /> <c:out value="${
compteClient.chiffreAffaire }" />
</li>
</c:forEach>

</ul>
</body>
</html>

6. Création des contrôleurs

 servlet AjoutCompteClient

Cette servlet appelle le dao pour ajouter un nouveau compte client


via un formulaire.
import java.text.ParseException;
import java.sql.Date;
import java.sql.*;
import java.io.IOException;

6
Section : 2 LTIC-IOT
Ecole nationale d’Electronique et des
Matière : Java 2
Télécommunications de Sfax
Enseignante : Ghada Feki
Année Universitaire : 2022 - 2023

import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

@WebServlet(name="ClientA", urlPatterns={"/ClientA"})
public class ClientA extends HttpServlet {
DaoFactory daoFactory = DaoFactory.getInstance();
CompteClientsDao compteClientsDao =
daoFactory.getCompteClientsDao();

protected void processRequest(HttpServletRequest request,


HttpServletResponse response)
throws ServletException, IOException {

@Override
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {

request.setAttribute("compteClients",
compteClientsDao.lister());
this.getServletContext().getRequestDispatcher( "/WEB-
INF/ajoutCC.jsp" ).forward( request, response );
}

@Override
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
CompteClient compteClient = new CompteClient();

compteClient.setNumero(Integer.parseInt(request.getParame
ter("numero")));

compteClient.setIdClient(Integer.parseInt(request.getPara
meter("idClient")));

compteClient.setDateCreation(Date.valueOf(request.getParameter(
"dateCreation")));

compteClient.setChiffreAffaire(Double.parseDouble(request
.getParameter("chiffreAffaire")));

compteClientsDao.ajouter(compteClient);

7
Section : 2 LTIC-IOT
Ecole nationale d’Electronique et des
Matière : Java 2
Télécommunications de Sfax
Enseignante : Ghada Feki
Année Universitaire : 2022 - 2023

request.setAttribute("compteClients",
compteClientsDao.lister());
this.getServletContext().getRequestDispatcher("/WEB-
INF/ajoutCC.jsp").forward(request,response);
}

@Override
public String getServletInfo() {
return "Short description";
}// </editor-fold>

 Servlet ListComptes

Cette servlet appelle le dao pour récupérer dans une liste de tous
les comptes.

Exercice

1. Enrichir votre application par les méthodes, les pages jsp et les servlets
nécessaires pour l'exploiter convenablement.
2. Ajouter une table intitulée utilisateur contenant les coordonnées (login et mot
de passe) des utilisateurs ayant le droit d'accès à votre application. Une
servlet doit contrôler la validité du login et du mot de passe. En cas d'une
authentification correcte l'utilisateur sera dirigé vers la page d'accueil. Une
variable session sera créée. Dans le cas échéant il sera redirigé de nouveau
vers la page d'authentification.

Vous aimerez peut-être aussi