Introduction à Java EE et son Architecture
Introduction à Java EE et son Architecture
Java EE
Sonda AMMAR
[Link]@[Link] 1 2
Plan Introduction
1. Introduction Java Enterprise Edition (Java EE) est une norme proposée par
Sun visant à définir un standard de développement
2. Qu’est ce que Java EE?
d’applications d’entreprises multi-niveaux basées sur des
3. Architecture Java EE composants,
4. Développement côté serveur Aujourd’hui Java EE est devenue la plateforme de choix des
5. Echanges entre client et serveur grandes entreprises pour développer des applications web, et
pour créer des applications distribuées,
6. Le serveur d’applications
Java EE est aussi très utilisée dans la finance (banque).
7. Le modèle MVC
Java EE est conçue comme un langage, une Java EE est basée sur le langage de développement Java.
plateforme de développement d’application web. J2EE est basé sur J2SE (Java 2 Standard Edition) qui contient les
API de base de Java.
On peut comparer Java EE à PHP, Django ou a
Java permet de développer des applications.
[Link] Java EE est un concurrent de ces
Ajouter un ensemble de bibliothèques qui ajoutent des
langages.
fonctionnalités à Java.
Java EE permet de développer des sites web solides, robustes et
bien structurés
Ensemble de
Java EE Java bibliothèques
5 6
J2EE est une plate-forme fortement orientée serveur pour le Les technologies essentielles pour développer une application Web
développement et l'exécution d'applications distribuées. Servlets : traiter les requêtes des utilisateurs
Les JSP (Java Server Page) : constituer un rendu dynamique
J2EE est composée de deux parties essentielles :
L’API JDBC (Java DataBase Connectivity) et l’API JPA (Java Persistence API) : gérer
les persistances des données
Un ensemble de spécifications pour une infrastructure dans laquelle JSF (Java Server Face): framework orienté composants permettant de cadrer
s'exécutent les composants écrits en Java : un tel environnement l’architecture d’une application Web
se nomme serveur d'applications. Struts 2 : framework orienté actions permettant de cadrer l’architecture d’une
application Web
Un ensemble d'API qui peuvent être obtenues et utilisées
L’API JAX-RS : mise en place de Web services REST (Representational state
séparément. Pour être utilisées, certaines nécessitent une transfert) pour les systèmes hypermédias distribués
implémentation de la part d'un fournisseur tiers L’API WebSocket : établir une communication bidirectionnelle entre un client et le
serveur
7 8
Tomcat 8 : Le déploiement d’applications sur un serveur d’application
Architecture Java EE Architecture Java EE
JSP JCA les conteneurs. Les clients n'accèdent pas directement aux
Client EJB
Java
Système
composants mais sollicitent le conteneur pour les utiliser.
EJB Mail
d’information
Servlet
…
EJB
9 10
Client
Serveur Web Serveur d’application
Que ce passe t-il quand on va visiter un site web qui est codé en
JavaEE permet une séparation claire entre :
Java EE?
l’interface homme-machine
Le visiteur va demander une page web au serveur.
les traitements métiers
Le serveur possède le code en code Java (Java EE), il génère une
les données
page HTML qu’il retourne au visiteur
11 12
Echanges entre client et serveur Echanges entre client et serveur
Le serveur d’applications
Requête
Client Serveur
Réponse
Etablissement connexion
Requête 1
Réponse 1 Temps
Client Requête 2 Serveur
Réponse 2
15 16
Fermeture connexion
Le protocole HTTP Les URI (Uniform Resource Identifier)
GET
<Méthode> <URI> HTTP / <Version> Demande pour obtenir des informations
[ < Champ d’entête > : < Valeur> ] Envoie des informations d’un formulaire
HEAD
… Demande pour obtenir des informations concernant l’URI
*** ligne vide *** POST
Envoi de données (contenu du formulaire vers le serveur, …). Ces données
[ Corps de la requête ]
sont situées après l’entête et un saut de ligne.
PUT
Mise à jour de la ressource à l’URI indiqué.
DELETE
Suppression des données désignées par l’URI
19 20
Requête HTTP Requête HTTP
Upgrade-Insecure-request: Indique au client que l’on préfèrera toujours une Cookie: On retrouve ici le cookie (une série de données) qui avait été
reconnection HTTPS si jamais celui-ci est en train de migrer entre HTTP et HTTPS précédemment enregistré sur le navigateur de l’utilisateur et qui est renvoyé
User-agent: Il s’agit de la chaine de caractère permettant d’identifier formellement le au serveur lors de chaque requêtes.
navigateur qui a généré la requête; on y trouve sa version, son développeur, … If-Modified-Since: Permet au serveur de renvoyer la réponse “304 Not
Accept: Indique le type du contenu (de média) que le client est en mesure d’accepter. modified” si jamais la page n’a pas été modifiée depuis la date indiquée
21 22
Types de dialogues
Récupération d’un document
Méthode GET
Soumission d’un formulaire
Méthode GET ou POST
Récupération et gestion de ressources
Méthodes GET, POST, PUT et DELETE
Gestion de proxy/cache
Méthode HEAD (récupération d’informations sur la ressources).
23 24
La réponse La réponse HTTP
Structure Structure
25 26
27 28
La réponse HTTP La réponse HTTP
Les codes du statut Les codes du statut
Chaque réponse est associée à un code de statut sur trois digits. Les 5 catégories:
Il permet d’indiquer au client l’état de la réponse et si une Les réponses informatives: codes d’informations indiquant que la requête
requête HTTP a été exécutée avec succès ou non . Le client peut initiée par le navigateur se poursuit
ainsi réagir en conséquence. Les réponses de succès: codes de réussite renvoyés lorsque la demande
Ces codes sont classés en 5 catégories. du navigateur été reçue, comprise et traitée par le serveur
Les réponses informatives (100 - 199), Les messages de redirection: codes de redirection renvoyés lorsqu’une
Les réponses de succès (200 - 299), nouvelle ressource a été substituée à la ressource demandée,
Les messages de redirection (300 - 399), Les erreurs du client: codes d’erreur client indiquant qu’il y a eu un
Les erreurs du serveur (500 - 599). Les erreurs du serveur: codes d’erreur du serveur indiquant que la
demande a été acceptée, mais qu’une erreur sur le serveur a empêché
29
l’exécution de la demande. 30
Le cache Le cache
Constats Vue d’ensemble
37 38
39 40
La gestion du cache La gestion du cache
Attributs Description
Lors des requêtes successives vers la même ressource, le
Cache-Control Plusieurs valeurs peuvent êtres attribuées:
private : la réponse ne peut pas être mise en cache par mécanisme de cache peut entrer en action
un intermédiaire partagé par plusieurs clients S’il n’y avait pas de cache possible la requête est envoyée comme si
public : la réponse peut être mise en cache par
n’importe quel intermédiaire c’était le premier appel
max-age : indiquer le temps en secondes durant le quel Dans le cas où les attributs de réponse indiquaient une possible mise en
la ressource en cache est d’actualité
cache :
Pragma Indiquer que la ressource ne doit pas être en cache
Le client peut utiliser l’attribut Expires ou la directive max-age (Cache-
Etag Associer un id à la ressource qui change à chaque fois où
la ressource change. Control) de la ressource mise en cache s’ils sont renseignés. Si la
Expires Définir une date de fin de validité de la ressource mise ressource est toujours d’actualité aucune requête n’est effectuée.
en cache Le client peut utiliser la valeur des attributs Etag et Last-Modified
Last-Modified Définir la date de dernière modification de la ressource
pour interroger le serveur pour voir s’il a une ressource plus récente.
41 42
L’attribut [Link] demandant au client de favoris et que ces derniers n’utilisent pas HTTPS (la version
s’authentifier (Login/Pwd) sécurisée du protocole HTTP) cela représente un réel danger,
Login:Pwd envoyés via Authorization au travers d’une nouvelle car toute requête peut être interceptée ! et dans une requête
requête visant la même ressource. POST de transmission de formulaire vos données sont lisibles!
Si la requête doit passer par un proxy pour accéder à la
ressource le proxy demande au client de s’authentifier (selon
sa configuration) Proxy-Authenticate et Proxy-Authorization
43 44
Les types de médias Les types de médias
MIME (Multipurpose Internet Mail Extensions) : définir le type Types de Description Types de médias Description
médias
de contenu dans le corps de la requête et de la réponse. application/java Contenu JavaScript
text/plain Contenu textuel brut script
Attribut Content-Type text/html Contenu HTML application/octe Contenu binaire non typé
Les navigateurs, dans leurs version actuelles, sont capables t-stream
text/xml Contenu XML
application/pdf Contenu au format PDF
d’interpréter le contenu d’une réponse sans passer par Content- text/csv Contenu CSV
application/json Contenu au format JSON
Type. text/css Contenu CSS
(JavaScript Object Notation)
image/jpeg Image au format JPEG
Accept permet au client d’indiquer au serveur quel type de application/xml Contenu au format XML
image/png Image au format PNG
contenu il accepte pour la réponse.
image/svg+xml Contenu SVG permettant
Un type de média est composé d’un type et un sous-type de faire du dessin vectoriel
{type} / {sous-type} video/mpeg Vidéo au format MPEG
video/mp4 Vidéo au format MP4
6 types : text, image, video, application, audio et multipart
45 46
Rappel
47 48
Serveur d’applications Serveur d’applications
Exemple Exemple
51 52
Architecture J2EE Architecture J2EE
Niveau web
53 54
Couche web
Création de ressources web
à l’aide de programmes spécifiques (Servlets java)
à l’aide de langages étendant HTML pour ajouter des parties
dynamiques calculées par le serveur, type JSP
55 56
Serveur d’applications Serveur d’applications
Une fois une requête HTTP est lue et analysée, il faut traiter son
contenu et renvoyer une réponse au client,
code qui indique le traitement à faire suite à l’arrivée d’une requête.
Composant qui se charge d’exécuter le code + faire le travail d’un
serveur HTTP Serveur d’applications
Serveur d’applications = serveur HTTP + gestion d’objets de
diverses natures Conteneur
Client Serveur d’applications
Requête HTTP
Conteneur
Serveur
Réponse HTTP HTTP
57 58
Travailler à plusieurs contributeurs sur un même Java EE n’impose aucun arrangement particulier de
projet/application (travail en équipe) votre code.
Problème: code mal organisé, difficulté de réutilisation (très
Maintenir et corriger une application créée par
difficile de trouver une fonction ou portion de code), difficulté
d’autre programmeur/équipe
de modification pour mise à jour,
Faire évoluer une application créée par d’autre
programmeur/équipe
59 60
Modèle de conception pour JEE Le modèle MVC
Java EE n’impose aucun arrangement particulier de Il découpe l’application en couches distinctes et de ce fait
votre code. impacte très fortement l’organisation du code.
Problème: code mal organisé, difficulté de réutilisation (très Le traitement, le stockage et la mise à jour des données de
difficile de trouver une fonction ou portion de code), difficulté l’application doit être contenu dans la couche Modèle (M du MVC).
de modification pour mise à jour, L’interaction avec l’utilisateur et la présentation des données
Solution: un Design pattern MVC (Modèle, Vue, Contrôleur) (mise en forme, affichage) doit être contenu dans la couche Vue (V
Adopter une architecture standard dans laquelle tout du MVC).
développeur peut se situer Modèle MVC (Modèle-Vue- Le contrôle des actions de l’utilisateur et des données doit être
Contrôleur) contenu dans la couche Contrôle (C du MVC).
61 62
Quand on utilise MVC, on découpe le code en trois parties: Avec Java EE chacun de ces éléments possèdent un nom:
Contrôleur
Le visiteur qui envoi une requête HTTP, la transmet au serveur Le contrôleur est appelé Servlet. La servlet est
d’applications
Visiteur Servlet
alors utilisée pour faire le routage des informations
Le serveur d’applications transmet la requête au contrôleur
(à voir dans la prochaine partie).
Le contrôleur est une partie du code qui permet de faire le Modèle
Le modèle est en générale géré par des objets
routage de l’information (décide qui va récupérer l’information et Serveur
Java (des JavaBeans), Le modèle peut être amené à Objets Java
ensuite la traiter)
Le contrôleur appelle le modèle qui contient les informations
communiquer avec une base de données pour stocker
Base de
structurées de nos données et qui permet de faire des calculs. les informations. données
Contrôleur
Le modèle envoi ces informations au contrôleur La vue est gérée par des pages JSP qui utilisent le
La vue génère ensuite une page web (une vue qui représente la code HTML et du code spécifique en Java. Cette vue Vue
page final envoyé au visiteur) Vue Modèle
est retournée par le contrôleur au visiteur.
Pages JSP
La vue est alors renvoyée au contrôleur et par la suite au visiteur 63 64
Le modèle MVC avec JEE Les Framework Java EE
Clients
Serveur Un Framework Java EE est un ensemble de bibliothèques
structuré en MVC:
Requête HTTP Contrôleur Framework
JSF
(Servlets) Java EE
Struts
Spring
Ensemble de bibliothèques
Réponse HTTP Vue HIBERNATE
Modèle structuré en MVC
(pages JSP) (objets Java) Spring Boot
65 66
Application Web
Chapitre
Une application web est composée
de Servlets/JSP
de bibliothèques de classes,
de ressources statiques (images, HTML, . . . ),
un descripteur de déploiement (fichier XML)
67 68
J2EE et les applications Web Que sont les Servlets ?
69 70
71 72
Structure des fichiers d’une application Web Servlet: fonctionnement
sous Eclipse
/[Link]
app> et </web-app>
73 74
<servlet> Correspondre la servlet créée à une URL pour qu’elle soit joignable
<servlet-name>Test</servlet-name> par les clients!
<servlet-class>[Link]</servlet-class> <servlet-mapping>
</servlet> <servlet-name>Test</servlet-name>
<url-pattern>/toto</url-pattern>
<servlet> </servlet-mapping>
<servlet-name>Test</servlet-name>
<servlet-class>[Link]</servlet-class>
<servlet-name> permet de préciser le nom de la servlet . Cette
<description>Ma première servlet de test.</description> information doit correspondre avec le nom défini dans la
<init-param> précédente section.
<param-name>auteur</param-name>
<url-pattern> permet de préciser la/les URL avec lesquelles la
<param-value>Folen</param-value>
</init-param> servlet sera accessible.
</servlet> 75
Pourquoi un pattern et pas simplement une URL 76
Servlet: Mise en service Servlet: Mise en service
Réponse
Résultat: 2 cas HTTP/1.1 200 OK
Server: Apache-Coyote/1.1
1) affichage d’une page blanche (le cas de l’exemple) Content-Lenght:0
Date: Mon, 25 Sep 2017 [Link] GMT
requête terminée avec succès
2) code / message d’erreur HTTP Requête
GET /test/toto HTTP/1.1
Host: localhost:8080
User-Agent: Mozilla/5.0
Accept: text/html, application/xhtml+xml, application/xml; q=0.9, */*; q=0.8
Accept-Language: fr, fr-fr; q=0.8, en-us;q=0.6,en;q=0.4,zh-cn;q=0.2
Accept-Encoding: gzip, deflate
Cache-Control: max-age=0
avant la servlet ayant une valeur plus grande. En d'autres termes, public class Test1 extends HttpServlet {
public void doGet (HttpServletRequest request, HttpServletResponse
le conteneur charge les servlets par valeur croissante. response) throws ServletException, IOException{
}
La valeur 0 sera chargée avant les valeurs 1, 2, 3, etc.
}
N < 0 : la servlet sera chargée lors de l’envoi de la première
requête. 81 82
83 84
Servlet API Servlet API
85 86
89 90
Développer une application Web basée sur une Servlet pour vérifier
si un utilisateur est éligible au vote ou non.
Prenez un formulaire HTML et obtenez des commentaires de
l’utilisateur.
Sur la base de la vérification de l’âge saisie, il / elle est éligible
pour voter ou non? Affichez le message approprié à l’utilisateur
final. Supposons que 18 ans est l’âge minimum pour voter.
Mise en œuvre d'une servlet : Servlet Mise en œuvre d'une servlet : le fichier de
déploiement
Pour que chacune des servlets récupèrent les paramètres, il est getServletContext (): elle retourne un objet de type
nécessaire de solliciter l'objet correspondant au contexte de la ServletContext.
servlet (contexte de l'application Web) à l'aide de la méthode getContextPath (): chaîne de caractères correspondant à l’URL
getServletContext(). getAttribute (…) et setAttribute(…) : lire et écrire un attribut
Cet objet délivre les paramètres initiaux de l'application Web au niveau du contexte d’application.
grâce à la méthode getInitParameter().
getNamedDispatcher(…): retourne un objet de type
RequestDispatcher permettant d’accéder à une autre servlet ou
String param = getServletContext().getInitParameter(‘param_name’);
une JSP
97 98
Méthode Rôle
L’objet de type HttpServletRequest passé en
getScheme () Protocole utilisé (http/https)
paramètre des méthodes doXXX() permet d’accéder getServerName () Nom de l’hôte de la machine (nom domaine, …)
getServerPort () Port utilisé par la req HTTP
aux informations de la requête
getContextPath () Nom de l’application (nom du projet)
getServletPath () Chemin d’accès à la servlet
getQueryString () Chaîne de carac correspondant à tous les param passés à la req
getRemoteAddr () @ IP de l’émetteur de la req HTTP
getRemoteHost () Nom de l’hôte de l’émetteur de la req HTTP
getLocalAddr () @ IP de la carte réseau du serveur par la quelle la req HTTP a été
reçue
getLocalName () Le nom d’hôte de la carte réseau du serveur par la quelle la req
HTTP a été reçue
101 102
getLocalPort () Le port sur lequel a été reçue la req HTTP
Méthode Rôle
getcharacterEncoding () L’encodage utilisé pour le corps de la req ou null si la req ne Elément primordial pour traiter une réponse
définit pas d’encodage
Les informations saisies dans un formulaire sont envoyées sous
getContentLength () et Taille en octet des informations situées dans le corps de la req ou
getContentLenghtLong () -1 si la taille n’est pas connue forme de paramètres au niveau de la req.
getContentType () Retourne le type de média ou null si le type n’est pas connu Req de type GET: URLValide?parametre1=val1¶metre2=val2…
getLocale () Retourne un objet de type [Link] (Langues à utiliser au
Req de type POST: les paramètres sont structurés de la même manière
niv du navigateur)
getMethod () Méthode utilisée par la req (GET, POST, …) mais dans le corps de la requête.
getHeader (String name) Retourne la valeur de l’entête passée en paramètre Dans un formulaire HTML
getHeaders (String name) Retourne la valeur de l’entête passée en paramètre le nom du paramètre attribut name de la balise HTML
sous la forme d’une collection (Accept-Language)
la valeur valeur de saisie pour une zone de texte
getIntHeader (String name) Valeur de l’entête sous la forme d’un entier ou -1 si l’entête n’est
pas présent value pour les balises de sélection
getDateHeader (String name) Pour l lecture des paramètres comme If-Modified-Since
getHeaderNames (String name) Collection de l’ensemble des en-têtes présents sur la req. 103 104
Lecture des paramètres dans la servlet Lecture des paramètres : Exemple
<!DOCTYPE html>
Objet HttpRequestServlet <html>
getParameter (String name) <head>
…
getParameterValues (String name) </head>
getParameterNames () <body>
<form method= "get">
getParameterMap () : objet de type Map <String, String[]> <input type = "text" name = "inputText"/>
<select name="selectSport" multiple="multiple">
<option value="1">Badminton</option>
<option value="2">Squash</option>
<option value="3">Tennis</option>
</select> <br/>
<input size="50" type="text "value="input sans attribut name. Pas de paramètre
créé"/> <br/>
<input type="submit" value="Valider"/>
</form>
</body>
105 106
</html>
Ajouter un nouveau terrain et les sports praticables sur Formulaire pointe vers l’URL Projet_servlet_3_1/AjouterTerrain
celui-ci
<!DOCTYPE html> URL Associée à la servlet AjouterTerrain
Formulaire formulaireAjoutTerrain
<html>
<head> public class AjouterTerrain extends HttpServlet
… {
</head> protected void doPost (HttpServletRequest request,
<body> HttpServletResponse response) throws ServletException, IOException {
<form method= "post" action="/Projet_servlet_3_1/AjouterTerrain"> String codeTerrain = [Link] ("codeTerrain");
Code: <input type="text" name="codeTerrain"/> <br/> String [] sportsAutorises = [Link]
Sports autorisés: ("sportsAutorises");
<select name="sportsAutorise"multiple="multiple"> [Link] ("Code du terrain :" +codeTerrain);
<option value=1>Badminton</option> for (String codeSport:sportAutorises)
<option value=2>Squash</option>
{
<option value=3>Tennis</option>
[Link]("Code sport autorisé : "+
</select> <br/>
<input type="submit" value="Valider"/>
codeSport);
</form> }
</body> }
107 108
</html> }
L’en-tête de la réponse Corps de la réponse
HttpServletResponse
//Les en-têtes
[Link] (HttpServletResponse.SC_ok).
[Link]("text/html");
Méthode Rôle [Link]("UTF-8");
setBufferSize (int size) définir la taille souhaitée pour le tampon contenant le //Le corps
corps de la réponse PrintWriter pw = [Link] ();
[Link] ("<!DOCTYPE html>");
getBuffersize () Obtenir la taille actuelle du tampon [Link] ("<html>");
reset () Efface la réponse (entête et corps) [Link] ("<head>");
[Link] ("<meta charset=\"UTF-8\">");
resetBuffer () Efface le contenu du corps [Link] ("<title>Confirmation ajout d’un terrain</title>");
isCommited () Connaitre si la réponse a déjà commencé à être [Link] ("</head>");
[Link] ("<body>");
retournée au client
[Link] ("Confirmation ajout du terrain" + [Link]());
flushBuffer () Forcer l’envoi au client du contenu écrit au niveau de la [Link] ("</body>");
réponse [Link] ();
[Link] ();
//Réalisation du traitement métier (dans les classes du projet)
111 Terrain terrainAjoute = new Terrain (codeTerrain, [Link]); 112
Remarques Remarques
113 114
Package [Link]
Une annotation est écrite directement dans le code, au sein d'une
classe ou d'une méthode.
L'information associée à un élément du code est accessible et
visible directement n'est pas nécessaire de se référer à des WEB-INF/[Link]
données écrites dans des fichiers externes
Syntaxe sans paramètres:
Constituée uniquement d'un mot-clé précédé du signe @: @Override
Syntaxe avec paramètres
@WebServlet( name="TestServlet", urlPatterns = {"/test", "/ok"} )
[Link]
115 116
Les annotations: Exemple 2 Arborescence d’une archive WAR
WEB-INF/[Link]
[Link]
contenu applicationweb :
117
cd ApplicationWeb ; jar cf [Link] * 118