Vous êtes sur la page 1sur 67

Filiere Genie Informatique

Cours 2
Java Avancée et Initiation à JEE

Pr Rachid ALAOUI

Année universitaire 2023/2024

Plan
1· Architectures et présentation de l’écosystème JEE

2· Programmation Java côté serveur : Servlets et JSP

3· Frameworks de présentation (JSF et Spring)

4· Initiation au Framework de persistance (Hibernate)

5· Sécurité des applications JEE : API JAAS

2
1. Architectures et présentation de
l’écosystème JEE

Plan
- Exigences d’un projet Informatique

- la plateforme Java EE

- les architectures adaptées au développement de projets Web

- Bibliothèques et API Java EE


J2EE Objectifs
• Faciliter le développement de nouvelles applications à
base de composants

• Intégration avec les systèmes d’information existants

• Support pour les applications « critiques » de l’entreprise


tolérance aux pannes, montée en charge, sécurité...

C’est quoi J2EE ?


Une technologie:
– Le langage Java
– La machine virtuelle (JVM)
– Des APIs (le JDK + APIs applicatives)
– Des serveurs respectant le standard Java EE (JSR)

JEE inclus dans les Systèmes distribués (Architectures Réparties)


- Division des traitements en modules indépendants
- plus disponible
- plus évolutif
- plus maintenable

Architectures Réparties : petits, Systèmes monolithique : gros, lents et


rapides et facilement adaptables inadaptables
6
C’est quoi J2EE ?
Un modèle de développement:

– Développement en tiers (multi-tiers) : applications


découpées logiquement (correspondance avec le
déploiement : clients, serveurs, SGBDs,...)

– Ce modèle partitionne le travail en 2 parties :


● Les aspects métiers/présentation, à la charge du
développeur
● Les services standards fournies par la plate-forme Java EE

C’est quoi J2EE ? Applications multi-tiers

8
Présentation et historique
Sun Microsystems, désormais Oracle Corporation,
propose pour cela la plateforme Java Enterprise Edition ou
Java EE, véritable référence pour le développement
d’applications supportant en standard
la programmation,
la persistance des données,
les transactions,
la sécurité
le déploiement de projets sur serveur applicatif.

Présentation et historique

En 2018, Le nouveau nom, Jakarta EE, est le deuxième changement


majeure de nom de JEE.
Jakarta EE a été optimisé pour le cloud computing. Selon la fondation
10

Eclipse, l’un des principaux objectifs de Jakarta EE est d'accélérer le


Présentation et historique J2EE
La plateforme Java EE propose un développement simplifié,
rapide et robuste reposant sur la configuration par annotations,
directement dans les fichiers source.

- La première version standard J2EE 1.2 a été développée par Sun en


1999 et contenait 10 spécifications .
- La version J2EE 1.3 sortie en 2001 n’apportait pas de nouveautés
essentielles mais plutôt des améliorations de la plateforme à la suite
des demandes utilisateur, comme la configuration par fichier XML.
- La version J2EE 1.4 proposait 20 spécifications lors de sa sortie fin
2003. Cette version apportait le support des services Web et des EJB
version 2.1.
(version conséquente était difficile à utiliser, tester et déployer.
11

Présentation et historique J2EE


Architecture MVC
MVC est une manière idéale qui consiste à modéliser un
composant selon trois parties indépendantes :

Le modèle (Model) qui stocke les données qui définit la


composante.
(En général; Les classes du modèle sont des Java Bean
correspondant aux champs des tables de la base de
donnée )

12
Présentation et historique J2EE
La vue (View) : La vue c’est ce que voit l’utilisateur
crée la représentation visuelle de la pièce à partir des
données du modèle.
(En général; Les vues sont des pages jsp, xhtml…)

13

Présentation et historique J2EE


Le contrôleur (Controller) qui traite l'interaction de
l’utilisateur avec le
composant et modifie le modèle et/ou la vue, en
réponse à une action de
l'utilisateur selon les besoins.
Le contrôleur est une Servlet : intermédiaire entre
la vue et le modèle.
Il alimente la vue par les données fournit par le
modèle.

14
Présentation et historique J2EE
Problème: Les développements par couches, de type
Modèle Vue Contrôleur (MVC), ne facilitent pas la
compréhension de l’ensemble, et les technologies Servlet et
JSP ne sont pas adaptées pour un développement rapide.

Solution: quelques frameworks ou outils spécialisés


voyaient le jour, comme Struts et Spring pour la partie
développement serveur, et Hibernate ou TopLink pour la
persistance.

15

Composants et architectures
Application monolithique
Une application monolithique est un programme constitué d’un
seul bloc et s’exécutant sur une seule machine.

Ces applications sont généralement utilisées dans le domaine du


temps réel ou bien au sein d’applications demandant de grandes
performances.

Elles restent également omniprésentes dans le monde du grand


public, étant utilisées en standalone sur les machines
personnelles.

16
Composants et architectures
Architectures « client/serveur »
Dès l’apparition des réseaux, ces applications ont cherché à
évoluer et ont abouti à des architectures dites « client/serveur »,
permettant de séparer la partie cliente et de regrouper la partie
applicative sur un serveur.
Les années 80, architecture 2 tiers
Principe
Architectures Client-Serveur
nécessite la création d’un
protocole de communication
entre le client et le serveur.

17

Composants et architectures
Problème Architectures « client/serveur »
- Pour les systèmes d’information d’entreprise ces solutions
restent trop limitées :
Handicape majeur vue le manque de séparation entre les
différents éléments qui le constituent.
- Manque de standards qui a
poussé la communauté au
concept de « brique » et de
séparation des tiers afin
d’optimiser leurs
développements.

18
Composants et architectures
Application multi-tiers
Dans le milieu professionnel, les applications doivent être plus robustes et
travaillent généralement sur de gros volumes de données.

Elles doivent, de plus, connecter différents départements au sein même d’une


entreprise, ou avec d’autres entreprises.

La maintenance et la stabilité de ces applications sont donc des priorités pour


les architectes et les développeurs.
Différents modèles existent. Le plus connu est sans doute le modèle 3-tiers

19

Composants et architectures
Application multi-tiers: Modèle 3-tiers:
- Plusieurs applications différentes avec une même logique métier

- Mettre en place
facilement des
applications
« distribuées » dans
un environnement
hétérogène.

Fin des années 80, architecture 3 tiers (RPC)

20
Composants et architectures
Application multi-tiers: Modèle 3-tiers:
Architecture 3 tiers objet

21

Composants et architectures
Application multi-tiers : Modèle 3-tiers
Navigateur: pour représenter l’application sur la machine cliente,
Serveur web: Pour la gestion de la logique de l’application
Serveur de base de données: Pour le stockage des données.

L’architecture 3-tiers est divisée en trois niveaux :


• Tiers client qui correspond à la machine sur laquelle l’application
cliente est exécutée.

22
Composants et architectures
Application multi-tiers : Modèle 3-tiers

• Tiers métier qui correspond à la machine sur laquelle


l’application centrale est exécutée.
• Tiers accès aux données qui correspond à la machine
gérant le stockage des données.

23

Composants et architectures
Le modèle 3-tiers

Problème : Non Séparation entre le client, l’application


et le stockage.
Aucune séparation n’est faite au sein même de l’application, qui
gère aussi bien la logique métier que la logique fonctionnelle et
l’accès aux données.

Besoins: Les architectures qui demandent de nombreuses


ressources (plusieurs bases de données, clustering, interconnexion
avec d’autres systèmes, différents clients…) cherche autre solution!!

24
Composants et architectures
Le modèle n-tiers
L’architecture n-tiers est une généralisation du modèle 3-tiers
qui prend en compte l’évolutivité du système et évite les
inconvénients de l’architecture 3-tiers vus précédemment.

Dans la pratique, on travaille généralement avec un tiers permettant


de regrouper la logique métier de l’entreprise. Ce tiers peut alors
être « appelé » par différentes applications clientes. 25

Composants et architectures
Le modèle n-tiers
L’interconnexion entre ces tiers est le grand problème de cette
architecture.

Solution: Integrer des frameworks, qui offrent un ensemble de


composants standards JEE permettant d’interconnecter les
différentes technologies sans difficulté.

26
Composants et architectures
Le modèle n-tiers
Application en couches
1. Couche présentation : gère le rendu des données
Frameworks MVC Struts , JSF, Spring
2. Couche Application: Classes simple Java et design patterns
3. Couche métier (Business Layer)
Service
Métier : contrôleur métier
Technique
Objet Métier persistant (EJBs)
4. Couche d’accès aux données (Persistance layer) permet d’accéder
aux données
Liaison avec entrepôt de données
Gestion des opérations CRUD : Create, Read, Update, Delete.
Données (Physical Layer)
Entrepôt des données de l’application
Schema modele physique de base de données, schema XML,… 27

DÉTAILS DES COUCHES


L’architecture logicielle d’une application est, constituée des couches
suivantes (voir fig) :
• présentation (client),
• application,
• métier, ou logique business,
• accès aux données.

28
DÉTAILS DES COUCHES
Couche présentation
La couche présentation est liée au type de clients utilisés:
Client riche: utiliser l’ensemble des outils et des librairies mis à
disposition pour ce type de client (plus particulièrement J2SE).
Applications web : Dans une architecture Java EE, on utilise
principalement des applications web pour l’interface utilisateur.

29

DÉTAILS DES COUCHES


Couche présentation
Les clients riches de type application communiquent directement avec le
tiers Métier alors que les clients de type navigateur Internet
communiquent à travers le tiers Web par l’intermédiaire de pages
exécutées sur le serveur et générées par des Servlets, JSP ou JSF.

30
DÉTAILS DES COUCHES
Couche application
- Médiateur entre la couche présentation et la couche métier, et contrôle
l’enchaînement des tâches.

- Chargée de connaître et de gérer l’état (connecté, en attente,


déconnecté…) des sessions des clients connectés
- Représente le contrôleur dans un modèle MVC: Le composant de base
utilisé dans un environnement Java EE est ‘’la servlet’’. Ce composant est
le point d’entrée à l’application.

31

DÉTAILS DES COUCHES


Couche application
Exemple: Pour traiter un formulaire, vous utiliserez une servlet
plutôt qu’une page JSP.
Les pages JSP ne doivent comporter qu’un minimum de code
Java afin d’être optimale en terme de maintenance.
Cependant les servlet/JSP étant des composants de bas niveau,
elles n’offrent que des fonctionnalités de base et ne permettent
pas une interconnexion simple avec les autres couches.
Les servlet/JSP peuvent cependant être utilisées au sein de
framework fournissant ces fonctionnalités d’interconnexions.
Les plus connu est ‘’Struts’’ et Spring MVC qui mettent en avant
l’ensemble de l’architecture MVC.
De même, les JSF (JavaServer Faces) comme un standard
intégrées dans la plate-forme Java EE. 32
DÉTAILS DES COUCHES
Couche métier
S’occuper aux accès des différentes données qu’à leurs traitements,
suivant les processus définis par l’entreprise.

Traitement métier regroupe :


• la vérification de la cohésion entre les données,
• l’implémentation de la logique métier de l’entreprise au niveau de l’application,
• la gestion du workflow
Exemple: Dans le domaine de l’assurance, un traitement métier pourrait
s’apparenter à une méthode de calcul d’une prime d’assurance. 33

DÉTAILS DES COUCHES


Couche métier
Les composants métier ou tiers Métier représentent la couche
business, avec les données du système, et sont de deux types :
1- Les entités beans (entity bean ou bean entity) : exécutées par
un conteneur léger (pas forcément un serveur Java EE) et
permettent de réaliser la persistance des données à partir des
JavaBeans et de Java Persistence API (JPA).

2- Les Enterprise JavaBeans offrent des possibilités plus riches


comme la gestion des transactions, les accès directs par clients
riches ou encore la gestion automatique des sessions utilisateur,
mais sont exécutés sur un conteneur lourd, c’est-à-dire
compatible Java EE.

34
Les conteneurs Java EE
Les serveurs Java EE proposent plusieurs types de conteneurs
(containers) pour chaque type de composant.

Chaque conteneur offre un ensemble de services pour les développeurs:


- L’annuaire de nommage d’accès aux ressources : Java Naming and
Directory Interface (JNDI) est une interface unifiée de gestion de
nommage pour les services et l’accès à ceux-ci par des applications.
- L’injection dynamique de ressources.
- La gestion des accès aux bases de données.
- Le modèle de gestion de la sécurité.
- Le paramétrage des transactions.

35

Les conteneurs Java EE


Une application Java EE de type Web nécessite un conteneur Web pour son
exécution
Alors qu’une application utilisant les EJB nécessite un conteneur EJB pour son
exécution.

Chaque conteneur propose un ensemble de services avec ses avantages et ses


contraintes.

36
API et services Java EE
1. Java Servlet (Technologie Java EE Conteneur Web)
Ce service Java EE s’exécute dans le conteneur Web et propose un
ensemble de classes de gestion des échanges HTTP de type requête
réponse.

37

API et services Java EE


1. Java Servlet (Technologie Java EE Conteneur Web)
Ce service Java EE s’exécute dans le conteneur Web et propose un ensemble de
classes de gestion des échanges HTTP de type requête réponse.
Application de communication Client-Serveur
Solution 1:
Le client peut communiquer des informations à une servlet,
grâce à la notion de paramètre, ce qui nous amènera à parler des
formulaires HTML.
Solution 2:
Le client peut
communiquer au serveur
avec des pages JSP
(JavaServer Pages):
Pages HTML dans
lesquelles on peut
introduire des séquences
d’instructions Java. 38
API et services Java EE
2. JavaServer Pages (JSP) (Technologie Java EE Conteneur Web)
La technologie JavaServer Pages (JSP) s’exécute dans le conteneur Web et utilise
le mécanisme de génération de Servlets à partir de documents textuels.
Solution 2: Pages JSP
un JSP est une page HTML dans laquelle sont introduits des
morceaux de code Java nommés ‘’éléments de script’’
Exemple: une page JSP: fichier HTML contenant un scriptlet (code java)
Exemple: PageBonjour.jsp
<html>
<head>
<title> JSP Bonjour </title>
</head>
Les JSP sont enregistrés avec l’extension
.jsp. <body>
Pour pouvoir exéctuer un JSP, une <% out.println ("BONJOUR") ;
machine serveur doit disposer d’un
interpréteur de JSP (ou "moteur de JSP"). %>
</body>
Une requête pour l’appel de la page jsp:
</html>
http://localisationServeur/localisationJSP/nomJSP.jsp?Paramètre
39
sEventuels

API et services Java EE


2. JavaServer Pages (JSP) (Technologie Java EE Conteneur Web)
Pages JSP
Transmission de paramètres à un JSP
Voici un JSP nommé bonjourVous donnant le même résultat que notre servlet BonjourVous
JSP bonjourVous.jsp
<html> <head> <title> JSP Bonjour </title> </head>
<body>
<%
String nom = request.getParameter ("prenom") ;
if (nom == null)
{
out.println ("BONJOUR") ;
}
else
{
out.println ("BONJOUR " + nom) ;
}
%>
</body> </html>

40
API et services Java EE
3. JavaServer Pages Standard Tag Library (JSTL)
(Technologie Java EE Conteneur Web)
La technologie JavaServer Pages Tag Library (JSTL) est encapsulée
dans des pages JSP et propose une librairie de balises XHTML
standardisées. Ces balises proposent de gérer les conditions et
itérations, l’internationalisation, les affichages HTML ou encore
l’accès aux bases de données.

4. JavaServer Faces (JSF) (Technologie Java EE Conteneur Web)


La technologie JavaServer Faces s’exécute dans le conteneur Web.
JSF 2.0 est un framework de développement de projets Web

41

API et services Java EE


5. Java DataBase Connectivity (JDBC) (Technologie Java SE -
Conteneur Web, Conteneur EJB, Conteneur Application)
Pour gérer les commandes SQL et les dialogues avec les différents
SGBD relationnels.

JDBC est utilisée lorsque nous devons accéder à une base de données
dans une Servlet, page JSP, page JSF ou autres.

L’API JDBC propose un ensemble de classes et interfaces pour se


connecter aux différents SGBD du marché mais également les
paquetages de manipulation des données.

JDBC est une technologie sous-jacente à JPA. 42


API et services Java EE
6. Java Persistence API (JPA) (Technologie Java SE
Conteneur Web, Conteneur EJB et Conteneur Application)
Java Persistence API (JPA) est un standard Java utilisé pour la
persistance des données.

Mécanisme JPA : Utilise le mapping objet/relationnel et


relationnel/objet pour stocker les objets dans les BDs et inversement
de pouvoir lire les données relationnelles et les transformer en objets.

L’API Java Persistence propose les services suivants :


- La gestion de la persistance.
- Un langage de requêtage évolué : Java Persistence Query
Language (JPQL).

43

API et services Java EE


7. Java Transaction API (JTA) (Technologie Java EE -
Conteneur Web, Conteneur)
Java Transaction API (JTA) fournit un standard de gestion des
transactions pour une architecture Java EE

Mécanisme de JTA : propose par défaut le mode autocommit pour la


gestion des transactions.

44
API et services Java EE
8. Enterprise JavaBeans (EJB) (Technologie Java EE -
Conteneur EJB)
Les composants Enterprise JavaBeans s’exécutent dans le
conteneur (couche ou tiers Métier): sont des classes composées de
champs et de méthodes d’accès.

Java EE propose trois familles d’EJB:


Les Session beans représentent les conversations entre le client et le
serveur, qu’elles soient avec ou sans état.

Les beans entité (les entity beans): assurent la persistance des données

Les Message Driven Bean (MDB) mélange un session bean et un


écouteur de message permettant ainsi la réception asynchrone de
messages.
9- Autres Services: Java Message Service API (JMS) , JavaMail, … 45

Les outils préconisés par Oracle


Oracle préconise un ensemble d’outils pour les
applications.

Un des principaux avantages de Java concerne sa


portabilité et c’est ainsi que n’importe quel serveur Java
EE compatible est utilisable, comme par exemple :
GlassFish, Websphere, JBoss ou autres.

L’implémentation de la persistance JPA supportant les


outils EclipseLink, Hibernate, ou encore OpenJPA.

46
Les outils préconisés par Oracle
Le consortium Java EE Oracle propose un ensemble d’outils
recommandés en fonction de chaque service :
● Le kit de développement proposé par Oracle/Sun Microsystems
JDK 1.6 et supérieur.
● Le serveur Java EE GlassFish v3 ou plus compatible Java EE 6.
● L’implémentation de persistance JPA, EclipseLink.
● Le SGBD intégré en standard avec le serveur Java EE nommé
JavaDB (SGBD Derby).
● L’outil de développement également appelé IDE, NetBeans.

Remarque:
Ces outils recommandés par Oracle seront ainsi utilisés car ils sont
compatibles, stables et conformes à toutes les spécifications
Java EE 6.
47

2. Programmation Java côté serveur


: Servlets et JSP
2.1- Le protocole HTTP et Communication Client Serveur

49

Le client envoie la requête : Méthode GET

50
Le client envoie la requête : Méthode POST

51

Le Serveur retourne la réponse :

Ligne de Status
Date du serveur
Nom du Serveur
Dernière modification
Type de contenu
Sa taille

Le fichier que le client


va
afficher

52
Application de communication Client-Serveur

- Dans l’édition J2SE vous avez vu comment développer une application autonome
ou une applet avec les fonctionnalités standard de Java.
- L’édition élargie J2EE comporte des spécifications supplémentaires concernant le
développement de ce que l’on nomme des servlets(réunion de serv, début du mot
serveur et de let, par analogie avec applet).

Principe de communication Client-


Serveur : Lancer une application sur une
machine serveur depuis un poste client
par l’intermédiaire du web ou d’un
intranet.

53

Application de communication Client-Serveur


Solution 1:
Le client peut communiquer des informations à une servlet, grâce à la notion de
paramètre, ce qui nous amènera à parler des formulaires HTML.

Solution 2:
Le client peut communiquer au serveur
avec des pages JSP (JavaServer Pages):
Pages HTML dans lesquelles on peut
introduire des séquences d’instructions
Java.

54
2.2 LE PROTOCOLE HTTP:Application de communication Client-Serveur
Solution 1: Servlet
Une servlet va se présenter comme une classe dérivée de la classe
HttpServlet fournie dans le package javax.servlet.
import java.io.* ; import javax.servlet.* ; import
javax.servlet.http.* ;
public class BonjourServ extends HttpServlet
{
public void doGet (HttpServletRequest req,
HttpServletResponse rep)
throws IOException, ServletException
{
rep.setContentType ("text/html") ;
PrintWriter page = rep.getWriter() ;
page.println ("<html>") ; Notre servlet affiche le message Bonjour
page.println ("<head>") ; dans une page HTML ayant pour titre
page.println ("<title> Servlet Bonjour "Servlet Bonjour".
</title>") ;
page.println ("</head>") ;
page.println ("<body>") ; 55

page.println ("<font size=+2>") ;

LE PROTOCOLE HTTP:Application de communication Client-Serveur


Solution 1: Servlet

56
LE PROTOCOLE HTTP:Application de communication Client-Serveur
Solution 1: Servlet
Transmission d’informations (nommées alors paramètres) du client au serveur:
Le concepteur de la servlet peut choisir entre deux démarches : URL ou formulaire HTML
• Demander au client d’incorporer ces paramètres directement dans l’URL fournie au navigateur ; dans
ce cas, leurs valeurs seront récupérées par la méthode doGet et déjà rencontrée,

• Récupérer ces informations auprès du client par le biais d’un "formulaire HTML" et lancer la servlet
depuis ce formulaire.

57

Le protocole HTTP et Communication Client Serveur


Solution 1: Servlet
La transmission d’informations peut être visible ou invisible dans l’URL
– La méthode "GET" : l’appel de la servlet depuis le formulaire fabrique automatiquement l’URL voulue avec
les paramètres qui seront visibles dans le navigateur.

APPEL avec page html: <form action = http://localhost:8084/ServletWeb2/Exo1


method="GET">
– La méthode "POST" : la transmission des paramètres est invisible dans le navigateur.
la servlet devra faire appel à une méthode différente, à savoir doPost.

APPEL avec page html: <form action = http://localhost:8084/ServletWeb2/Exo1


method=“POST">
Application: Voir TP1 (EX 1)

58
Le protocole HTTP et Communication Client Serveur
Solution 1: Servlet
Exemple:
Pour créer une servlet nommée BonjourVous récupérant un seul paramètre: un prénom
fourni par l’utilisateur et qui l’affiche à la suite du texte bonjour dans une page HTML.

Appel de la servlet BonjourVous se présentera ainsi :


http://localisationServeur/localisationServlet/nomServlet?prenom=hassan

?prenom=hassan : précise que l’on donne au paramètre nommé prenom la valeur hassan

Remarque: Si on a plusieurs paramètres dans l’appel de la servlet : séparés les uns


des autres par des caractères &

59

Solution 1: Servlet
Utilisation d’un formulaire HTML

En définitive, voici ce que pourrait donner la page HTML créant un formulaire de lancement
de la servlet BonjourVous:
<html>
<head>
<title> Servlet Bonjour Avec Formulaire </title>
</head>
<body>
<form action = http://localhost:8080/examples/servlet/BonjourVous method="GET">
Vous vous appelez <input type="text" size=24 name="prenom" value =""> <br> <br>
<input type="submit" value="OK">
</form>
</body>
</html>

60
Le protocole HTTP et Communication Client Serveur
Solution 2: Pages JSP
un JSP est une page HTML dans laquelle sont introduits des morceaux de code Java
nommés ‘’éléments de script’’
Exemple: une page JSP: fichier HTML contenant un scriptlet (code java)

Exemple: PageBonjour.jsp
Les JSP sont enregistrés avec l’extension
.jsp. <html>
Pour pouvoir exéctuer un JSP, une <head>
machine serveur doit disposer d’un <title> JSP Bonjour </title>
interpréteur de JSP (ou "moteur de JSP"). </head>
<body>
<% out.println ("BONJOUR") ;
%>
</body>
</html>
Une requête pour l’appel de la page jsp:
http://localisationServeur/localisationJSP/nomJSP.jsp?ParamètresEventuels

61

Le protocole HTTP et Communication Client Serveur


Solution 2: Pages JSP
Transmission de paramètres à un JSP
Voici un JSP nommé bonjourVous donnant le même résultat que notre servlet BonjourVous
JSP bonjourVous.jsp
<html> <head> <title> JSP Bonjour </title> </head>
<body>
<%
String nom = request.getParameter ("prenom") ;
if (nom == null)
{
out.println ("BONJOUR") ;
}
else
{
out.println ("BONJOUR " + nom) ;
}
%>
</body> </html>

62
Le protocole HTTP et Communication Client Serveur
Solution 2: Pages JSP
Utiliser un formulaire HTML
Autre façon d’appel JSP :
Formulaire de lancement du JSP bonjourVous

<html>
<head>
<title> Appel de JSP bonjourVous </title>
</head>
<body>
<form action = http://localhost:8080/examples/bonjourVous.jsp method=GET>
Vous vous appelez <input type="text" size=24 name="prenom" value ="">
<input type="submit" value="OK">
</form>
</body>
</html>

63

Solution 2: Pages JSP


Les différents éléments de script d’un JSP
Possibilités algorithmiques des scriptlets: Un scriptlet peut contenir n’importe quel code Java
Exemple:
<% for (int i=0 ; i<5 ; i++) On obtient ‘5 fois’ BONJOUR dans la page transmise au client
{ out.println ("BONJOUR") ;
}
%>
Mais on peut aussi procéder ainsi :
<% for (int i=0 ; i<5 ; i++)
{
%>
BONJOUR
<% }
%>

64
Les différents éléments de script d’un JSP Solution 2: Pages JSP

- Les expressions ds JSP


On voit donc que l’instruction d’un scriptlet : out.println ("BONJOUR" + nom) ;
peut être remplacée par la ligne HTML suivante :
BONJOUR <%= nom %>

Dans l’élément de script <%= expression %>, on peut placer n’importe quelle expression valide en Java

Exemple:
BONJOUR <%= out.getParameter (prenom) %>

- Commentaires en JSP: <%-- ceci est un commentaire --%>


- Déclaration de variables en JSP: Exemple: <%! int compte=0 ; %>

65

2.3 Utilisation de JavaBeans dans des JSP


Solution 2: Pages JSP
Définition:
Un composant JavaBean est une simple classe Java qui respecte certaines conventions sur
le nommage, la construction et le comportement des méthodes.

Le respect de ces conventions rend possible la connexion de JavaBeans par des outils de
développement.

Les conventions à respecter :


- la classe doit être « Serializable » pour pouvoir sauvegarder et restaurer l'état d'instances de
cette classe ;
- la classe doit posséder un constructeur sans paramètre (constructeur par défaut) ;
- les attributs privés de la classe (variables d'instances) doivent être accessibles publiquement
via des méthodes accesseurs construit avec get ou set suivi du nom de l'attribut avec la
première lettre capitalisée.
- la classe ne doit pas être déclarée final.

66
Utilisation de JavaBeans dans des JSP Solution 2: Pages JSP
Exemple: La classe nommée PointBean comportant trois propriétés :
abs(abscisse), ord(ordonnée) et norme(distance du point à l’origine).
package beans ;
public class PointBean
{ public PointBean ()
{ abs=0 ; ord=0 ; }
public int getAbs ()
{ return abs ; }
public int getOrd ()
{ return ord ; }
public void setAbs (int abs)
{ this.abs = abs ;}
public void setOrd (int ord)
{ this.ord = ord ; }
public double getNorme ()
{ return Math.sqrt (abs*abs +ord*ord) ;}
private int abs, ord ;
}

67

Solution 2: Pages JSP


Exemple d’utilisation d’une classe Point transformée en JavaBean
Utilisation de JavaBeans dans des JSP
on fournit directement les paramètres (x et y) dans le navigateur :

68
Solution 2: Pages JSP

Exemple d’utilisation d’une classe Point transformée en JavaBean


Utilisation de JavaBeans dans des JSP
Voici un petit exemple de JSP utilisant ce JavaBean :
<%-- creation d’un objet de type PointBean --%>
<jsp:useBean id="point1" class= " NomPackage.PointBean" />
<%-- on initialise les coordonnees avec les valeurs des parametres x et y --%>
<jsp:setProperty name="point1" property="abs" param="x" />
<jsp:setProperty name="point1" property="ord" param="y" />
<html>
<head>
<title> JSP Essai Bean de type PointBean </title>
</head>
<body>
Le point de coordonnees (<jsp:getProperty name="point1" property="abs" /> ,
<jsp:getProperty name="point1" property="ord" />) <br>
a pour norme <jsp:getProperty name="point1" property="norme" /> <br>
</body>
</html>

69

3. Frameworks de présentation
(Spring et JSF)
Plan
3.1 Spring
● Rappels fondamentaux sur Spring
o Framework
o Architecture du framework
o Modèle de programmation
o Modèle de configuration
● Présentation de Spring Boot
o Positionnement dans le projet Spring
o Historique et versions

3.2JSF

3.1 Spring
Qu'est ce que spring
Spring est un framework léger pour la création d'applications Java
Spring utiliser pour créer n'importe quelle application en Java
(applications autonomes, Web ou JEE),
contrairement à de nombreux autres frameworks (tels qu'Apache
Struts, qui est limité aux applications Web).

Spring est léger dans le sens où vous devez apporter peu de


modifications, voire aucune, à votre code d'application pour
bénéficier des avantages de Spring Core, et si vous choisissez
d'arrêter d'utiliser Spring à tout moment, vous trouverez cela assez
simple.
Évolution du framework Spring

Spring Framework a connu une croissance évolution en termes de fonctionnalités


de base, de projets associés et de support communautaire.

Spring 0.9 : 1ere version publique du framework:


Cette version n'a pas de documentation de référence officielle, mais vous pouvez trouver les
sources et la documentation existantes sur SourceForge.1
offrait :
une base de configuration de bean,
un support AOP,
Un framework d'abstraction JDBC,
un support de transaction abstraite.

• Spring 1.x : 1ere version publiée avec une documentation de référence officielle.
Il est composé de 7 modules

Présentation de Spring Framework, version 1.x


– Spring Core :
conteneur de bean et utilitaires de support

– Spring Context : ApplicationContext, UI, validation, JNDI, Enterprise


JavaBeans (EJB), communication à distance et prise en charge de la messagerie
– Spring DAO :
Infrastructure transactionnelle,
Java Database Connectivity (JDBC),
et prise en charge des objets d'accès aux données (DAO)

– Spring ORM :
prise en charge de Hibernate,
iBATIS et Java Data Objects (JDO)
Spring AOP :

La programmation orientée aspect (AOP, pour "Aspect-Oriented Programming" en


anglais) est une approche de programmation qui vise à séparer les préoccupations
transversales d'une application des préoccupations principales.

Une préoccupation transversale est un aspect de la logique d'application qui


affecte de multiples modules et est généralement difficile à modulariser en utilisant
des techniques de programmation orientée objet traditionnelles.

Exemple : la journalisation, la sécurité, la gestion des transactions et la


surveillance des performances sont souvent citées comme des préoccupations
transversales.

la programmation orientée aspect dans Spring permet une séparation


modulaire des préoccupations, ce qui peut conduire à :
Des applications plus maintenables et évolutives.

Spring AOP est largement utilisé pour:


• Gestion des transactions déclaratives
• Journalisation
• Gestion des exceptions
• Sécurité
• Mise en cache
– Spring Web :
Fonctionnalités d'intégration de base telles que la fonctionnalité en plusieurs parties,
l'initialisation du contexte via des écouteurs de servlet
et un contexte d'application orienté Web

Spring Web fait partie de l'écosystème Spring et propose des solutions pour
créer des applications web.

Il existe deux composants principaux dans Spring Web :


Spring Web MVC pour les applications web basées sur la servlet et
Spring WebFlux pour les applications web réactives, qui ont besoin de gérer
un grand nombre de connexions simultanées de manière asynchrone.

– Spring Web MVC :


framework modèle vue contrôleur (MVC) basé sur le Web

- Modèle-View-Controller (MVC) : Spring Web MVC est basé sur le pattern de


conception MVC, qui sépare les préoccupations de l'application en trois
composants principaux : Modèle, Vue et Contrôleur.

- DispatcherServlet : Au cœur de Spring Web MVC se trouve le


DispatcherServlet. C'est le front controller qui gère toutes les requêtes HTTP et
les répartit vers les contrôleurs appropriés.

- Contrôleurs : Les classes annotées avec @Controller ou @RestController (pour


les services RESTful) gèrent les actions utilisateur, traitent les données en utilisant
les services et retournent une vue ou une réponse.
- Vues : Spring Web MVC supporte une variété de technologies de vue, comme
JSP, Thymeleaf, FreeMarker, etc.
Les vues sont responsables de générer la présentation côté client.

- Binding et Validation : Spring Web MVC facilite le binding des données des
formulaires aux objets Java, ainsi que leur validation.

- Conversion et formatage : Convertit automatiquement entre les chaînes de


caractères et les types complexes.

- Internationalisation (i18n) et localisation (l10n) : Prend en charge la


personnalisation des messages et des formats en fonction de la région de
l'utilisateur.

- Intercepteurs : Offre la possibilité d'exécuter des actions avant ou après le


traitement d'une requête.

- Exception Handling : Permet une gestion centralisée des exceptions à travers


des classes de gestion des exceptions et des annotations.-

Spring 3.2.x :
cette version possède les fonctionnalités suivantes :
– Prise en charge du traitement des demandes asynchrones basé sur Servlet 3.

– Nouveau framework de test Spring MVC.


– Prise en charge des types génériques dans RestTemplate et dans les arguments
@RequestBody.
– Prise en charge de Jackson JSON 2.

– Migration vers GitHub (https://github.com/SpringSource/springframework).

– Prise en charge améliorée de Java SE 7/OpenJDK 7 dans le framework et les


dépendances tierces.
• Spring 4.0.x :
Une version majeure de Spring et la première à prendre entièrement en charge Java 8.

Présentation de Spring Framework, version 4.0.x

Java EE 6 et supérieur est désormais considéré comme la base de Spring Framework 4.0

Amélioration de l'expérience de démarrage via une série de guides de démarrage sur


le nouveau www.spring.io/guides site Internet

Messagerie WebSocket, SockJS

• Spring 5.0.x :
il s'agit d'une version majeure.
L'ensemble de la base de code du framework est basé sur Java 8 et est entièrement compatible
avec Java 9 depuis juillet 2016.2

– La prise en charge a été abandonnée pour Portlet, Hibernate3, XMLBeans, JDO,


Guava, …

– Prise en charge complète de la signature Servlet 3.1 dans les implémentations de filtre
fournies par Spring

– Prise en charge de JMS 2.0+, JPA 2.1+


–…
Spring Expression Language Expression Language
Le Spring Expression Language (SpEL) est un langage d'expression puissant qui prend en
charge l'interrogation et la manipulation d'un objet graphique lors de l'exécution.

SpEL offre des fonctionnalités similaires à celles que vous pourriez trouver dans les
langages d'expression comme EL (Expression Language) de JSP, mais avec des capacités
étendues et une meilleure intégration dans l'écosystème Spring.

Quelques concepts techniques clés de SpEL:


- Syntaxe: SpEL utilise une syntaxe particulière, généralement encadrée par #{...}. Par
exemple, pour accéder à une propriété d'un objet, on pourrait écrire #{person.name}

- Types littéraux: SpEL prend en charge plusieurs types littéraux, comme les chaînes de
caractères ('Hello World'), les nombres (intégraux, flottants, etc.), les booléens (true,false), ...

- Référence aux propriétés et aux méthodes:


Vous pouvez facilement accéder aux propriétés et appeler des méthodes sur des objets.
Par exemple,
#{person.getAddress().getZipCode()}

- Opérateurs:
SpEL prend en charge un large éventail d'opérateurs, tels que :
les opérateurs de comparaison (==, <, >, etc.),
les opérateurs logiques (and, or, not),
les opérateurs mathématiques (+, -, *, /, %, ^),
et d'autres.

- Opérateurs ternaires:
SpEL prend en charge l'opérateur ternaire standard (a ? b : c).

- Variables:
Vous pouvez référencer les variables par leur nom, généralement définies
dans un contexte d'évaluation.
Par exemple, #{#someVar}

- Méthodes intégrées: SpEL offre des méthodes utiles pour manipuler des
données, par exemple pour vérifier si une chaîne est vide, pour concaténer
des chaînes, et d'autres.

-…
MVC dans le niveau Web
Pour développer des applications Web, le modèle MVC est la solution pratique plus
populaire. Spring est progressivement passé d'un simple framework Web à une
implémentation MVC complète.

Spring MVC suffisant pour vos besoins de développement d'applications Web.


Spring peut s'intégrer à d'autres frameworks Web populaires tels que Struts, JSF,
Atmosphere, Google Web Toolkit (GWT), etc

La technologie des frameworks Web a évolué rapidement: besoin de frameworks Web prenant
en charge HTML5, JavaScript et CSS3.
Parmi les solutions: développement d'applications Web à l'aide de Spring MVC

Qu'est-ce que c'est Spring Boot?


Spring Boot est un projet qui se trouve sur la couche de IO Execution la couche
de Spring IO Framework.

Spring Boot soutient des


conteneurs embarqués.
Cela permet des application web
d'exécuter indépendemment
sans déploiement sur Web
Server.
Le Framework Spring a commencé son parcours pour simplifier le développement
d'applications Java Enterprise (Java EE).
Spring fournisse un grand soutien aux développeurs en se concentrant uniquement sur la
résolution de leurs problèmes commerciaux,

Cependant, sans Spring Boot, il reste encore beaucoup de travail à faire par le
développeur pour que les choses fonctionnent.

Quelques défis que vous serez confrontés une fois que vous aurez commencé à
développer une application Web basée sur Spring :
- Acquérir une compréhension de Servlet et du descripteur de déploiement
associé web.xml

- Familiarisez vous avec les structures de répertoires WAR et EAR pour


l’empaquetage des composants de l'application.

- Comprendre les concepts spécifiques au serveur d'applications, tels que le


domaine, le port, les threads et les sources de données pendant ledéployement
des applications.

- Gérer les stratégies de chargement de classe complexes, les fonctions de


journalisation….
Il y a trop de mots techniques à la mode:
- écrire la logique métier de votre application
Besoin de créer un fichier exécutable et simplement l'exécuter dans une ligne de
commande ?

Vous n'auriez pas besoin de définir des configurations XML compliquées ou d'effectuer un
déploiement de serveur d'application ou d'autres jongleries techniques.

Toutes ces pièces du puzzle seraient résolues par un magicien expérimenté = Spring Boot.

Spring Boot a été introduit en tant que sous projet de Framework Spring pour donner aux
développeurs une expérience de démarrage rapide avec une simlification de configuration.

Spring Boot résout à quel point de manière transparente plusieurs problèmes de configuration et
d'intégration.
3.2 Framework JSF
JavaServer Faces (JSF) est un framework MVC (Modèle-Vue-Contrôleur)
pour construire des applications web basées sur des composants en
Java.
JSF est est intégré dans la plateforme Java EE.

JSF offre un ensemble riche de composants d'interface utilisateur, une


gestion d'événements, une validation des données et la gestion de la
navigation.

Architecture JSF
•Modèle-Vue-Contrôleur (MVC)
• Modèle : Gère les données de l'application.
• Vue : Représente l'interface utilisateur.
• Contrôleur : Gère la réception des requêtes utilisateurs et la réponse.

•Cycle de vie de JSF


• Restaurer la vue
• Appliquer les valeurs de la requête
• Processus de validation
• Mettre à jour les valeurs du modèle
• Exécuter l'application
• Rendre la réponse
Principaux concepts de JSF
Composants
Unités modulaires d'interface utilisateur (ex: boutons, champs de saisie)
Peuvent déclencher des événements et peuvent être reliés à des données.

Managed Beans
Beans Java qui stockent les données pour les vues JSF.
Définis généralement avec les annotations @ManagedBean et @ViewScoped,
@SessionScoped, etc.

Navigation
Définit comment l'application passe d'une page à une autre.

Convertisseurs et validateurs
Convertisseurs : Transforme les types de données d'une forme à une autre
(ex: String à Date).
Validateurs : Assure que les données saisies respectent certaines règles.

Développer une application avec JSF


Configuration
web.xml : Définir le FacesServlet.
faces-config.xml : Configuration centrale de JSF (navigateurs, beans, règles de
validation).

Créer des vues


Utilisez Facelets (*.xhtml) comme technologie de page pour JSF.
Utilisez des tags JSF (ex: <h:inputText>, <h:button>).

Gérer les beans


Créez des beans pour stocker et gérer les données pour les vues.
Utilisez les annotations pour définir la portée et d'autres configurations.

Navigation
Définissez des règles de navigation pour déterminer les transitions de page.

Validation et conversion
Utilisez des validateurs intégrés ou créez des validateurs personnalisés.
Utilisez des convertisseurs intégrés ou créez des convertisseurs personnalisés.
4. Initiation au Framework de
persistance (Hibernate)
Plan
- Présentation, Normes et standards JPA
- L’Entity Manager ou gestionnaire d’entités
- Mise en place du mapping objet-relationnel
- Gestion des relations : @OneToOne @OneToMany @ManyToOne @ManyToMany
- Java Persistence Query Language (JPQL)
- Ingénierie de reconstruction

Présentation
Un développeur Java doit alors maîtriser plusieurs concepts:
- Modélisation UML lors de l’analyse
- Programmation objet
- Analyse et systèmes de gestion de bases de données relationnelles

Mélange de Concepts:
Entraîne des confusions et erreurs de programmation en vue de complexité des domaines
de compétences à maîtriser.

100
Présentation
Pour améliorer le développement de la couche de sauvegarde des données,
plusieurs bibliothèques ou frameworks de persistance sont apparus avec les
principaux langages.

Ces outils sont nommés ORM pour Object Relationnal Mapping ou outils
de gestion du mapping objet relationnel et relationnel objet.

Les termes : frameworks de mapping objet relationnel ou frameworks de


persistance sont également utilisés.

101

Persistance en JAVA
Un développeur Java parle de classes, attributs, méthodes, héritages, annotations,
encapsulations ou autres,
Tandis qu’un spécialiste de base de données utilise les termes entités, tables, jointures,
modèle conceptuel des données ou autres.
Le dialogue qui s’ensuit entre les deux personnes devient alors très lourd et porte à
confusion.
Problème
Deux concepts presque
similaires sont utilisés
en fonction du
domaine
mais ne possèdent pas
la même définition :
le domaine de
modélisation utilise des
classes et
le domaine des bases de
données, des tables.

102
Spécification JAVA persistence API
EclipseLink est l’implémentation Open
Source de référence pour JPA 2.0 permet
le stockage d’objets dans une base de
données relationnelle

EclipseLink est responsable de


l’implémentation JPA et sera souvent
dénommé persistence provider, provider,
ou fournisseur de persistance.

JPA utilise l’API JDBC pour les accès SQL et pour cacher la couche d’accès aux données
relationnelles. Toutes ces classes, interfaces et annotations de gestion sont empaquetées dans le paquetage
javax.persistence.

103

Réalisation du mapping objet vers une base de données


La configuration par exception
La mise en place de JPA dans une application Java SE ou Java EE nécessite trois étapes représentant le
modèle de données :
1- Les classes qui doivent être persistantes sont annotées avec l’annotation JPA @Entity et sont
transformées en entités.
2- L’unité de persistance permettant la
configuration de la connexion à la base de
données correctement paramétrée dans le
répertoire /META-INF de l’application sous
le nom persistence.xml.
3- Un gestionnaire d ’entité ( Entity
Manager ) est implémenté dans chaque classe
utilisatrice pour réaliser les opérations de
persistance ou d’accès avec le langage Java
Persistence Query Langage (JPQL).

104
Mise en place du mapping objet-relationnel
La mise en place commence par le téléchargement des librairies nécessaires à l’utilisation
de JPA :
● eclipselink.jar : librairie de gestion JPA téléchargée à partir du site de l’éditeur
http://www.eclipse.org/eclipselink/downloads/

● javax.persistence_version.jar : librairie de gestion de la persistance avec les


annotations ou fichiers XML.
Livrée en standard dans l’archive téléchargée précédemment sur le site officiel
d’EclipseLink.

● mysql-connector-java-version.jar : librairie de gestion de la connexion JDBC


entre les programmes Java et la base de données MySQL utilisée.
(ou outre SGBD comme java Derby, oracle…)

105

3. Mise en place du mapping objet-relationnel


Étape 1 : Création de la classe Étape 2 : Mise en place de l’unité
entité par annotation de persistance
Code :
jpa01.Enseignant.java
...
@Entity
public class Enseignant
{
@id
private Long idEnseignant;
private String identifiant;
private String motdepasse;

public Enseignant()
{
}
// getters et setters
}

106
Mapping objet relationnel
Une classe qui doit devenir une entité persistante doit respecter les règles suivantes :
● La classe doit être annotée avec @javax.persistence.Entity ou avec la notation
correspondante dans le fichier XML.
● Un attribut de la classe doit être annoté avec @javax.persistence.Id pour être utilisé
comme clé primaire.
● La classe entité doit avoir un constructeur par défaut sans paramètre avec une
visibilité publique ou protégée. La classe peut avoir d’autres constructeurs également
(par paramètre, initialisation ou copie).
● Une classe entité ne doit pas être utilisée comme final. Aucune méthode ou variable de
l’entité ne doit être de type final.
● Si une instance de la classe entité doit être passée par valeur ou utiliser des
fonctionnalités de sauvegardes distantes, l’entité doit alors implémenter l’interface
Serializable.

107

Mapping objet relationnel


1. Mapping des classes entités
Code : jpa01.Enseignant.java
package jpa01;
import javax.persistence.Entity;
import javax.persistence.Id;
@Entity
public class Enseignant {
@Id
private Long idEnseignant;
private String identifiant;
private String motdepasse;
public Enseignant()
{
System.out.println("Dans le constructeur de la classe Enseignant");
}
// getters et setters des proprietes (ideEnseignant, identifiant et motdepasse)
}

108
Optimisation du mapping
1. @Table
L’annotation @javax.persistence.Table permet de changer le nom de la table associée à
l’entité.
Sans la présence de cette annotation, la table reprend le nom de la classe avec tous les
caractères en majuscules
Code : jpa01.Enseignant.java
package jpa01;
...
@Entity
@Table(name="ens",schema="web
cole")
public class Enseignant {
@Id
private Long idEnseignant;
private String identifiant;
private String motdepasse;
public Enseignant()
{
System.out.println(« ds constructeur
");
}
// getters et setters
...
} 109

Optimisation du mapping
1. @Table
L’annotation @Table possède plusieurs attributs Code : jpa01.Enseignant.java
: package jpa01;
● name : permet de préciser le nom de la table. ...
● schema : précise le schéma de la table. @Entity
● uniqueConstraints : précise les contraintes @Table(name="ens",schema="webcole")
public class Enseignant {
d’unicité sur une ou plusieurs colonnes. @Id
● catalog : précise le catalogue de la table. private Long idEnseignant;
private String identifiant;
private String motdepasse;
public Enseignant()
{
System.out.println("ds constructeur ");
}
// getters et setters
...
}

110
Optimisation du mapping
2. @SecondaryTable
L’annotation @javax.persistence.SecondaryTable est utilisée lorsqu’une entité doit être
mappée vers plusieurs tables. L’annotation @SecondaryTable permet de faire le lien
avec une table secondaire et @SecondaryTables avec plusieurs tables secondaires.
@Entity
@SecondaryTables({
@SecondaryTable(name="ensa"),
@SecondaryTable(name="fac")
})
public class Enseignant {
@Id
private Long idEnseignant;
@Column(table="ensa")
private String identifiant; l’attribut identifiant dans une table secondaire
@Column(table="fac") nommée ensa et
private String motdepasse;
public Enseignant() l’attribut motdepasse dans une autre table
{
secondaire nommée fac.
System.out.println("Dans le
constructeur de la classe Enseignant");
} Les liens sont alors automatiquement réalisés par
// getters et setters} la référence à la clé primaire idEnseignant.
111

Optimisation du mapping
2. @SecondaryTable
Nous devons ensuite préciser dans l’entité quels attributs seront stockés dans les tables
secondaires par l’intermédiaire de l’annotation @Column.
@Entity
@SecondaryTables({
@SecondaryTable(name="ensa"),
@SecondaryTable(name="fac")
})
public class Enseignant {
@Id
private Long idEnseignant;
@Column(table="ensa")
private String identifiant;
@Column(table="fac")
private String motdepasse;
public Enseignant()
{
System.out.println("Dans le
constructeur de la classe 112

Enseignant");
Optimisation du mapping
3. @Id et @GeneratedValue
- La clé primaire est un élément essentiel dans une base de données relationnelle.
Cette clé primaire permet d’identifier chaque enregistrement de manière unique.
- La clé ne doit pas être nulle et JPA requiert que chaque entité possède sa propre clé,
composée d’un attribut ou de plusieurs attributs (clé composite).
Cette clé primaire ne peut plus être mise à jour par la suite.

- L’annotation @Id suffit à créer une clé primaire mais l’annotation


@GeneratedValue permet d’apporter des précisions sur la génération de la clé
primaire

113

Optimisation du mapping
3. @Id et @GeneratedValue
L’annotation @GeneratedValue peut avoir quatre valeurs :
● AUTO : c’est la valeur par défaut qui laisse la génération automatique de la clé par
l’outil de persistance. Cette génération automatique est alors adaptée au SGBD utilisé et
peut donc changer en fonction de la base de données.

● SEQUENCE : cette valeur utilise un mécanisme de séquence pour la gestion de la clé


primaire que l’on retrouve dans certaines bases de données comme celle d’Oracle.

● TABLE : cette valeur utilise une table dédiée qui stocke les clés des tables générées.
La clé est incrémentée, chaque fois qu’une nouvelle instance est créée.

● IDENTITY : cette valeur utilise un type de colonne spécifique à la base de données et


permet par exemple de créer un auto-incrément.

@GeneratedValue(strategy=GenerationType.IDENTITY)

114
Optimisation du mapping
3. @Id et @GeneratedValue Code : jpa01.Enseignant.java
Exemple: Utiliser le type IDENTITY très ...
pratique permettant de générer une clé @Entity
primaire de type auto-incrément afin de public class Enseignant {
gérer le compteur des clés @Id
@GeneratedValue(strategy=Generatio
nType.IDENTITY)
private Long idEnseignant;
private String identifiant;
private String motdepasse;
public Enseignant()
{
System.out.println("Dans le
constructeur de la classeEnseignant");
}
// getters et setters
}

115

Java Persistence Query Language (JPQL)


- Le langage JPQL, basé sur une sous-couche SQL, introduit la navigation à travers les
entités et leurs relations afin de sélectionner des données et appliquer des filtres.

- Nous avons vu précédemment comment manipuler des entités de manière


individuelle avec l’Entity Manager.

- Nous pouvons utiliser les méthodes CRUD et retrouver une entité par son
identifiant, la supprimer, la modifier ou autres. Mais la recherche par identifiant est
limitée et ne permet pas de réaliser des requêtes complexes.

Pour réaliser ce type de requête, JPA propose un langage de requêtes interactif nommé
JPQL. JPQL permet de réaliser des requêtes indépendamment de la base de données
utilisée.

116
Java Persistence Query Language (JPQL)
Le Java Persistence Query Language (JPQL) est un langage de requête orienté
objet utilisé pour interroger des entités dans le cadre de la spécification Java
Persistence API (JPA).

JPQL est similaire à SQL, mais il fonctionne sur des objets, des attributs
d'objets et des associations d'objets plutôt que sur des tables et des colonnes.

Sélection de données
JPQL désigne les entités dans les requêtes par leur nom.
La clause SELECT permet de préciser une classe entité (et non pas une table)
par son nom

La structure de ce type de requête ‘JPQL’ est très proche d’une requête SQL mais avec
deux différences : la clause FROM définit une entité et non une table et l’utilisation d’un
alias, appelé variable d’identification, est nécessaire en JPQL.

Exemple:
SELECT p FROM Person p WHERE p.age > 25

Dans cet exemple, p est un alias pour l'entité Person, et nous interrogeons sur
l'attribut age de cette entité.

118
Principaux concepts de JPQL
Entités:
Dans JPQL, les requêtes sont basées sur des entités (classes Java annotées avec
@Entity).
Alias:
Les entités dans les requêtes JPQL peuvent être aliassées pour une utilisation plus
concise, comme on le voit avec p dans l'exemple précédent.
Path Expressions:
Les attributs des entités peuvent être navigués en utilisant des expressions de
chemin, par exemple, p.address.city.

Types de requêtes
1.Requêtes de sélection (SELECT): utilisées pour récupérer des données.

2.Requêtes de mise à jour (UPDATE): utilisées pour mettre à jour des données.

3.Requêtes de suppression (DELETE): utilisées pour supprimer des données.

119

5. Sécurité des applications JEE :


API JAAS
Une politique de sécurité informatique est une stratégie visant à maximiser la
sécurité informatique d’une entreprise.

Elle est matérialisée dans un document qui reprend l’ensemble des enjeux,
objectifs, analyses, actions et procédures faisant parti de cette stratégie.

à distinguer de la charte informatique, qui est un document de recommandations


concernant la bonne utilisation des technologies informatiques, et qui est destiné
aux employés de l’entreprise

Le document de politique de sécurité est unique et personnalisé, qui tient en


compte le fonctionnement, la composition du système d’information de
l’entreprise et les risques informatiques qui lui sont propres

Nécessité de définir une politique de sécurité


Toute organisation doivent respecter l’ensemble de règles formalisées
auxquelles les personnes ayant accès aux ressources technologiques et
aux S.I.

Composantes d’une politique de sécurité


Politique d’achat
Politique de confidentialité
Politique d’accès
Politique de responsabilité
Politique d’authentification
Politique d’audit et de reporting
L'API JAAS est une bibliothèque Java dédiée à la sécurité des applications Java,
offrant des fonctionnalités pour l'authentification et l'autorisation des utilisateurs.

Dans le contexte de Java EE, JAAS est souvent utilisé pour sécuriser les
applications d'entreprise.

Authentification et Autorisation
•Authentification: Processus de vérification de l'identité d'un utilisateur.
•Autorisation: Processus de détermination des actions qu'un utilisateur authentifié
peut ou ne peut pas effectuer.
Intégration JAAS avec Java EE
Dans un environnement Java EE, JAAS est souvent intégré au conteneur (comme
Tomcat, WildFly, GlassFish).

Le conteneur prend en charge la gestion des LoginModules, des configurations et


des sources de données.

Java EE offre des annotations (@RolesAllowed, @DeclareRoles, etc.) pour


déclarer et vérifier les autorisations au niveau des classes et des méthodes.

Qu'est-ce qu'un certificat SSL ?


Un certificat SSL est un fichier de données qui lie une clé cryptographique
aux informations d'une organisation, installé sur un serveur

Le certificat active le cadenas et le protocole « https », afin d'assurer une


connexion sécurisée entre le serveur web et le navigateur.

Plusieurs entreprises spécialisées dans la sécurisation des échanges


d'informations en ligne, fournissent aujourd'hui des certificats SSL.

Parmi les application, Le SSL est utilisé pour sécuriser les transactions
bancaires, le transfert de données et les informations de connexions.

SSL est un complément à TCP/IP et permet (potentiellement) de sécuriser


n'importe quel protocole ou programme utilisant TCP/IP. SSL estdevenu la
norme pour sécuriser la navigation sur les sites de réseaux sociaux.
Authentification
 Une authentification simple est une procédure d'authentification
qui requiert un seul élément ou « facteur » d'authentification valide
pour permettre l'accès à une ressource.
Ex. login/password sur Windows ou Linux

 Une authentification forte est une procédure d'authentification qui


requiert au moins deux éléments ou « facteurs » d'authentification
valides pour permettre l'accès à une ressource
Ex. carte bancaire (1. être en possession de la carte; 2.
connaître le PIN)

 Une authentification mutuelle impose une double authentification


entre les deux entités client et serveur
Exemple: Dans un environnement de réseau privé (entreprise)
l’authentification mutuelle est un moyen de permettre au client de vérifier ou
d’authentifier le serveur de l’entreprise et qu'il pourra accéder à toutes les
données du serveur autorisées avec ses informations d'identification d'accès.
En même temps, le serveur authentifiera le client, en vérifiant les
informations d'identification et les autorisations saisies par rapport au profil
créé pour le client.

jsp
Browser EJB
html entity
stateless
thymleaf
component
Contrôle transport (SSL) …

container web container EJB

•contrôle par url •contrôle par classe


•même page, affichage •contrôle par méthode
différent •contrôle programmatique
 Un site a des pages spécifique selon le «rôle » de l’utilisateur :
 pages pour les vendeurs
 pages administrateurs
 pages pour les clients
 Une même page affiche des données différentes selon le rôle de
l’utilisateur:
 en lecture seule si client
 en lecture/écriture si vendeur
Gestion des utilisateurs, des rôles et des accès
Vous pouvez afficher et modifier les droits d'accès des utilisateurs et des
groupes d'utilisateur sur les ressources.
Les droits d'accès sont déterminés par l'affectation de rôles.

Utilisateur
L’utilisateur d’une application est identifié par des « pièces d’identité »,
(credentials en anglais), qui prouvent son identité

Le plus souvent la saisie d’un nom de login et d’un mot de passe prouve
l’identité d’un utilisateur

L’utilisateur peut correspondre à une personne ou à une (partie d’une)


application informatique
Les groupes
- Les groupes permettent d’affecter en une seule action une ressource à
un ensemble d’utilisateurs au lieu de répéter l’action pour chaque
utilisateur.

- Un utilisateur peut être membre de plusieurs groupes.

Rôle:
Des rôles différents pour chaque ressource peuvent être attribués
aux utilisateurs et aux groupes d'utilisateurs.

- La politique de sécurité des serveurs d’application repose sur la


notion de rôle
Exemples de rôle :
administrateur
Organisateur
chef de service
- Un utilisateur peut avoir un ou plusieurs rôles dans une application
- Un rôle donne des droits aux utilisateurs qui ont ce rôle

Vous aimerez peut-être aussi