U NIVERSIT É DE J ENDOUBA
I NSTITUT S UP ÉRIEUR DE L’I NFORMATIQUE DU K EF
TP : JSP, S ERVLET ET JPA (1/2)
Matière : Technologie JEE Niveau : 2eme LSI
Responsable : Mahran Farhat A U : 2022 / 2023
Cette manip est développée en utilisant Intellij Idea, mais vous pouvez la produire en utilisant tout
IDE qui supporte Maven.
Pour le développement de cette manip, nous supposons que vous avez réussit les TP précédents.
Le but de ce support est de vous permettre implémenter la partie DAO (Data access object) afin de
compléter les fonctionnalités nécessaires pour la gestions des livres.
Notre objectif est de développer les fonctionnalités suivantes :
1. consultation de la liste des livres
2. Suppression des livres : lorsque l’utilisateur clique sur le bouton de suppression le livre en
question sera supprimé.
3. Modification des livres : lorsque l’utilisateur clique sur le bouton de modification, un formu-
laire de modification sera affiché afin de permettre à l’utilisateur de modifier les détails du
livre.
Partie 1 : Création et configuration de la base de données
1. Créer une base de données nommée tpjpa
2. Se connecter à la base de données et créer la table livre et remplisser cette table en utilisant le
block suivant :
create table livre (
ID bigint not null auto_increment,
TITRE varchar(255) not null,
AUTEUR varchar(30) not null,
EDITEUR varchar(30) not null,
PRIX float not null,
primary key (ID)
) ENGINE=InnoDB;
INSERT INTO livre(id,titre,auteur,editeur,prix) VALUES (1,’Java’,
’John Doe’, ’Thomas Edition’, 100);
INSERT INTO livre(id,titre,auteur,editeur,prix) VALUES (2,’C++’,
’John Doe’, ’Thomas Edition’, 100);
INSERT INTO livre(id,titre,auteur,editeur,prix) VALUES (3,’C#’,
’John Doe’, ’Thomas Edition’, 100);
INSERT INTO livre(id,titre,auteur,editeur,prix) VALUES (4,’PHP’,
’John Doe’, ’Thomas Edition’, 100);
1
INSERT INTO livre(id,titre,auteur,editeur,prix) VALUES (5,’Python’,
’John Doe’, ’Thomas Edition’, 100);
INSERT INTO livre(id,titre,auteur,editeur,prix) VALUES (6,’Ruby’,
’John Doe’, ’Thomas Edition’, 100);
INSERT INTO livre(id,titre,auteur,editeur,prix) VALUES (7,’Perl’,
’John Doe’, ’Thomas Edition’, 100);
COMMIT WORK;
Partie 2 : configuration de votre projet JEE afin de d’ajouter les fichiers de configuration et
les dépendances nécessaires pour le développement de la partie DAO.
1. Ajouter à votre fichier de configuration [Link] les dépendances suivantes :
<!-- dépendance de JPA -->
<dependency>
<groupId>mysql</groupId>
<artifactId>mysql-connector-java</artifactId>
<version>8.0.15</version>
</dependency>
<dependency>
<groupId>[Link]</groupId>
<artifactId>eclipselink</artifactId>
<version>2.7.8</version>
</dependency>
2. Créer un dossier nommé META-INF dans le dossier resources. Ensuite créer un fichier
nommé [Link] dans e dossier META-INF.
3. Modifier le code de votre fichier de configuration afin d’ajouter les paramètres de connexion à
votre base de données et les informations de mise en correspondance ( classes –¿ tables ). Le
contenu de fichier [Link] est le suivant :
<?xml version="1.0" encoding="UTF-8" standalone="yes"?>
<persistence xmlns="[Link]
xmlns:xsi="[Link]
xsi:schemaLocation="[Link]
[Link]
version="2.2">
<persistence-unit name="testjpa">
<class>[Link]</class>
<properties>
<property name="[Link]"
value="jdbc:mysql://localhost:3306/tpjpa?useSSL=false"/>
<property name="[Link]"
value="[Link]"/>
2
<!-- <property name="[Link]-generation"
value="drop-and-create-tables"/>
<property name="[Link]-mode"
value="database"/> -->
<property name="[Link]" value="root"/>
<property name="[Link]"
value="Admin??2022??"/>
</properties>
</persistence-unit>
</persistence>
4. une fois que vous avez configurer correctement votre projet. La structure de votre projet doit
correspondre à la figure suivante :
Partie 3 : Création de la couche DAO (Data Access Object). Notre objectif est de créer une
classe qui encapsule les différents traitements nécessaire pour le développement de notre mo-
dule de gestion des livres.
1. Modifier le code de la classe [Link] afin d’ajouter les informations de mise en correspon-
dance avec la table livre créée dans la base de données. Le code de cette classe doit être le
suivant :
package [Link];
import [Link].*;
import [Link];
@Entity
3
@Table(name = "livre")
public class Livre implements Serializable {
@Id
@GeneratedValue(strategy = [Link])
@Column(name = "id", nullable = false)
public Long isbn;
public String titre;
public String auteur;
public String editeur;
public double prix;
public Livre() {
}
public Livre(Long isbn,String titre, String auteur, String
editeur, double prix) {
[Link] = isbn;
[Link] = titre;
[Link] = auteur;
[Link] = editeur;
[Link] = prix;
}
public Long getIsbn() {
return isbn;
}
public void setIsbn(Long isbn) {
[Link] = isbn;
}
public String getTitre() {
return titre;
}
public void setTitre(String titre) {
[Link] = titre;
}
public String getAuteur() {
return auteur;
}
public void setAuteur(String auteur) {
[Link] = auteur;
}
public String getEditeur() {
return editeur;
}
4
public void setEditeur(String editeur) {
[Link] = editeur;
}
public double getPrix() {
return prix;
}
public void setPrix(double prix) {
[Link] = prix;
}
@Override
public String toString() {
return "Livre{" +
"isbn=’" + isbn + ’\’’ +
", titre=’" + titre + ’\’’ +
", auteur=’" + auteur + ’\’’ +
", editeur=’" + editeur + ’\’’ +
", prix=" + prix +
’}’;
}
}
2. Créer un package nommé dao dans le package [Link].
3. Créer une classe nommé DaoLivre dans le package dao. Le code de la classe DaoLivre doit
être le suivant :
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
public class DaoLivre {
private EntityManagerFactory emf;
private EntityManager em;
public void open() {
emf = [Link]("testjpa");
em = [Link]();
}
public void close() {
[Link]();
[Link]();
}
5
public void create(Livre livre) {
[Link]().begin();
[Link](livre);
[Link]().commit();
}
public Livre get(Long isbn) {
[Link]().begin();
Livre livre = [Link]([Link], isbn);
[Link]().commit();
return livre;
}
public void update(Livre livre) {
[Link]().begin();
[Link](livre);
[Link]().commit();
}
public void delete(Long isbn) {
Livre livre = [Link]([Link], isbn);
[Link]().begin();
[Link](livre);
[Link]().commit();
}
public List<Livre> getAll() {
[Link]().begin();
List<Livre> livres = [Link]("select l from Livre l",
[Link]).getResultList();
[Link]().commit();
return livres;
}
}
Partie 4 : Consulter la liste des livres. Nous comptons afficher une liste dynamique des livres.
Le couche DAO sera utilisée afin de récupérer les documents à partir de la base de données.
1. Modifier le code de la servlet ManageBooks afin de remplacer la liste statique des documents
par une liste dynamique qui sera récupérer à partir de la base de données à travers la couche
DAO. Le code de cette classe doit être le suivant :
package [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
import [Link];
6
import [Link];
import [Link];
import [Link];
import [Link];
@WebServlet("/manageBooks")
public class ManageBooks extends HttpServlet {
private static final long serialVersionUID = 1L;
@Override
protected void doGet(HttpServletRequest req, HttpServletResponse
resp) throws ServletException, IOException {
// get books from database
/* List<Livre> bookList = new ArrayList<>();
[Link](new Livre("LC01","Java", "John Doe", "Thomas
Edition", 100));
[Link](new Livre("LC02","C++", "John Doe", "Thomas
Edition", 100));
[Link](new Livre("LC03","Python", "John Doe", "Thomas
Edition", 100));
[Link](new Livre("LC04","C#", "John Doe", "Thomas
Edition", 100));
[Link](new Livre("LC05","PHP", "John Doe", "Thomas
Edition", 100));
[Link](new Livre("LC06","PYTHON 2", "John Doe", "Thomas
Edition", 100));
*/
DaoLivre agent = new DaoLivre();
[Link]();
List<Livre> bookList = [Link]();
[Link]();
// set books to request object and forward to JSP
[Link]("bookList", bookList);
[Link]("[Link]").forward(req,
resp);
}
}
7
Bonne Chance