Vous êtes sur la page 1sur 32

Plan

 Introduction

 Architecture Java EE

 Le conteneur web
Java EE
Java Enterprise Edition  Le conteneur EJB
Ghada Feki
2 LTIC IoT
 La persistance des données en Java (JPA)

2 Ghada Feki

Web Dynamique
Confiance

Echange entre
applications
Introduction
Java Enterprise Edition Etat /
Architecture logicielle Banque /
Ghada Feki MVC Entreprise

4 Ghada Feki

1
Applications
Desktop

Concurrents

Applications
Bibliothèques Web

5 Ghada Feki 6 Ghada Feki

JEE n’impose pas un


style de rangement !

Eviter les problèmes

Ref : openclassrooms.com
Architecture interne MVC
7 Ghada Feki 8 Ghada Feki

2
MVC
Modèle
Vue
Contrôleur
HTML + Java
Ref : openclassrooms.com
Code

9 Ghada Feki 10 Ghada Feki

Framework Java EE
Architecture Java EE
Java EE
Ghada Feki

11 Ghada Feki

3
Plan Architecture des applications (3-tiers)

 Architecture des applications (3-tiers)


Présentation Services Métiers Persistance

 Java EE : Architecture 4-tiers (Client léger web)


Machine Client Serveur d’applications Serveur de données

 Plateforme Java EE  Présentation : Interface utilisateur pour interagir avec


l’application.
 Java EE : Technologies intégrées / Objectifs  Applicatif / Services métiers : Intègre la logique
métier / services offerts aux utilisateurs.
 Persistance : Enregistrement sur un support physique
des données de l’application.
13 Ghada Feki 14 Ghada Feki

Java EE / Architecture 4-tiers (Client léger :


navigateur web)
 Présentation
 Interaction avec la partie applicative sur le serveur Conteneur Web
• Via JSP/Servlet (s’occupe de la logique présentation)
Navigateur Web Logique de présentation
Servlet/JSP
 Logique applicative
• Réalisée par composants EJB
• Communication via Hibernate ou JDBC pour
interroger BD distante Logique métier Composants
EJB
 Persistance
Conteneur EJB SGBD

Serveur Java EE Serveur données

15 Ghada Feki 16 Ghada Feki

4
Plateforme Java EE
 JavaEE comprend notamment :
 Plateforme : base générique fournissant un ensemble de
fonctionnalités utiles pour une majorité d’applications. • Les spécifications du serveur d'application

 Plateforme Java EE est un ensemble constitué de services • Des services, au travers d'API (Application
(API) offerts et de l'infrastructure d'exécution. Programming Interface : Interface de programmation
d’applications , contenant un ensemble de fonctions
courantes de « bas niveau » permettant des
applications de « haut niveau »)

17 Ghada Feki 18 Ghada Feki

Les Services d'infrastructure

Les outils de la plateforme Java EE


 JDBC (Java DataBase Connectivity) est une API
d'accès aux bases de données relationnelles
• Les composants
o Les composants web : JSP (Java Server Pages) et  JNDI (Java Naming and Directory Interface) est
Servlets une API d'accès aux services de nommage, aux annuaires
o Les composants métier : EJB (Enterprise Java Beans)
d'entreprises et aux serveur de noms des références sur
des objets distants.
• Les services  JTA/JTS (Java Transaction API/Java Transaction
o Les Services d'infrastructure Services) est un API définissant des interfaces standard
o Les services de communication
avec un gestionnaire de transactions.

19 Ghada Feki 20 Ghada Feki

5
Les services de communication

 JCA (JavaEE Connector Architecture) est une API  JAAS (Java Authentication and Authorization
de connexion au système d'information de l'entreprise, Service) est une API de gestion de l'authentification et
tels que les ERP des droits d'accès.

 JMX (Java Management Extension) fournit des  JavaMail est une API permettant l'envoi de courrier
extensions permettant de développer des applications électronique.
web de supervision d'applications

21 Ghada Feki 22 Ghada Feki

Java EE / Technologies intégrées


 Composants logiciels: EJB
 Applications orientées Web : JSP, servlet
 JMS (Java Message Service) fournit des fonctionnalités
de communication asynchrone (appelées MOM pour  Communication à distance : Java RMI, IIOP, JMS
Middleware Object Message) entre applications.  Gestion données distantes : JDBC, JPA
 Gestion d’annuaires (type LDAP) : JNDI
 RMI (Remote Method Invocation) est une API  Transactions : JTA
permettant la communication entre objets distants.

23 Ghada Feki 24 Ghada Feki

6
Java EE / Objectifs
 Faciliter le développement de nouvelles applications à
base de composants Conteneur Web JDBC
 Intégration avec les systèmes d’information existants HTTP
Navigateur Web JMS
 Support pour les applications « critiques » de l’entreprise Servlet/JSP
JTA
 Disponibilité, tolérance aux pannes, montée en charge,
RMI JAAS
securité ...
Composants JNDI
EJB
RMI
Application Java Conteneur EJB SGBD
Services / API

Serveur Java EE Serveur données

25 Ghada Feki 26 Ghada Feki

Plan

 Les Servlet

 Les pages JSP

Conteneur Web  Les JavaBeans


Java EE
 Les Expressions Language EL et la librairie JSTL
Ghada Feki

28 Ghada Feki

7
Les Servlets Création d'une Servlet
 Une servlet est un programme qui s’exécute coté serveur  Les servlets sont des classes java qui jouent le rôle
en tant qu’extension du serveur. d'aiguilleurs dans une application (Contrôleur).
 Une servlet est un composant qui étend les  une servlet HTTP doit hériter de la classe
fonctionnalités d'un serveur web de manière portable et abstraite HttpServlet ;
efficace. Un serveur web héberge des classes Java servlets
qui sont exécutées à l'intérieur du container web. Le  une servlet doit implémenter au moins une des
serveur web associe une ou plusieurs URLs à chaque méthodes doXXX(), afin d'être capable de traiter une
servlet. La servlet est invoquée lorsque des requêtes requête entrante.
HTTP utilisateur sont soumises au serveur.
 Une servlet est une classe Java qui permet de créer
dynamiquement des données au sein d'un serveur HTTP.
Ces données sont présentées au format JSP.

29 Ghada Feki 30 Ghada Feki

Récupérer une
ressource web du
GET serveur via une URL doGet() HttpServletRequest contient la requête HTTP, et donne accès à
toutes ses informations, telles que les en-
têtes (headers) et le corps de la requête.
Soumettre au
serveur des données
POST de tailles variables
doPost() HttpServletResponse initialise la réponse HTTP qui sera
(volumineuses)
renvoyée au client, et permet de la
personnaliser, en initialisant par exemple
Identique à la
méthode GET mais
HEAD elle renvoie doHead() les en-têtes et le corps.
seulement les en-
têtes HTTP

31 Ghada Feki 32 Ghada Feki

8
Déclaration de Sevlet dans web.xml Mapping de Servlet dans web.xml
 La déclaration de Sevlet dans le fichier web.xml (WEB-  L'étape suivante est de faire correspondre la servlet
INF) est cruciale (définir l'identité). déclarée à une URL, afin qu'elle soit joignable par les
clients.
 Le rôle primordial du fichier web.xml est de configurer
<servlet-name> permet de donner un nom à une l'application en associant une Servlet à une URL. Ainsi
servlet. C'est ensuite via ce nom qu'on lorsque le client la saisira, la requête HTTP sera
fera référence à la servlet en question. automatiquement aiguillée par le conteneur de servlets
<servlet-class> sert à préciser le chemin de la classe
vers la bonne servlet (celle qui est en charge de répondre
à cette requête).
de la servlet dans votre application.

33 Ghada Feki 34 Ghada Feki

Les Pages JSP


 En Java EE, la technologie utilisée pour réaliser une vue
est JSP (Java Server Pages). En fait, c'est du HTML
amélioré (HTML+java).
<servlet-name> permet de préciser le nom de la servlet à  Il faut placer les JSP dans /WEB-INF. En fait, /WEB-INF
laquelle faire référence. Cette information cache automatiquement les ressources qu'il contient. Une
doit correspondre avec le nom défini dans
page présente sous ce répertoire n'est plus accessible
directement par une URL côté client.
la précédente déclaration de la servlet.
 Les inclusions de JSP
<url-pattern> permet de préciser la ou les URL
Dans le but d'éviter la redondance du code, on utilise les
relatives au travers desquelles la servlet inclusions de JSP comme dans le cas d'ajouter un menu.
sera accessible. Exemple :
<%@ include file="menu.jsp" %>

35 Ghada Feki 36 Ghada Feki

9
Stratégie de conception:
Limiter le code Java dans les JSP Versions JSP
 Deux options  Extensions de fichiers
• Ecrire 25 lignes de code directement dans une JSP
•*.jsp, page JSP standard
• Ecrire ces 25 lignes dans une classe Java à part et 1 ligne
•*.jspf, fragment de page JSP
dans une JSP pour l’invoquer
 Pourquoi la deuxième option est vraiment meilleure? •*.jspx, page JSP compatible XML
• Développement. Ecriture de la Classe dans un  Deux syntaxes
environnement Java et pas HTML •Standard (JSP 1.2)
• Debogage. S’il y a des erreurs, elles sont visible à la
compilation •XML (JSP 2.0)

• Test. L’accès à la classe Java facilite le test (ex: boucle de  Depuis la 2.0 : Extensible à travers des librairies de tag
test de100000itérations sur un serveur…) (fichier .tld) importés ou personnels.
• Réutilisation. Utilisation de la même classe dans
différentes pages JSP
37 Ghada Feki 38 Ghada Feki

Variables prédéfinies Tags / JSP


Les Tags permettent de différencier les fragments JSP du code HTML :
 Request – Instance de HttpServletRequest (1argument de
 Tag de directive : <%@ une_directive %>
service/doGet) Sert à contrôler comment le serveur Web génère la Servlet.
 Response – Instance de HttpServletResponse (2  Tag de commentaire: <%--un_commentaire --%>

argument de service/doGet) Le commentaire JSP n’est pas envoyéau client ni compilé dans la Servlet.
 Tag de déclaration:<%! une_déclaration %>
 Out – Instance de JspWriter (une version bufferisée de Sert à insérer du code Java.
Writer) utilisée pour envoyer des donnés sur la sortie  Tag de scriplet :<% un_scriptlet %>

vers leclient Un scriplet est un bloc de code Java.


 Tag d’expression:<%= une_expression %>
 Session –Instance de HttpSession associée la requête Sert à évaluer une expression et à renvoyer sa valeur.
 Application – Instance de Servlet Context (pour partager Les bibliothèques de tags («tag libraries») : collections de tags (au format xml)
utilisables dans les pages JSP.
des données) telle que obtenue via getServletContext() Exemple JSTL/Core <c:out value="EL" />

39 Ghada Feki 40 Ghada Feki

10
JavaBeans Comment utiliser des beans ?
 Les JavaBeans forment la partie modèle.  Une fois la classe créée, les beans sont des objets Java sur
 But: Gérer les structures de données. lesquels on peut faire ces actions :
 Recommandations pour un objet java (JavaBean): • instanciation d'un nouveau bean
• être une classe publique;
• récupération de la valeur d'une propriété du bean
• avoir au moins un constructeur par défaut, public et sans
paramètres; • affectation/modification de la valeur d'une propriété
• ne doit pas avoir de champs publics ; du bean
• peut définir des propriétés (des champs non publics), qui  Pour faire cela dans une Servlet, le bean est traité comme
doivent être accessibles via des méthodes publiques getter un objet Java standard.
et setter, suivant des règles de nommage.
 Ces objets java peuvent implémenter l'interface Serializable, ils
deviennent ainsi persistants et leurs états peuvent être
sauvegardés;
41 Ghada Feki 42 Ghada Feki

Implémentation du MVC
 Cependant, dans une JSP, l'utilisation des balise de 1. Définir les beans pour représenter les données
scriptlets n'est pas très « propre », on utilisera plutôt 2. Utiliser une servlet pour gérer les requêtes : La servlet lit
l'une des manière suivantes : les paramètres de requêtes, vérifie les données
• balises JSP (JSP 1.2) : <jsp:useBean>,
manquantes ou malformées, appelle le code métier, etc.
<jsp:getProperty>, <jsp:setProperty> 3. Créer les beans : La servlet invoque le code métier
(spécifique à l’application) ou accède à une base de
• utilisation des EL (JSP 2.0) : ${...} données pour obtenir les résultats. Les résultats sont
dans les beans définis à l’étape 1
4. Placer le bean dans le bon scope : La servlet appelle
setAttribute sur la requête, la session, ou la servlet
context pour garder une référence sur les beans qui
représentent le résultat de la requête

43 Ghada Feki 44 Ghada Feki

11
Implémentation du MVC avec
RequestDispatcher
5. Transmettre la requête à la JSP (forward) : La servlet
détermine quelle JSP est appropriée à la situation et getServletContext() retourne un objet ServletContext, qui fait référence
utilise la méthode forward du RequestDispatcher pour au contexte commun à toute l'application : celui-ci
transférer le contrôle à la JSP contient un ensemble de méthodes qui permettent à

Exemple : une servlet de communiquer avec le conteneur de


servlet ;
this.getServletContext().getRequestDispatcher( "/WEB- getRequestDispatcher() Permet de manipuler une ressource. Elle retourne
INF/accueil.jsp" ).forward( request, response ); un objet RequestDispatcher, qui agit comme une
enveloppe autour de la page JSP. Il est impératif d'y
préciser le chemin complet vers la JSP.
forward() réexpédier la paire requête/réponse HTTP vers la
page JSP.

45 Ghada Feki 46 Ghada Feki

6. Extraire les données des beans L'EL permet de récupérer l'information sur un bean (s'il a
• JSP 1.2 : la JSP accède aux beans avec jsp:useBean et un été mis préalablement dans un scope par une servlet avec
scope correspondant au choix de l’étape 4. La JSP utilise un setAttribute):
ensuite jsp:getProperty pour afficher les propriétés des ${nomBean.property}
beans - nomBean est celui défini lors du setAttribute fait par la servlet
• JSP 2.0: la JSP utilise ${nameFromServlet.property} pour - property est le nom de la propriété que l'on veut accéder
afficher les propriétés des beans

47 Ghada Feki 48 Ghada Feki

12
Un Scope
Un scope peut être vu comme un conteneur de beans stocké du  Application : ce scope est créé automatiquement au
côté du serveur (le client ne peut avoir aucune connaissance sur lancement du projet JEE sur le serveur. Les beans qu'il
ces beans).
contient sont partagés par tous les clients et ne sont
Il existe 4 types de Scopes, que l'on distingue par la durée de vie
des beans qui y sont stockés : détruit que lors de l'arrêt/rechargement du projet JEE sur
 Requête : ce scope est créé à chaque requête du client, les
le serveur.
beans qu'il contient sont détruit lorsque le serveur à envoyé la  Page : ce scope restreint la durée de vie des beans aux
réponse au client requêtes POST effectuées sur une page donnée, dès
 Session : ce scope est créé automatiquement par le qu'on en sort, les beans sont détruit.(Ce scope n'est
conteneur JEE pour chaque client qui se connecte au serveur. quasiment pas utilisé)
Les beans qu'il contient ne sont visible que par le client
détenant la session, et sont détruit lorsque la session du client
se termine (géré par un timeout du côté du serveur)

49 Ghada Feki 50 Ghada Feki

Partage de données sur requête:


Partage de données sur requête exemple simple

51 Ghada Feki 52 Ghada Feki

13
Partage de données sur session Expression Language (EL)
 Syntaxe

 Limiter la présence du langage Java (non spécialiste)


 Meilleure lisibilité, le code se limite au nom des beans et de ses propriétés
 Les Expressions Languages (EL) permettent de manipuler les données d’une page
JSP (essentiellement les Beans)
 Une EL permet d’accéder simplement aux beans des différents scopes de
l’application (page, request , session et application)
 Utilisation optimale des JSP (facile, court, simple et concis).
 Forme : ${ expression }
 Opérateurs :
 Arithmétiques, applicables à des nombres : +, -, *, /, % ;
 Logiques, applicables à des booléens : &&, ||, ! ;
 Relationnels, basés sur l'utilisation des méthodes equals() et compareTo() des objets
comparés : == ou eq, != ou ne, < ou lt, > ou gt, <= ou le, >= ou ge.
 Condition: test ? si oui : sinon ;
 Vérification si vide (null) : opérateur empty.

53 Ghada Feki 54 Ghada Feki

Manipulation d'objets (JavaBeans) dans


les JSP Java Standard Tag Library (JSTL)
 La JSTL est une bibliothèque, une collection regroupant
 Les JavaBeans forment la partie modèle. des balises implémentant des fonctionnalités à des fins
 But: Gérer les structures de données.
générales, communes aux applications web. Citons par
 Recommandations pour un objet java (JavaBean):
exemple la mise en place de boucles, de tests
 être une classe publique;
 avoir au moins un constructeur par défaut, public et sans
conditionnels, le formatage des données ou encore la
paramètres; manipulation de données XML. Son objectif est de
 ne doit pas avoir de champs publics ; permettre au développeur d'éviter l'utilisation de code
 peut définir des propriétés (des champs non publics), qui Java dans les pages JSP, et ainsi de respecter au mieux le
doivent être accessibles via des méthodes publiques getter et découpage en couches recommandé par le modèle MVC.
setter, suivant des règles de nommage.
 Ces objets java peuvent implémenter l'interface Serializable, ils  Le but de la JSTL est de simplifier le travail des auteurs
deviennent ainsi persistants et leurs états peuvent être de JSP, c’est-à-dire les acteurs responsables de la couche
sauvegardés; présentation.
55 Ghada Feki 56 Ghada Feki

14
La librairie Core
 La JSTL permet de développer des pages JSP en utilisant  Cette bibliothèque « core » comporte les actions de base
des balises XML sans connaissances du langage Java. pour la gestion des variables de scope d’une application
 Sun a proposé une spécification pour la Java Standard Tag web :
Library voir adresse java.sun.com/ jsp/ jstl.  Affichage de variable, création, modification et
 L’implémentation proposée vient du projet Jakarta JSTL suppression de variables de scope et de gestion des
1.1 disponible à l’adresse jakarta.apache.org/ taglibs.
exceptions;
 Avantage: Rend le code plus facile à lire, à réutiliser et à
maintenir.  Actions conditionnelles et boucles;
 La dernière version est JSTL 1.2.  Manipulation d’URL et redirection.
 C’est un ensemble de balises personnalisées qui propose
des fonctionnalités souvent rencontrées dans les page JSP.
 Utilisation conjointe avec les Expressions Languages (EL).
57 Ghada Feki 58 Ghada Feki

 Elle propose les tags suivants répartis dans trois  Mise en place
catégories :
Catégorie Tag  Configurer Tomcat : mettre JSTL 1.2 (fichier jar dans lib
set de WEB-INF)
out
Utilisation de EL
remove  Configurer Eclipse pour qu'il connaisse les balises JSTL :
catch ajouter la directive taglib à la JSP.
if <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"
choose
Gestion du flux (condition et itération)
forEach %>
forTokens
import
Gestion des URL url
redirect
59 Ghada Feki 60 Ghada Feki

15
Syntaxe Core - Tag out
 Le tag out permet d'envoyer dans le flux de sortie de la  L'attribut default permet de définir une valeur par défaut
JSP le résultat de l'évaluation de l'expression fournie dans si le résultat de l'évaluation de la valeur est null. Si la
le paramètre " value ". valeur est null et que l'attribut default n'est pas utilisé
alors c'est une chaîne vide qui est envoyée dans le flux de
sortie.
Attribut Rôle <c:out value="${personne.nom}" default="Inconnu" />
value valeur à afficher (obligatoire)
default définir une valeur par défaut si la valeur est null  Le tag out est particulièrement utile pour générer le code
escape booléen qui précise si les caractères particuliers (< > & ...) dans un formulaire en remplaçant avantageusement les
Xml doivent être convertis en leurs équivalents HTML (&lt; &gt; scriplets.
&amp ; ...)
<input type="text" name="nom" value="<c:out
value="${param.nom}"/>" />

61 Ghada Feki 62 Ghada Feki

Syntaxe Core - Tag if


 Ce tag permet d'évaluer le contenu de son corps si la <c:if test="${empty personne.nom}" >Inconnu</c:if>
condition qui lui est fournie est vraie. Il possède plusieurs  Le tag peut ne pas avoir de corps s'il est simplement
attributs : utilisé pour stocker le résultat de l'évaluation de la
condition dans une variable.
Attribut Rôle <c:if test="${empty personne.nom}" var="resultat" />
test condition à évaluer  Le tag if est particulièrement utile pour générer le code
var nom de la variable qui contiendra le résultat de dans un formulaire en remplaçant avantageusement les
l'évaluation scriplets.
scope portée de la variable qui contiendra le résultat

63 Ghada Feki 64 Ghada Feki

16
Syntaxe Core - Tag choose
 Ce tag permet de traiter différents cas mutuellement <c:choose>
<c:when test="${personne.civilite == 'Mr'}">
exclusifs dans un même tag. Le tag choose ne possède pas
Bonjour Monsieur
d'attribut. Il doit cependant posséder un ou plusieurs tags </c:when>
fils « when ». <c:when test="${personne. civilite == 'Mme'}">
 Le tag when possède l'attribut test qui permet de Bonjour Madame
préciser la condition à évaluer. Si la condition est vraie </c:when>
<c:when test="${personne. civilite == 'Mlle'}">
alors le corps du tag when est évalué et le résultat est
Bonjour Mademoiselle
envoyé dans le flux de sortie de la JSP </c:when>
 Le tag otherwise permet de définir un cas qui ne <c:otherwise>
correspond à aucun des autres cas inclus dans le tag. Ce Bonjour
tag ne possède aucun attribut. </c:otherwise>
</c:choose>

65 Ghada Feki 66 Ghada Feki

Syntaxe Core - Tag forEach


 Ce tag permet de parcourir les différents éléments d'une  A chaque itération, la valeur de la variable dont le nom
collection et ainsi d'exécuter de façon répétitive le est précisé par la propriété var change pour contenir
contenu de son corps. Il possède plusieurs attributs : l'élément de la collection en cours de traitement.
Attribut Rôle  Pour les attributs, la seule obligation est d'avoir défini soit
var nom de la variable qui contient l'élément en cours de l'attribut items, soit les attributs begin et end.
traitement
items collection à traiter
 Le tag forEach peut aussi réaliser des itérations sur les
varStatus nom d'une variable qui va contenir des informations sur nombres et non sur des éléments d'une collection. Dans
l'itération en cours de traitement ce cas, il ne faut pas utiliser l'attribut items mais
begin numéro du premier élément à traiter (le premier possède
le numéro 0)
uniquement utiliser les attributs begin et end pour fournir
end numéro du dernier élément à traiter les bornes inférieures et supérieures de l'itération.
step pas des éléments à traiter (par défaut 1)

67 Ghada Feki 68 Ghada Feki

17
Syntaxe Core - Tag forTokens
<c:forEach begin="1" end="4" var="i">  Ce tag permet de découper une chaîne selon un ou
<c:out value="${i}"/><br> plusieurs séparateurs donnés et ainsi d'exécuter de façon
</c:forEach> répétitive le contenu de son corps autant de fois qu'il y a
d'occurrences trouvées.
 Il possède plusieurs attributs :
 L'attribut step permet de préciser le pas de l'itération.
Attribut Rôle
var variable qui contient l'occurrence en cours de traitement
(obligatoire)
<c:forEach begin="1" end="12" var="i" step="3"> items la chaîne de caractères à traiter (obligatoire)
<c:out value="${i}"/><br> delims précise le ou les séparateurs
varStatus nom d'une variable qui va contenir des informations sur l'itération
</c:forEach> en cours de traitement
begin numéro du premier élément à traiter (le premier possède le
numéro 0)
end numéro du dernier élément à traiter
69 Ghada Feki 70 Ghada Feki
step pas des éléments à traiter (par défaut 1)

 L'attribut delims peut avoir comme valeur une chaîne de caractères ne  Il n'y a pas d'occurrence vide. Dans le cas où deux séparateurs sont
contenant qu'un seul caractère (délimiteur unique) ou un ensemble de juxtaposés dans la chaîne à traiter, ceux-ci sont considérés comme
caractères (délimiteurs multiples). un seul séparateur. Si la chaîne commence ou se termine par un
séparateur, ceux-ci sont ignorés.
<c:forTokens var="token" items="chaine 1;chaine 2;chaine 3" delims=";"> <c:forTokens var="token" items="chaine 1;;chaine 2;;;chaine 3"
<c:out value="${token}" /><br> delims=";">
</c:forTokens> <c:out value="${token}" /><br>
</c:forTokens>
 Dans le cas où il y a plusieurs délimiteurs, chacun peut servir de séparateur.
 Il est possible de ne traiter qu'un sous-ensemble des occurrences de
<c:forTokens var="token" items="chaine 1;chaine 2,chaine 3" delims=";,"> la collection. JSTL attribut à chaque occurrence un numéro
<c:out value="${token}" /><br> incrémenté à partir de 0.
</c:forTokens>  Les attributs begin et end permettent de préciser une plage
d'occurrences à traiter.

71 Ghada Feki 72 Ghada Feki

18
Contrôle d'un formulaire par une Servlet
<c:forTokens var="token" items="chaine 1;chaine 2;chaine 3"  La balise form annonce le début d'un formulaire.
delims=";" begin="1" end="1" >
 Attribut method de la balise form peut avoir ces deux
<c:out value="${token}" /><br>
valeurs :
</c:forTokens>
 GET: correspond à l'appel d'une page par le navigateur
 Résultat: chaine 2
(barre d'adresse ou lien)
 Transmet les paramètres dans l'URL :
 Il est possible de n'utiliser que l'attribut begin ou l'attribut end.  http://localhost:8080/servlet/test?param=value
Si seul l'attribut begin est précisé alors les dernières  POST: plus adapté au transfert de données depuis un
occurrences seront traitées. Si seul l'attribut end est précisé
alors seules les premières occurrences seront traitées. formulaire
 Les attributs varStatus et step ont le même rôle que ceux du
tag forEach.
73 Ghada Feki 74 Ghada Feki

Le contrôle un formulaire par une sevlet se fait


principalement en deux phases :
 Au niveau de la servlet :
Liaison Sevlet-JSPformulaireInit par doGet.
Liaison Sevlet-JSPformulaireResultat par doPost.
 Au niveau de la JSP formulaireInit :
Mentionner la servlet comme action dans le formulaire avec Conteneur EJB
method=post. Java EE
Ghada Feki

75 Ghada Feki

19
Plan La logique métier
 La logique métier
 La logique métier sera implémentée dans les EJB qui sont
 Le conteneur EJB des composants transactionnels côté serveur et
accessibles à distance par leurs clients.
 Les EJB (Enterprise JavaBeans)
 Les EJB s’exécutent dans des serveurs Java EE
 Interfaces des Enterprise JavaBeans fonctionnant comme des serveurs intermédiaires dans un
système client/serveur.
 Les objets distribués

 Les Middlewares

77 Ghada Feki 78 Ghada Feki

Le conteneur EJB
 Deux types de conteneurs sont utilisés dans  Du côté serveur, l’accès aux différentes ressources s’avère
l’architecture Java EE : le conteneur Web et le conteneur complexe.
EJB.  Avec les EJB, la plupart des tâches se font par déclaration,
évitant ainsi d’écrire du code spécifique pour gérer les
• Le conteneur Web est un environnement d’exécution transactions ou la persistance.
pour les pages JSP et les servlets qui constituent une
passerelle entre l’interface utilisateur et les EJB  Il s’agit de se concentrer sur le développement des
implémentant la logique métier. composants en déléguant au conteneur EJB l’implantation
des services techniques et la fourniture de ces services
• Le conteneur EJB est un environnement d’exécution durant l’exécution.
pour les EJBs. Le conteneur EJB contient les
composants métiers et leur fournit des services.

79 Ghada Feki 80 Ghada Feki

20
 À un composant est associé un descripteur de Les principales fonctionnalités fournies par un conteneur
déploiement, pour signifier par exemple qu’un bean soit d’EJB sont :
persistant, sécurisé et accessible par plusieurs clients en
même temps.  La connectivité entre les clients et les EJB :
• le conteneur gère les communications entre les clients

 Le serveur est responsable du traitement de ce et les EJB ;


descripteur et assure l’exécution de ces services. • après le déploiement d’un EJB dans un serveur
d’applications, le client peut invoquer les méthodes de
cet EJB comme si elles étaient situées dans la même
machine virtuelle ;
• les communications sont assurées par le Middleware
sous-jacent de manière transparente.

81 Ghada Feki 82 Ghada Feki

 La gestion de la persistance : les composants persistants  La gestion de la sécurité :


peuvent choisir de déléguer leur persistance sur le • politiques de sécurité déclarées mais non codées par
support de persistance au conteneur. le développeur,
• support de la sécurité basé sur l’API sécurité de Java,
 La gestion des transactions : les composants persistants • méthodes liées à la sécurité implémentées par le
peuvent choisir de déléguer la gestion de leurs conteneur,
transactions au conteneur, qui implémente les • utilisation des attributs de sécurité définis dans le
mécanismes transactionnels nécessaires à la réalisation de descripteur de bean utilisé lors de la phase de
la logique transactionnelle décrite par les beans. déploiement.

83 Ghada Feki 84 Ghada Feki

21
Les EJB (Enterprise JavaBeans)
 La gestion de la concurrence : Les composants peuvent  Le développement de logiciel a vu apparaître dans les
être invoqués par un seul client ou par plusieurs clients années 90 la notion de composant comme des morceaux
simultanément. de code standards, préconstruits, réutilisables et
 La gestion du cycle de vie des composants : création et la encapsulant de la logique métier.
destruction des instances des composants.  Les composants EJB sont conçus pour encapsuler la
 La gestion du pool de connexions : logique métier et éviter au développeur d’applications de
• connexion à une BD = coûteuse en termes de
se préoccuper de : transaction, sécurité, concurrence,
ressources, communication, persistance, gestion d’erreurs...
• nombre de connexions limité par le nombre de licences,
• solution : le conteneur gère un pool de connexions.

85 Ghada Feki 86 Ghada Feki

 Un composant EJB est constitué d’une collection de  La spécification Enterprise JavaBeans 1.1 définit 2 types de
classes Java et d’un fichier XML, fusionnés en une entité beans : bean entité et bean session.
unique.
 Le conteneur prend en charge tout ce qui concerne le  La spécification Enterprise JavaBeans 2.0 introduit un
système. Cette séparation des tâches est le concept troisième bean : le bean message.
fondamental de cette technologie.
 Un composant EJB est conçu comme un ensemble  Il existe donc 3 types de beans :
réutilisable de logiques métiers et fonctionne avec tous
•les beans sessions,
les types de clients : servlets, JSP, application Java/RMI,...
•les beans entités,
•les beans messages.

87 Ghada Feki 88 Ghada Feki

22
Les beans sessions
 Un bean session représente un processus. C’est une
Avec état extension du processus du client dans le serveur
Session d’applications Java EE.
Sans état
 On distingue 2 types de beans sessions : les beans
Logique métier Composants
Composants sessions sans état (stateless session) et les beans sessions
CMP
EJB
EJB
Entité avec état (stateful session).
Conteneur EJB BMP
Message  Un bean session ne peut avoir qu’un client à un moment
donné.

89 Ghada Feki 90 Ghada Feki

 Pour un bean session sans état, plusieurs clients peuvent  Un bean session avec état possède un état
être associés au même bean successivement. conversationnel, c’est à dire un état résultant des
interactions avec un même client.
 Pour un bean session avec état, c’est le même client qui
réalise toutes les invocations.
 L’état représenté par un bean session est privé et
 Un bean session sans état représente un traitement conversationnel . Le bean est accessible par un client
fonctionnel. unique.

 Exemple d’un bean session sans état : le calcul d’un


itinéraire entre 2 points ou la demande d’un virement
entre 2 comptes.

91 Ghada Feki 92 Ghada Feki

23
Les beans entités
Exemple de bean session avec état :

 Un bean entité représente un objet métier persistant.


 un panier sur un site de commerce électronique
possédant deux attributs : un pour le nom du client et un  Par exemple, un bean entité représente une commande,
pour les articles sélectionnés par ce client. un article, un compte bancaire.
 Ce bean peut posséder une méthode telle que
ajouterArticle() que le client va invoquer pour ajouter un  Les attributs d’un bean entité peuvent être stockés dans
nouvel article dans le panier. une base de données ou tout autre support de
persistance.

93 Ghada Feki 94 Ghada Feki

 Un bean entité peut être utilisé par plusieurs clients


simultanément. • Dans le premier cas (gérée par le bean lui-même) : les
opérations de lecture et d’écriture sur le support de
 L’état représenté par un bean entité est partagé et
persistance doivent être codées dans le bean (par
transactionnel. Le bean constitue le point d’accès unique à exemple du code SQL pour une BDR).
ces données par différents clients.

 La persistance d’un bean entité peut être gérée par le ⇒ on parle de bean BMP (Bean Managed Persistence).
bean lui-même ou bien par le conteneur.

95 Ghada Feki 96 Ghada Feki

24
Les beans messages
 Les beans sessions et entités sont des composants
• Dans le second cas (gérée par le conteneur) : la distribués invoqués par des clients de manière synchrone,
persistance est gérée par le conteneur et seules les c’est-à-dire par invocation de méthodes
fonctionnalités de recherches avancées doivent être  Les beans messages sont des beans qui consomment des
codées dans le bean, les autres opérations de lecture et messages de manière asynchrone, par l’intermédiaire de
d’écriture sur le support de persistance sont effectués Java Messaging Service (JMS).
automatiquement par le conteneur.  Exécution sur réception d’un message JMS
(Appel à d’autres beans par exemple).
⇒ on parle de bean CMP (Container Managed Persistence).

97 Ghada Feki 98 Ghada Feki

Interfaces des Enterprise JavaBeans Les objets distribués - base des EJB
 Les composants EJB possèdent des interfaces exposant
leurs services disponibles aux clients.  Les objets distribués sont forts utiles puisqu’ils
 Les clients utilisent ces interfaces pour exécuter la permettent de distribuer une application sur un réseau.
logique encapsulée dans le bean.
 Cependant, des exigences telles que les transactions et la
 Il existent 2 sortes d’interfaces : les interfaces distantes et
les interfaces locales. sécurité deviennent indispensables dans des applications
d’entreprise.
 Ces interfaces permettent de préciser quelles seront les
méthodes métiers des Beans qui seront accessibles
depuis l’intérieur ou l’extérieur d’un serveur
d’application.

99 Ghada Feki 100 Ghada Feki

25
Les Middlewares
 Un objet distribué est un objet qui peut être appelé
depuis un système distant, notamment :  Les objets distribués nécessitent une infrastructure
• depuis un client faisant partie du processus contenant technique permettant d’assurer la communication entre
l’objet (in-process), ces objets.
• depuis un client en dehors de ce processus (out-of-
process)  Cette infrastructure doit fournir aux objets un accès aux
• depuis un client situé n’importe où sur le réseau. services transversaux comme les services de nommage,
de gestion des transactions, de gestion de persistance, de
 Différentes technologies permettent d’utiliser des objets gestion de sécurité...
distribués telles que CORBA de OMG, DCOM de
Microsoft et Java RMI-IIOP de Sun
101 Ghada Feki 102 Ghada Feki

Exemple d’application Java EE


 De manière transparente pour le développeur : sans qu’il
ait besoin de coder des mécanismes pour assurer ces
services.  Un exemple type d’application basée sur l’architecture
Java EE est celui d’une application de e-commerce :
⇒ Ce type d’infrastructure est appelée Middleware.
 D’autres services sont nécessaires :  Le client se connecte sur le site Web d’un magasin,
• optimisation des accès aux ressources (pool de consulte un catalogue des articles disponibles, en choisit
connexions...), certains qu’il met dans un panier électronique et règle ses
• mécanisme d’activation/désactivation des objets, achats.
• mécanisme de répartition de charge et de tolérance
Modéliser le besoin avec les différents types de beans.
aux pannes.

103 Ghada Feki 104 Ghada Feki

26
 Du côté du serveur Web, les pages JSP et servlets
utilisent:
 des beans entités qui correspondent aux objets métiers
comme les articles, clients, commandes, factures;
 des beans sessions avec état représentant les paniers des
clients;
 des beans sessions sans état qui peuvent implémenter des La persistance des données en Java (JPA)
traitements comme la navigation dans un catalogue ou la Java EE
demande d’un devis pour le contenu d’un panier.
Ghada Feki

105 Ghada Feki

JPA Limites de JDBC


 JPA : Java Persistence API  Java avec stockage des données dans une BDD
 Framework de persistance en Java relationnelle
 ORM : Object-Relationnal Mapping  Nécessite des requêtes SQL
 API définie sur la base d'Hibernate, ORM de référence dans le monde  Utilisation d'un framework dédié : JDBC
Java
 Sort du format « standard » de représentation Java des
 Peut fonctionner avec d'autres moteurs de persistance
données (classes et objets)
 Principes  Une requête de type SELECT retourne un ResultSet
 On définit la correspondance entre la structure des classes objet et le  C'est à dire un ensemble de ligne de plusieurs colonnes
schéma relationnel de la BDD
 On accède aux éléments du ResultSet en naviguant selon les lignes et
 On manipule directement des objets dans le code les colonnes, case par case
 Le framework fait la lecture/enregistrement du contenu des objets sur le  Peu pratique mais difficile de faire autrement vu ce que retourne de
support physique manière native les requêtes SQL
 Plus besoin de coder des requêtes SQL  Sauf à passer par des SGBD objet-relationnel

107 Ghada Feki 108 Ghada Feki

27
De JDBC à JPA
 Java avec stockage BDD et accès via JDBC  Avec un framework ORM comme JPA
 Au delà de l'accès à faire à distance  Définition des correspondances classes / tables
 Qui complexifie forcément les choses mais ne peut pas y  Avec des classes Java classiques (POJO : Plain Old Java Object)
couper
 Gére ensuite tout seul la cohérence objet / contenu base
 Représentation des données très différentes
 Coté BDD
 JDBC
 Structure en table avec langage de requête dédié  Très simple d'exécuter des requêtes SQL
 Récupère toujours une « sous-table » via le résultat de  Mais ensuite le programmeur doit tout gérer à la main
l'exécution d'une requête de type SELECT  JPA
 Coté Java
 Framework assez complexe mais très puissant
 Structure des données définies par les classes que l'on
instancie  Qui supprime une très grande partie du code nécessaire avec
JDBC

109 Ghada Feki 110 Ghada Feki

Fonctionnement général de JPA Mappings : entités Java– tables SQL


 Définition de correspondances entre classes et tables  Indépendance de définition des structures de données
 On ne manipulera que des objets métier coté Java  On modélise d'un coté le métier et de l'autre la BDD en s'attachant à faire

 API de JPA offre des fonctionnalités pour les meilleures implémentations / conceptions selon le domaine
 Récupérer des objets à partir de leur contenu en BDD  Coté métier : structure métier et facilité de manipulation des données

 Usage au besoin d'un langage de requête ressemblant à SQL mais se  Coté BDD : optimiser la gestion des données et performance d'accès
basant sur la structure des classes  On définira ensuite les mappings requis entre les classes et tables
 Rendre des objets créés persistants  Une classe Java est mappée vers une table dite primaire
 Leur contenu est inséré dans la BDD
 La plupart des attributs de la classe ont une correspondance avec les
 Faire toute opération de création / modification / colonnes de la table
suppression sur des objets avec persistance en BDD  Pourra utiliser d'autres tables dites secondaires pour la correspon- dance
 Se fait en mode transactionnel d'autres attributs
 JPA est une API qui nécessite un moteur l'implémentant  Via des jointures réalisées automatiquement par JPA
 Hibernate, EclipseLink …  Une classe pourra fusionner le contenu de deux (ou plus) tables
 Pourra gérer tout type de jointures entre tables /associations entre classes

111 Ghada Feki 112 Ghada Feki

28
Entité Annotations
 Classe Java qui a vocation à avoir le contenu de ses  Les mappings classes / tables sont définis par des
objets rendu persistant en BDD  annotation Java dans les classes des entités
 Ou dans des fichiers XML mais moins pratique
 Classe standard : un POJO (Plain Old Java Object)  Annotations Java : méta-données
 Définit des attributs de tout type  Données sur des données
 Et éventuellement des méthodes métier  S'appliquent sur des éléments du code
 Précise qu'un élément joue un certain rôle, a certaines
 Peu de contraintes à respecter (programmation classique) caractéristiques, informer de quelque chose …
 Constructeurs dont un sans paramètre  Une annotation peut contenir des paramètres (nommés s'il y en a
 Getters et setters pour les attributs plusieurs)
 Un attribut jouera un rôle d'identifiant  Une annotation commence par @
 Exemple : @Override pour préciser que c'est la rédéfinition d'une
 Implémente java.io.Serializable méthode de la classe mère
 Rédéfinir equals() et hashcode() pour gestion des collections  Une annotation est définie par une classe Java dédiée

113 Ghada Feki 114 Ghada Feki

Annotations des entités Annotation basique d'attributs


 Annotations JPA définies dans le package javax.persistence  Cas où le contenu d'une colonne mappe directement le contenu d'un attribut
 @Entity de type simple (pas de collection)
 Définit une classe comme étant une entité EJB dont les instances  @Basic : mapping colonne/attribut
pourront être rendues persistantes  Optionnel, s'applique par défaut : pour préciser des options
 Paramètre name=''nomEntite''  fetch : FetchType (voir plus loin)
 Nom optionnel de l'entité : par défaut le nom de la classe
 optional : boolean, si remplir l'attribut est obligatoire ou pas
 A utiliser si deux classes de même nom dans 2 packages différents
 @Id : si l'attribut est un identifiant d'objet (aucun paramètre)
 @Table(name = "compte")
 Définit la table primaire mappée sur la classe  @Column : optionnel, précision de paramètres
 Paramètres  Application implicite par défaut sur la base de même nom entre un attribut
 name : nom de la table, optionnel si la classe a le même nom et une colonne
 schema, catalog : optionnel, si utile à préciser, sinon valeurs par défaut  Plusieurs paramètres optionnels dont
 uniqueConstraints : optionnel, contraintes d'unicité sur des colonnes  name : String, par défaut égal au nom de la propriété
 table : String, si colonne vient d'une autre table que la primaire
 unique : boolean, si unicité des valeurs de la colonne
115 Ghada Feki 116 Ghada Feki

29
Manipulation d'entités persistantes
 Configuration d'une unité de persistance  <persistence-unit ...>
 Fichier XML définissant la liste des classes correspondant à  Définit le nom de l'unité de persistance et le type de transaction utilisée
des entités, la connexion au SGBD, divers paramètres …  <provider>
 Dans l'application Java  Le moteur de persistance utilisé par JPA
 Récupère un « entity manager »  <class>
 A partir de ce gestionnaire, on manipulera les entités  Définit qu'une classe Java sera une entité dont les instances seront
persistantes en base de données
 Récupération d'instances d'entités en base, rendre
persistant de nouvelles instances, modifier des entités …  <properties>
 Ensemble de propriétés de configuration
 Les modifications se font via une transaction
 Ici on retrouve les paramètres de connexion à la base via JDBC
 Avec Jave EE, on peut utiliser d'autres fonctionnalités  URL, driver, utilisateur et mot de passe
comme JTA pour les transactions ou JNDI pour les
annuaires
117 Ghada Feki 118 Ghada Feki

Langage de requête JPQL


 JPA définit un langage de requête similaire à SQL  Recherche par identifiant
 Mais travaillant sur la structure des classes directement find et getReference permettent de retrouver une entité en
donnant son Id
 Requêtes statiques Elles ont deux paramètres
@NamedQuery, @NamedNativeQuery Class<T> pour indiquer le type de l’entité recherchée
 Requêtes dynamiques Object pour indiquer la clé primaire
définition de la requête à l’exécution
Exemple :
 EntityManager permet de créer et exécuter les requêtes public void supprimeCommande(Long commandeId) {
createNamedQuery, createQuery, createNativeQuery Commande cmde = entityManager.find(Commande.class,
commandeId); entityManager.remove(cmde);
}

119 Ghada Feki 120 Ghada Feki

30
 Requêtes statiques
Paramétrage
Définition @NamedQuery( name=“clientParNom”,
@NamedQuery(name=“clientParCodePostal”, query = “SELECT c FROM Client c
WHERE c.adresse.codePostal = :cp”) queryString=“SELECT c FROM Client c ” + “WHERE c.nom LIKE :nomClient”
@Entity public class Client { )

}
@PersistenceContext public EntityManager em; List clients =
Utilisation em.createNamedQuery(“clientParNom”)
public List rechercheClientParCodePostal(int cp) { return .setParameter(“nomClient”,“Marchand”)
em.createNamedQuery(“clientCodePostal”)
.setParameter(“cp”, cp) .getResultList();
.setMaxResults(20)
.get
}

121 Ghada Feki 122 Ghada Feki

 Requêtes dynamiques  Update, delete

public List rechercheAvecNom (String nom) { return em.CreateQuery ( UPDATE Employe e


“SELECT c FROM Client c ” + “WHERE c.nom LIKE :nomClient”) SET e.salaire = e.salaire * 1.1
.setParameter(“nomClient”, nom) WHERE e.departement.nom = ‘Informatique’
.setMaxResults(10)
.getResultList(); DELETE
} FROM Client c
WHERE c.status = ‘inactif’ AND c.commandes IS EMPTY AND c.solde = 0

123 Ghada Feki 124 Ghada Feki

31
 Entity Manager  persist()
C’est lui qui est chargé de gérer le cycle de vie des entités public Commande creerCommande(Client c) { Commande cmde =
Équivalent de Hibernate Session ou JDO PersistenceManager 4 new Commande(c);
opérations principales // Après l’appel à persist(), l’état de l’entité passe
• persist() // transient à managed.
• insère une entité dans la base // Au prochain commit, l’instance sera insérée dans la
• remove() // base de données entityManager.persist(cmde); return cmde;
• supprime une entité de la base }
• merge()
 merge()
• synchronise l’état des entités détachées
la méthode merge() retourne une copie gérée (managed) de l’entité
• refresh()
(préalablement détachée)
• recharge l’état des entités à partir de la base les modifications sur l’état persistant sont appliquées à l’instance gérée

125 Ghada Feki 126 Ghada Feki

Références
Livres :
 Designing Entreprise Applications (Auteur : Nicholas
Kassem and the Entreprise Team / Editeur : Sun
Microsystems )
 Java Servlet Programming (Auteur : Jason Hunter et
William Crawford / Editeur : OREILLY / ISBN : 1-56592- Merci de votre attention
391-X)
 Supports de cours :
 Java EE (Servlets / JSP) (Auteur : Fabien Romeo)
 Les Entreprise JavaBeans(EJB) (Auteur : Jean-Marc
Farinone)
 Les Entreprise JavaBeans (Auteur : Claue Duallet)

127 Ghada Feki 128 Ghada Feki

32

Vous aimerez peut-être aussi