Chapitre 1
Architecture JEE
Servlet JSP EL JSTL
MVC, DAO
1
Introduction
Utilisateur
Requête HTTP HTML
Serveur HTTP
Serveur d’Application
Conteneur
Apache Tomcat
2
Architecture Web
Serveur Web
Client HTTP Requête HTTP
PHP SGBD
Réponse HTTP
HTML + CSS +
JEE
Java Script HTML, JSON
Dot NET
Node JS
Un Client web (Browser) communique avec le serveur web (Apache) en utilisant le protocole HTTP
Une application web se compose de deux parties :
• La partie Backend : S’occupe des traitements effectués coté serveur :
• Technologies utilisées : PHP, JEE, . NET, Node JS…
• La partie Frontend : S’occupe des traitements effectués coté Client :
• Langages utilisés : HTML, CSS, Java Script
• La communication entre la partie Frontend et la partie Backend se fait en utilisant le protocole HTTP. 3
Architecture
Client Web
HTML HTTP, HTML Serveur d’application
Client Web
RMI
Angular REST JSON Web SOAP REST
IIOP
JMS
JQuery
SGBD
Busines Layer (Métier)
Relationnel
Client REST JSON Ou
Mobile Data Access Layer (DAO)
NoSQL
Client RMI, IIOP IOC Containner (Spring ou EJB)
Java, C++, C# JMS, AMQP
Service de l’infrastructure technique
JPA, Hibernate, JMS, JNDI, JMX, JaxWS,
Client SOAP XML JaxRS, RMI, CORBA, MQP…
SOAP
4
Architecture Web JEE
Client HTTP Serveur Tomcat
Couche Web Metier
1 2
request
HTTP
GET ou POST R
Controleur
Model
Servlet
3
Traitements
5
4
7 Vue
6 JSP
HTML response
HTML
5
Architecture Web JEE
1. Le client envoie une requête HTTP de type GET ou POST vers le contrôleur représenté
par un composant Web JEE : SERVLET. Pour lire les données de la requete HTTP le
controleur utilise l’objet request de type HttpServletRequest.
2. Le contrôleur fait appel à la couche métier pour effectuer les traitements et récupère
les résultats R.
3. Le contrôleur stocke le résultat R dans le modèle M. le modèle est généralement un
objet qui permet de stocker toutes les données qui seront affichées dans la vue.
4. Le contrôleur(Servlet) fait appel à la vue JSP(Java Server Pages) en lui transmettant les
objets request et response. Cette opération s’appelle Forwarding.
5. La vue JSP récupère le résultat à partir du modèle. La vue retrouve le modèle dans
l’objet request.
6. La vue JSP génère dynamiquement une page HTML qui contient les résultats du modèle
en utilisant l’objet response.
6
Design Pattern MVC
Serveur Web
Utilisateur
C
Controleur
(servlet avec
V M
doGet, doPost
Base de données
Vue Objets (MySQL,,)
(JSPs) Java
7
Environnement de développement
• Installer Eclipse
• TomCat serveur d’application
8
Environnement de développement
• WebContent contient les fichiers
html CSS JSP
• WEB-INF fichier de
configuration,
• Lib : bibliothèques
• Src contient les Classes java
9
Servlet
• Un Servlet est un composant JEE qui permet d’effectuer des
traitements du coté du serveur suite à une requete HTTP et envoyer
une réponse HTTP.
• Un Servlet est une classe Java qui hérite de HttpServlet et qui
redéfinie des méthodes comme doGet, doPost, doPut, doDelete,
doHead..
10
Servlet
• Il faut déployer un Servlet
• Pour déployer un Servlet il y a deux moyens :
• [Link]
• Ou en utilisant l’annotation @WebServlet
• Une classe java qui hérite de HttpServlet
• Elle Hérite deux Méthodes
• doGet : User charge une page Web
• doPost : User envoie un Formulaire
• Et d’autres
• [Link]
11
Servlet
• Pour que le serveur Tomcat reconnaisse un servlet, celle-ci doit etre
déclarée dans le fichier [Link] qui se trouve dans le dossier WEB-
INF.
• Le fichier [Link] s’appelle le descripteur de déploiement de Servlet.
• Ce descripteur doit déclarer principalement les éléments suivants :
• Le nom attribué à cette servlet.
• La classe du servlet.
• Le nom URL à utiliser pour faire appel au Servlet via le protocole HTTP.
12
Servlet Java
String nom=[Link]("nom"); lire le paramètre nom
PrintWriter out=[Link](); pour afficher les informations dans la page
web
13
1ère Méthode Déployer le Servlet
<servlet-name> nom de la Servlet
[Link] <servlet-class> nom de la classe de la servlet
<url-pattern> l’adresse URL
14
2ème Méthode déployer un Servlet
[Link]
15
2ème Méthode déployer un Servlet
16
Page JSP
17
forward
Transmettre la requête et la réponse à la page JSP et elle indique ou se trouve la vue(page JSP)
18
Variable entre Servlet et JSP
• [Link]("variable" ,message);
• Envoyer le contenu de la variable message sous le nom variable à la
page JSP
• [Link]("variable" );
• Permet de récupérer la variable
19
Variable entre Servlet et JSP
20
Exemple 2
21
Exemple 3
22
Expression Language
• Il est déconseillé d’utiliser du java et HTML mélangé dans la page JSP,
• Depuis la version 2.0 des JSP, il est possible de placer à n'importe quel
endroit d'une page JSP des expressions qui sont évaluées et
remplacées par le résultat de leur évaluation : les Expressions
Languages (EL) .
• Elles permettent de manipuler les données au sein d'une page JSP
plus simplement qu'avec les scriptlets Java ( ) .
• Utilisées conjointement avec des librairies de tags (telles que les JSTL
que nous verront plus tard), elles permettent de se passer totalement
des scriptlets.
23
Expression Language (EL)
• La syntaxe d’une EL est de la forme suivante :
${ expression }
• La chaîne expression correspond à l'expression à interpréter. Une
expression peut être composée de plusieurs termes séparés par des
opérateurs.
• – Ex :
${ (10 + 2)*2 } => 24
${ a && b } => a ET b
• Ou, comme nous avions vu pour les beans et les Objets:
${[Link]}
24
Java Standard Tag Library (JSTL)
• De nombreux frameworks facilitent le développement d'application
Java EE. JSTL propose une librairie standard pour la plupart des
fonctionnalités de base d'une application Java EE.
• La JSTL permet de développer des pages JSP en utilisant des balises
XML, donc avec une syntaxe proche des langages utilisés par les web
designers, et leur permet donc de concevoir des pages dynamiques
complexes sans connaissances du langage Java.
25
Java Standard Tag Library (JSTL)
• Utilisation:
• Pour utiliser les JSTL, il suffit de copier dans le répertoire WEB-INF/lib de votre
application WEB les fichiers [Link] et [Link] qui se trouvent dans le
répertoire lib de la distribution JSTL.
• Les JSTL disposent d’un ensemble de librairies de fonctionnalités différentes
• Pour inclure une librairie jstl à une page JSP il faut ajouter une déclaration en
tête de page (directive taglib) de cette façon:
• <%@taglib uri="[Link] prefix="c" %>
• Cette ligne permet d’inclure la librairie "core" de la JSTL qui contient les
actions de base d'une application web.
26
Java Standard Tag Library (JSTL)
27
Java Standard Tag Library (JSTL)
28
Java Standard Tag Library (JSTL)
29
Expression Language
30
JSTL ( JavaServer Standard Tag
Library)
• La JSTL nous permet d’éviter d’écrire du code java dans nous page JSP.
• Ce sont des balises XML
• C’est une bibliothèque à ajouter dans notre code JEE.
31
Les bibliothèques JSTL
• Composé de 5 sous bibliothèques :
• Core : gérer les variables, les conditions, les boucles…
• Format : formater les données.
• XML : Manipule des sonnées XML.
• SQL : écrire du code Sql
• Function : traiter les chaines de caractères.
32
Exemple JSTL
33
Rappel MVC
C
Controleur
(servlet avec doGet, doPost
V M
Vue Modèle Base de données
(JSPs) (Objets métier) (MySQL,,)
34
DAO
M DAO
Modèle Data Access Object Système de stockage
(Objets métier)
35
DAO
Implémentation
DAO A
Système de stockage
M DAO
Modèle
(Objets métier) Implémentation
DAO B
Système de stockage
36
Cas utilisant Design Pattern MVC
C DAO M
Utilisateur [Link]
a [Link] [Link]
[Link]
a
[Link]
V M
[Link] [Link]
Système de stockage
37
Classe Etudiant
[Link]
38
Classe Interface
[Link]
39
Classe d’implémentation Métier
[Link]
40
Classe SingletonConnection
[Link]
41
Servlet
[Link]
va
42
Classe Modèle
[Link]
a
43
Page JSP
[Link]
44
Injection des dépendances
• Une application qui n’évolue pas meurt
• Une application doit être fermée à la modification et ouverte à
l’extension.
• Une application doit s’adapter aux changements.
• Des classes faiblement couplées.
• Programmer une interface et non une implémentation
45
Couplage fort
• Quand une classe A est liée à une classe B
on dit que la classe A est fortement
couplée avec la classeB.
A B • La classe A ne peut fonctionner qu’en
b:B présence de la classe B.
• Si une nouvelle version de la classe B ( B2)
Calcul():double getValue():double est créée on est obligé de modifier dans la
classe A.
• Modifier une classe implique :
• Il faut disposer du code source.
• Il faut recompile, déployer et distribuer la
nouvelle application aux clients.
• Ce qui engendre un problème au niveau de la
maintenance de l’application.
46
Exemple de couplage fort
Presentation
MetierImpl DaoImpl
Metier:MetierImpl
dao:DaoImpl
main(String[] a):void
Calcul():double getValue():double
47
Couplage Faible
• Pour utiliser le couplage faible, nous devons utiliser
les interfaces.
• Considérons une Classe A qui implémente l’interface
IA IA et une Classe B qui implémente l’Interface IB.
IB
• Si la Classe A est liée à l’interface IB par une
association on dit que la Classe A et la Classe B sont
liées par un couplage faible.
Calcul():double • Cela Signifie que la Classe B peut fonctionner avec
getValue():double
n’importe quelle Classe qui implémente l’interface IA.
• En effet la Classe B ne connait que l’Interface IA, de
ce fait n’importe quelle Classe implémentant cette
AImpl interface peut être associée à la Classe B sans qu’il
BImpl soit nécessaire de modifier quoi que ce soit dans la
b:IB Classe B.
• Avec le couplage faible, nous pourrons créer des
Calcul():double application fermée à la modification et ouverte
getValue():double àl’extension.
48
Exemple Couplage Faible
Presentation IMetier IDao
Metier:MetierImpl
main(String[] a):void
Calcul():double getValue():double
MetierImpl
DaoImpl
b:IB
Calcul():double
getValue():double
49