0% ont trouvé ce document utile (0 vote)
53 vues30 pages

Introduction à Java EE et son Architecture

Ce document décrit ce qu'est Java EE, y compris son architecture et les technologies clés impliquées dans le développement d'applications Java EE. Java EE est une norme pour le développement d'applications d'entreprise multi-niveaux basées sur des composants en Java.

Transféré par

asmachaoui0403
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
53 vues30 pages

Introduction à Java EE et son Architecture

Ce document décrit ce qu'est Java EE, y compris son architecture et les technologies clés impliquées dans le développement d'applications Java EE. Java EE est une norme pour le développement d'applications d'entreprise multi-niveaux basées sur des composants en Java.

Transféré par

asmachaoui0403
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Chapitre

Java EE

Qu’est ce que 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

8. Les Framework Java EE 3 4


Développement côté serveur Qu’est ce que Java EE?

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

Qu’est ce que Java EE? Qu’est ce que Java EE?

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

JavaEE est une architecture 3-tiers :


Pour exécuter des composants de natures différentes :
Tiers présentation: permet le dialogue avec l'utilisateur, affichage des données
J2EE définit des conteneurs pour chaque composant.
Tiers métier: permet l’encapsulation des traitements (dans des EJB ou des
J2EE définit pour chaque composant des interfaces qui leur permettront
JavaBeans), gestion du métier de l’application
de dialoguer avec autres composants lors de leur exécution.
Tiers donnée: permet le stockage et la persistance des données
Conteneur Présentation Métier Données Les conteneurs permettent aux applications d'accéder aux
client
Conteneur APIs ressources et aux services en utilisant les API.
Base de
web
Conteneur JDBC
données Les appels aux composants se font par des clients en passant par
d’EJB Relationnelle

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

Architecture Java EE Echanges entre client et serveur

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

Le visiteur envoi une requête HTTP au serveur


Le visiteur va demander une page web au serveur.
d’applications. Client
Le visiteur saisie l’URL dans son navigateur Le serveur d’applications est découpé en deux Utilisateur
Le navigateur envoie une requête HTTP au serveur parties:
Requête Réponse
le serveur HTTP reçoit la requête HTTP qui sera HTTP
Le serveur possède le code en code Java (Java EE), il génère une page HTTP
lue, découpée, analysée et envoyée ensuite au
HTML qu’il retourne au visiteur conteneur
Serveur HTTP
Le serveur exécute la requête pour générer une page HTML. Le conteneur permet d’exécuter le code Java EE Serveur
Le serveur retourne une réponse HTTP au visiteur Le serveur d’applications (Apache Tomcat) renvoi la d’applications

réponse HTTP au visiteur Conteneur


Le serveur exécute la requête pour générer une
HTTP:// HTML page HTML.
Le serveur retourne une réponse HTTP au
13 14
visiteur

Echanges entre client et serveur Le protocole HTTP

Le protocole HTTP (Hyper Text Transfer Protocol) est indispensable


dans la réalisation d’application Web.
Le principe repose sur un couple requête/réponse

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)

URI est une chaîne de caractères identifiant une ressource sur un


réseau
URI permet de :
localiser une ressource (URL: Uniform Resource Locator)
Exemple : [Link]
Nommer une ressource (URN: Uniform Resource Name)
Exemple : urn:isbn:0-395-36341-1
Faire les deux en même temps (URL + URN)
Le terme URL est utilisé dans le développement Web pour identifier
et localiser une ressource
Structure d’une URL HTTP
"[Link] ["/"+ chemin ressource+["? "+paramètres]]
17 18

Format d’une requête HTTP Méthodes HTTP

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

Type de la requête : GET ou POST


Referer : Définit l’URL de la page à partir de laquelle la ressource est
Host : nom du domaine du serveur auquel on envoie la requête, le port s’il est différent
demandée.
de 80
Accept-encoding: Spécifie le type de compression du contenu que le client (le
Connection : comportement de la connexion
navigateur) peut traiter. Le contenu est en effet souvent compresser pour
Cache-control: Cette propriété indique au cache du serveur s’il doit recharger la page à
chaque reprise ou suivant un délai précis optimiser le temps de transfert !

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

Dialogue HTTP Exemple de requête HTTP

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

L’entête de la réponse peut être découpé en 2 parties:


Première ligne: statut de la réponse

- version du protocole HTTP (HTTP/1.1)

- Le code du statut (200)

- L’interprétation textuelle du code de statut (ok)


Autres attributs de réponse : permettent au serveur de passer
des informations complémentaires.
Le corps de la réponse: partie utilisée par le client pour
l’affichage, il peut prendre plusieurs types.

25 26

Exemple de réponse HTTP La réponse HTTP

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 client (400 - 499), problème avec la demande.

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

La réponse HTTP La réponse HTTP


Les codes du statut Les codes du statut

Code Libelle Description


Code Libelle Description
100 Continue Continue
400 Bad Request Requête incorrecte
101 Switching Protocols Changement de protocole
401 Unauthorized Le client doit s’authentifier pour accéder à la
200 OK OK
ressource
201 Created Créé
403 Forbidden Le client n’a pas le droit d’accéder à la ressource
202 Accepted Acceptée
404 Not Found Ressource non trouvée
204 No Content Req traitée avec succès mais aucune info en retour
405 Method Not Allowed Type de requête non autorisé
206 Partial Content Contenu partiel
500 Internal Server Error Le serveur a rencontré une erreur inattendue
300 Multiple Choices La requête a plusieurs réponses possibles. L'utilisateur
501 Not Implemented Le serveur ne sait pas traiter le type de requête pour
doit choisir l'une d'entre elles
la ressource visée
301 Moved Permanently La ressource a changé d’adresse de façon permanente
503 Service Unavailable Le serveur n’est pas capable de répondre à cause
302 Found La ressource a changé d’adresse temporairement d’une surcharge temporaire ou d’une maintenance
304 Not modified La ressource n’a as changé. Le client peut utiliser la
version en cache 31 32
La réponse HTTP C’est quoi un cache ?
Les attributs de réponse

Les attributs génériques : même attributs que celles de la requête


Les attributs de réponse: entête d’une réponse. Ils ne sont pas
tous obligatoires.
Attribut Description
Content-Encoding Définit la méthode de compression du corps de
la réponse
Content-Language Définit la langue utilisée dans le corps de la
réponse
Location Définit l’URL de la ressource lors d’une
redirection
Server Définit les caractéristiques du serveur ayant
généré la réponse
Set-Cookie Permet au serveur d’envoyer des cookies au
33 34
client.

Le cache Le cache
Constats Vue d’ensemble

Le point de vue classique suppose que la mémoire est rare et


chère
La mémoire ne coute pas cher, c’est la vision moderne
Le cache est devenu un élément important dans les applications
d’aujourd’hui
L’accès aux données est simplifié par les caches
Accéder plus rapidement à la copie que d’accéder plus lentement
à la ressource
On parle de durée de vie des objets
Éviter la répétition des appels coûteux
Une stratégie de cache doit être bien définie
35 36
Le cache Le cache
Cache passif (Push) Cache actif (Pull)

37 38

Le cache La gestion du cache


Cache en JAVA

Elément essentiel dans le développement Web


Améliorer les performances ou palier à des défaillances en
limitant le transfert de données qui n’ont pas été modifiées.
Le protocole HTTP met à disposition du client et du serveur un
ensemble d’attributs pour dialoguer et pour savoir si une
ressource en cache est toujours d’actualité ou obsolète.
Exemple: Un client faisant une requête de type GET
Si la requête correspond à la première demande alors la
ressource est retournée avec en en-tête de réponse des attributs
indiquant les possibilité de mise en cache.

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

Gestion de l’authentification Gestion de l’authentification

Lorsque une ressource est protégée et nécessite une


Remarque
authentification auprès du serveur pour pouvoir y accéder, un
couple d’attributs est utilisé. Lorsque vous transmettez des données sensibles sur vos sites

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

Chapitre Communication client serveur ?


Côté client : navigateur
Côté serveur : serveur HTTP
L’écoute des informations arrivées sur le port utilisé par le
protocole HTTP, le port 80 et examiner chaque requête
entrante.
Le modèle MVC

47 48
Serveur d’applications Serveur d’applications

JavaEE est une architecture 3-tiers :


Tiers présentation: permet le dialogue avec l'utilisateur, affichage des données Processus
Tiers métier: permet l’encapsulation des traitements (dans des EJB ou des
JavaBeans), gestion du métier de l’application
Tiers donnée: permet le stockage et la persistance des données

Le serveur d’applications fournit des services spécialisés et


récurrents aux applications 49 50

Serveur d’applications Serveur d’applications

Exemple Exemple

51 52
Architecture J2EE Architecture J2EE

Niveau web

53 54

Architecture J2EE Serveur d’applications

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

Les ressources sont accessibles pour le client à l’aide


d’un simple navigateur → portabilité, simplicité

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

Modèle de conception pour JEE Modèle de conception pour JEE

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

Le modèle MVC Le modèle MVC


Noms des éléments

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

Il existe plusieurs Framework Java EE pour pouvoir développer avec MVC:

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)

Niveau Web : Les Servlets

67 68
J2EE et les applications Web Que sont les Servlets ?

Composant Web : Servlets et JSP Application java


Application Web : ensemble de composants web, bibliothèques Exécutée côté serveur
et ressources statiques dont l'organisation est décrite dans un Traitement de requêtes HTTP et génération de réponses
descripteur de déploiement dynamiques
Conteneur Web : Quelques avantages :
environnement d'exécution et de distribution des composants portabilité (java)
web et des ressources statiques rapidité (la Servlet est chargée une seule fois)
gère le cycle de vie des Servlets (instanciation, initialisation,…)

69 70

Fonctionnement des Servlets Classe HttpServlet

Classe abstraite  passer par une servlet qui en


hérite
Propose les méthodes Java nécessaires au
traitement des requêtes et réponses HTTP
doGet () pour gérer la méthode GET
doPost () pour gérer la méthode POST
doHead () pour gérer la méthode HEAD

71 72
Structure des fichiers d’une application Web Servlet: fonctionnement
sous Eclipse

Servlet existe --> comment l’associer à l’application?

Associer la servlet à une URL  [Link]

/[Link]

Le contenu est impérativement placé entre <web-

app> et </web-app>

73 74

Servlet: définition Mapping de la servlet

<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

Surcharger doGet () de la classe HttpServlet


package [Link]
import [Link];
import [Link];
import [Link] ;
import [Link] ;
import [Link];
public class Test1 extends HttpServlet {
public void doGet (HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException{
}
La méthode doGet () de la classe mère HttpServlet !! }
77 78

Servlet: Mise en service Servlet: Résultat

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

Remarque: <load-on-startup> N </load-on-startup>


79 80
<load-on-startup> Servlet: Mise en service

La servlet est chargée lors de la première requête import [Link];


import [Link];
Utilisation de <load-on-startup> N </load-on-startup> import [Link] ;
import [Link] ;
N >=0 : la servlet ayant la valeur la plus petite sera chargée
import [Link];

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

Servlet API Servlet API

Les packages [Link] et [Link] représentent Les interfaces du package [Link] :


des interfaces et des classes pour l'API de servlet Servlet Filter
Le package [Link] contient de nombreuses interfaces et ServletRequest FilterConfig
classes utilisées par le servlet ou le conteneur Web. Celles-ci ne ServletResponse FilterChain
sont spécifiques à aucun protocole. RequestDispatcher ServletRequestListener
Le package [Link] contient des interfaces et des ServletConfig ServletRequestAttributeListener
classes responsables uniquement des requêtes http. ServletContext ServletContextListener
SingleThreadModel ServletContextAttributeListener.

83 84
Servlet API Servlet API

Les interfaces du package [Link] : Les classes du package [Link] :


HttpServletRequest HttpServlet
HttpServletResponse Cookie
HttpSession HttpServletRequestWrapper
HttpSessionListener HttpServletResponseWrapper
HttpSessionAttributeListener HttpSessionEvent
HttpSessionBindingListener HttpSessionBindingEvent
HttpSessionActivationListener

85 86

Servlet API Servlet API

L’interface Servlet fournit un comportement commun à


tous les servlets. Elle définit les méthodes que tous les
servlets doivent implémenter.
3 méthodes de cycle de vie qui sont utilisées pour initialiser le
servlet, traiter les requêtes et détruire le servlet:
public void init(ServletConfig config)
public void service(ServletRequest request,ServletResponse response)
public void destroy()

2 méthodes de non-cycle de vie


public ServletConfig getServletConfig()
87 public String getServletInfo() 88
Cycle de vie de Servlet Cycle de vie de Servlet

89 90

Mise en œuvre d'une servlet Mise en œuvre d'une servlet : le fichier


appelant

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

Vérification de formulaires Contexte d’application

Application Web disposant de plusieurs servlets


Données manquantes
L'élément <init-param> défini dans le descripteur de déploiement,
Champ manquant dans le formulaire est associé à une servlet en particulier.
getParameter retourne null
Placer les mêmes paramètres d'initialisation <init-param> pour
Champ renvoyé vide
chacune de ces servlets ?
getParameter retourne une chaine vide
 Utilisation des paramètres d'initialisation de l'application Web,
appelé paramètres de contexte <context-param>, qui sont
String param= [Link]("someName");
accessibles pour tous les composants Web constituant l'application
if((param == null) || ([Link]().equals(""))){
doSomethingForMissingValues(...); Web.
} else{
doSomethingWithParameter(param);
} 95
96
Contexte d’application Contexte d’application

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

Les différents contextes Les différents contextes : Contexte


de la session

L'application Web peut maintenir l'information pour


Lorsqu’une requête est prise en charge par une l'ensemble des servlets et des pages JSP au travers de

servlet, le traitement peut demander l’usage plusieurs transactions au cours de la navigation de


l'utilisateur, de sa première requête jusqu'à la fin de la
d’informations se situant dans différents contextes. conversation  la persistance.
1er contexte: l’application en question La session est accessible au travers de la méthode
2ème contexte: la session getSession() ou getSession(boolean) de l’objet de type
3ème contexte: la requête HttpServletRequest passé en paramètres des méthodes
doXXX().
public void invalidate() ;  supprimer une session
99 100
Les différents contextes : Contexte de Lecture des informations de l’URL
requête

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

Lecture de l’en-tête de la requête Lecture des paramètres

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&parametre2=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>

Lecture des paramètres : Exemple Lecture des paramètres : Exemple

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

Méthode Rôle / Signification Contenu affiché par le client


setStatus (int sc) Code de statut de la réponse Objet de type [Link] par l’appel de la méthode
HttpServletResponse.SC_SWITCHING_PROTOCOLS 101: communication va changer de
getWriter() (contenu textuel)
protocole communiquer avec
WebSocket (protocole réseau + [Link] par l’appel de la méthode
interface de programmtion)
getOutputStream () (contenu binaire)
HttpServletResponse.SC_OK 200
L’exception IllegalStateException est levée si les deux méthodes sont
HttpServletResponse.SC_MOVED_PERMANTLY 301. Ressource demandée a changé
d’URL
appelées pour la même réponse
HttpServletResponse.SC_FORBIDDEN 403. Serveur a refusé de traiter la req Méthode(s) Rôle
HttpServletResponse.SC_INTERNAL_SERVER_ERROR 500. Erreur de traitement côté serveur append(…) print(…) println (…) Ajouter le contenu passé en
setHeader (String name, String value) Appliquer une valeur à un en-tête prinf(…) write (…) paramètre
donné flush() Vider le tampon
setDateHeader (String name, long date) L’écriture des en-têtes de type Date Close () Fermer le flux, pas d’ajout du
setIntHeader (String name, int value) 109
L’écriture des en-têtes de type int contenu 110

Gestion de l’envoi de la réponse Exemple de mise en œuvre : Ecriture de


la réponse

//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

Quatre étapes facilement identifiables Quatre étapes facilement identifiables


1) La lecture de la requête 1) La lecture de la requête
2) La réalisation du traitement métier (au niveau des classes java du 2) La réalisation du traitement métier (au niveau des classes
projet) java du projet)
3) L’écriture des en-têtes de la réponse 3) L’écriture des en-têtes de la réponse
4) L’écriture du corps de la réponse  l’usage des JSP est plus 4) L’écriture du corps de la réponse  l’usage des JSP est plus
adapté
adapté

113 114

Les annotations Les annotations: Exemple 1

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]

un fichier [Link] (fichier archive web) ayant pour

[Link]
contenu applicationweb :

117
cd ApplicationWeb ; jar cf [Link] * 118

Vous aimerez peut-être aussi