Vous êtes sur la page 1sur 68

Ministère de l’enseignement supérieur et de la recherche scientifique

Programmation OO
Institut Supérieur des Etudes Technologiques de Mahdia

Avancée
Architecture JEE
Mme Sameh HBAIEB TURKI
Maître technlogue
Département: Technologies de l’informatique
Présentation du cours
Objectif général:
A l’issue de ce cours, l’étudiant sera capable de développer une application
web pouvant s'exécuter dans l'un des nombreux conteneurs du marché : IBM
WebSphere, BEA WebLogic, JBoss server, Apache Tomcat, Sun appServe.

Objectifs spécifiques:
- Connaître les fondements des architectures n-tiers et l'architecture J2EE,
- Savoir utiliser les technologies Servlet/JSP,
- Connaître les bonnes pratiques pour développer des accès aux bases de
données avec JDBC et les pools de connexions,
- Connaître les bases de la bibliothèque JSTL.
Présentation du cours
Pré-requis:
Cette matière requiert que l'étudiant ait suivi une formation sur la
programmation Orientée Objet et la Programmation Web.

Plan du cours:
1. Introduction au JEE
2. Les servlets
3. Les pages JSP
4. Les classes Java Beans
5. Le patron de conception MVC
6. L’accès aux données avec JDBC
Chapitre 1:
Introduction au JEE
Evolution du web

Le web 1.0, encore appelé web


traditionnel, est avant tout un web
statique, centré sur la distribution
d’informations. Il se caractérise par des
sites orientés produits, qui sollicitent
peu l’intervention des utilisateurs. Les
premiers sites d’e-commerce datent de
cette époque.
Evolution du web

Le web 2.0, ou web social, change


totalement de perspective. Il privilégie
la dimension de partage et d’échange
d’informations et de contenus (textes,
vidéos, images ou autres). Il voit
l’émergence des réseaux sociaux, des
smartphones et des blogs. Le web se
démocratise et se dynamise.
Evolution du web

Le web 3.0, aussi nommé web


sémantique, vise à organiser la masse
d’informations disponibles en fonction
du contexte et des besoins de chaque
utilisateur, en tenant compte de sa
localisation, de ses préférences, etc.
C’est un web qui tente de donner sens
aux données. C’est aussi un web plus
portable et qui fait de plus en plus le
lien entre monde réel et monde virtuel.
Il répond aux besoins d’utilisateurs
mobiles, toujours connectés à travers
une multitude de supports
Evolution du web

Le web 4.0, évoqué par certains comme


le web intelligent, effraie autant qu’il
fascine, puisqu’il vise à immerger
l’individu dans un environnement (web)
de plus en plus prégnant. Il pousse à
son paroxysme la voie de la
personnalisation ouverte par le web 3.0
mais il pose par la même occasion de
nombreuses questions quant à la
protection de la vie privée, au contrôle
des données, etc.  
Survol sur les architectures des applications web
 Définition d’une architecture:
En informatique, une architecture désigne la structure générale inhérente d’un
système informatique, l'organisation des différents éléments du système
(logiciels et/ou matériels et/ou humains et/ou informations) et des relations
entre les éléments.

 Définition d’une application web:


Une application web est une interface web applicative disponible uniquement
sur le web et accessible via un navigateur internet. C’est une application qui
peut être hébergée en cloud ou sur des serveurs dédiés. Toutes les données
sont stockées sur un serveur web.
Survol sur les architectures des applications web
Une application web se compose de 3 parties qui sont intégrées et coopèrent
pour son fonctionnement :
Interface utilisateur pour
interagir avec l'application

c’est la partie applicative de Enregistrement des données de


l’application qui intègre la logique l’application sur un support physique :
métier : les services offerts aux Fichiers (texte, binaire, XML, ...), Base
utilisateurs. de données relationnelles, etc.
Survol sur les architectures des applications web
1. Modèle un-tiers :
Toutes les parties sont placées et exécutées sur une même machine

2. Modèle deux-tiers : appelé aussi client/serveur


- Client : partie présentation, interface utilisateur
- Serveur : partie persistance, gestion physique des données
Survol sur les architectures des applications web
2. Modèle deux-tiers : appelé aussi client/serveur (suite)
Les services métier ou la partie applicative peuvent être :
- Soit entièrement coté client, intégrés avec la présentation. La partie serveur
ne gère que les données (client : présentation + applicatif)

- Soit entièrement coté serveur. La partie client ne gère que l'interface


utilisateur (serveur : applicatif + gestion des données)
Survol sur les architectures des applications web
2. Modèle deux-tiers : appelé aussi client/serveur (suite)
Les services métier ou la partie applicative peuvent être :
- Soit découpés entre la partie serveur et la partie client
Survol sur les architectures des applications web
3. Modèle trois-tiers :
Les 3 principaux tiers s'exécutent chacun sur une machine différente :
- Couche Présentation : Navigateur web sur machine cliente, affichage de
contenu HTML
- Couche Applicative / métier : Serveur d'applications c’est un serveur HTTP
exécutant des composants / éléments logiciels qui génèrent
dynamiquement du contenu HTML via des requêtes à des BDD distantes
- Couche Persistance : Serveur de base de données
Survol sur les architectures des applications web
4. Modèle n-tiers :
- Ce modèle rajoute des couches (tiers) en plus.
- La couche applicative n'est pas monolithique : elle peut s'appuyer et interagir
avec d'autres services.
- Un service métier utilise d'autres services métiers.
- Chaque service correspond à une couche, d'où le terme de N-tiers.

Intérêts d'avoir plusieurs services / couches :


- Réutilisation de services existants
- Découplage des aspects métiers et technique et des services entre eux :
meilleure modularité.
- Facilité d’évolution : nouvelle version de service
- Facilité de passage à l'échelle : évolution de certains services : permet de
faire évoluer les services un par un sans modification du reste de l'application
Survol sur les architectures des applications web
4. Modèle n-tiers (suite) :

Inconvénients :
- En général, les divers services s'appuient sur des technologies très variées,
d'où la nécessité de gérer l'hétérogénéité et l'interopérabilité des services.
- Nécessité d’utiliser des framework et/ou outils supplémentaires
- Les services étant plus découpés et distribués, pose plus de problèmes liés à
la distribution
Survol sur les architectures des applications web
Une application 3/N-tiers intègre un grand nombre de technologies :
- Présentation : HTML/CSS, librairies graphiques...
- Applicatif : objets, composants, scripts exécutables, services ...
- Données : fichiers XML, SGBDR, ...
- Protocoles de communication : RPC/RMI, HTTP, messages, ...

Pour faciliter l'intégration de ces technologies et le développement


d'applications web n-tiers, de nombreux éditeurs offrent des frameworks
globaux comme Java EE chez Oracle et .Net chez Microsoft.
Présentation de l’architecture JavaEE

 JavaEE (Java Enterprise Edition) est une plateforme qui permet de faciliter
le développement d’application d’entreprise en fournissant un
environnement d’exécution et des composants sous forme d’API
Présentation de l’architecture JavaEE
 J2EE s’appuie sur le langage Java :
- Java est un langage orienté objet dont la syntaxe est dérivé du C et dont la
conception résulte de l’expérience de divers langages (Smalltalk, Ada, C++ …)
- Java est un langage semi-compilé. Le code obtenu après compilation
s’appelle du byte-code et ce code est interprétable par une JVM (Java Virtual
Machine). Cependant, Java peut également être complètement compilé
(transformé en langage machine) si nécessaire.
- Java est portable sur toutes les plate-formes puisqu’il existe des machines
virtuelles pour chacune. (Les navigateurs intègrent des machines virtuelles
java).
- Java est un langage conçu, à l’origine, pour être utilisé via un réseau.
Présentation de l’architecture JavaEE
 JavaEE s’appuie sur des concepts objet :
- Classe : type d’objet caractérisé par sa structure de données (attributs) et son
comportement (méthodes).
- Objet : instance de classe.
- Héritage : Mécanisme permettant à une classe d’objets de bénéficier de la
structure de données et du comportement d’une classe "mère", tout en lui
permettant de les affiner et ce, afin de prendre en compte les spécificités de la
classe "fille", sans avoir cependant à redéfinir ce que les deux classes ont de
commun.
- Abstraction : Mécanisme permettant la dissociation entre la déclaration
d’une classe et son implémentation.
- Polymorphisme : Mécanisme permettant d’associer à un comportement, une
implémentation différente en fonction de l’objet auquel on se réfère.
- Encapsulation : Mécanisme permettant de dissimuler les détails du
fonctionnement interne d’une classe aux autres classes.
Les composants JavaEE
 L’architecture JEE est une architecture d’application distribuée à base de
composants.
 Les applications Java EE sont constituées de composants.
 Un composant Java EE est une entité logicielle fonctionnelle autonome qui
est assemblée dans une application Java EE avec ses classes et fichiers
associés et qui communique avec d’autres composants.
 La spécification Java EE définie les composants Java EE suivants :
- Les composants Clients ou tiers Client qui sont exécutés côté client
- Les composants Web ou tiers Web exécutés côté serveur (Moteur web)
- Les composants métier ou tiers Métier exécutés côté serveur (Moteur
d’application)
Les composants JavaEE
Les composants clients
 Les clients web sont composés de deux parties,
(1) des pages web dynamiques contenant différents types de langage de
balise (HTML, XML, etc.) et générées par des composants web s’exécutant
dans la couche tiers Web et
(2) un navigateur web qui présente ou affiche les pages envoyées par le
serveur.
 Un client web est parfois appelé client léger. Les clients légers ne consultent
généralement pas les bases de données, n’exécutent pas de règles métiers
complexes ou ne se connectent pas aux applications héritées.
 Lorsqu’on utilise un client léger, ces opérations lourdes sont déchargées sur
les java beans s’exécutant sur le serveur Java EE, où ils peuvent tirer parti de
la sécurité, la vitesse, des services et de la fiabilité des technologies Java EE.
Les composants web
 Les composants Web Java EE sont des servlets ou des pages créés à l'aide
de la technologie JSP (pages JSP) et/ou de la technologie JavaServer Faces.

 Les servlets sont des classes de langage de programmation Java qui traitent
dynamiquement les requêtes et construisent des réponses.

 Le Web tiers, tout comme le client tiers, peut inclure un composant


JavaBeans pour gérer l'entrée utilisateur et envoyer cette entrée aux beans
enterprise s'exécutant dans le tiers métier (Business tiers).
Les composants métier

 EJB (Entreprise Java Beans) est la partie centrale de la plate-forme J2EE


 Les EJB permettent d’implanter la logique de traitement
 Caractéristiques principales des EJB:
- composants "serveurs" spécialisés écrits en Java
- Support pour les aspects non fonctionnels de l’application: Persistance,
Transaction, Sécurité, etc
Les API J2EE

 J2EE regroupe un ensemble d'API pour le développement d'applications


d'entreprise.
 Ces API peuvent être regroupées en trois grandes catégories :
- les composants : Servlet, JSP, EJB
- les services : JDBC, JTA (Java Transaction API)/JTS, JNDI (Java Naming and
Directory Interface), JCA (J2EE Connector Architecture), JAAS (Java
Authentication and Authorization Service)
- communication : RMI-IIOP (Remote Method Invocation), JMS (Java Message
service) , Java Mail
Les conteneurs JavaEE
 Les conteneurs assurent la gestion du cycle de vie des composants.
 Les conteneurs permettent aux applications d'accéder aux ressources et aux
services en utilisant les API.
 Les appels aux composants se font par des clients en passant par les
conteneurs. Les clients n'accèdent pas directement aux composants mais
sollicitent le conteneur pour les utiliser.
 Il existe plusieurs conteneurs définis par J2EE :
- conteneur web : pour exécuter les servlets et les JSP (ex: serveur Tomcat)
- conteneur d'EJB : pour exécuter les EJB (ex: serveur JBoss)
- conteneur client : pour exécuter des applications standalone sur les postes qui
utilisent des composants J2EE
 Les serveurs d'applications peuvent fournir un conteneur web uniquement
(exemple : Tomcat) ou un conteneur d'EJB uniquement (exemple : JBoss,
Jonas, ...) ou les deux (exemple : Websphere, Weblogic, ...).
Les étapes d’exécution d’une requête cliente

(3) La servlet contrôle la validité


de la requête HTTP.
(4) Elle instancie les beans (EJB)
de données pour accéder aux
données.
(6) Elle invoque la JSP pour
générer la page HTML qui
contient le résultat de la requête.
Structure standard d’une application web JEE
 Toute application web Java EE doit respecter une structure de dossiers
standard, qui est définie dans les spécifications de la plate-forme :

Dossiers et fichiers
personnels publiques,
accessibles par les
clients web

Dossiers et fichiers
Classes java compilées
personnels privés
Fichier de configuration
Déploiement et exécution d’une application JEE

Il existe trois types d’archives (JAR, WAR et EAR):


- Bibliothèques =>JAR: regroupe des classes
- Application client=>JAR: regroupe les ressources
nécessaires à leur exécution (classes, bibliothèques,
images, …)
- EJB=>JAR: regroupe les EJB et leurs
composants(classes)
- Web=>WAR: regroupe les servlets et les JSP ainsi que les
ressources nécessaires à leur exécution (classes,
bibliothèques de balise, images, …)
- Application=>EAR: une application est un regroupement
d’un ou de plusieurs modules dans un fichier EAR
(Entreprise Archive). L’application est décrite dans un
fichier application.xml lui-même contenu dans le fichier
EAR.
Chapitre 2:
Les servlets
Qu’est ce qu’une Servlet ?

 Une servlet est un composant logiciel, utilisé dans un serveur web, tel que
Tomcat, qui peut être invoqué par les navigateurs clients via une URL.
 Le protocole de communication est dans ce cas HTTP.
 Elle est exécutée à l’intérieur du conteneur web ou un moteur de servlet qui
permet d’établir le lien entre la servlet et le serveur web.
Qu’est ce qu’une Servlet ?
 La servlet est invoquée lorsque des requêtes HTTP utilisateur sont soumises
au serveur et elle génère une réponse, éventuellement en utilisant la logique
métier contenue dans des EJBs ou en interrogeant directement une base de
données. Elle retourne alors une réponse HTML ou XML au demandeur.
Qu’est ce qu’une Servlet ?
 Une servlet doit implémenter l’interface javax.servlet.Servlet soit
directement, soit en dérivant d’une classe implémentant cette interface
comme : javax.servlet.GenericServlet ou javax.servlet.http.HttpServlet.
Le cycle de vie d’une Servlet
1. La servlet est créée puis initialisée (init()): cette
méthode n’est appelée par le serveur qu’une seule
fois lors du chargement;

2. Le traitement des requêtes (service()) : cette


méthode est appelée automatiquement par le
serveur à chaque requête de client;

3. La servlet est détruite (destroy()) : cette


méthode n’est appelée par le serveur qu’une seule
fois à la fin, elle permet de libérer des ressources.
Ma première Servlet
public class MyServlet extends HttpServlet {
public MyServlet() {
Le paramètre request de type super();
// TODO Auto-generated constructor stub
HttpServletRequest donne accès aux }
paramètres de la requête, à l’entête protected void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
HTTP et aux informations du client response.setContentType("text/html");
response.setCharacterEncoding( "UTF-8" );
PrintWriter out = response.getWriter();
out.println("<!DOCTYPE html>");
out.println("<html>");
Le paramètre response de type out.println("<head>");
out.println("<meta charset=\"utf-8\" />");
HttpServletResponse contient les out.println("<title>Test</title>");
données de la réponse aux clients. out.println("</head>");
out.println("<body>");
Le type de réponses est précisé par out.println("<p>Ceci est une page générée depuis une servlet.</p>");
la méthode setContentType() out.println("</body>");
out.println("</html>");
}

La méthode getWriter() retourne un protected void doPost(HttpServletRequest request, HttpServletResponse


objet de type PrintWriter, flux de response) throws ServletException, IOException {
// TODO Auto-generated method stub
sortie pour le texte HTML de la }
réponse
Le descripteur de déploiement: web.xml
 Le fichier web.xml est un fichier au format XML qui permet de décrire le
déploiement de l’application au serveur.
 Il permet de configurer l’application, les servlets, les sessions, les bibliothèques
de tags personnalisés, les paramètres de contexte, les ressources externes, …
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1">
<servlet>
Déclaration de <servlet-name>MyServlet</servlet-name>
la servlet <servlet-class>chemin servlet.MyServlet</servlet-class>
MyServlet </servlet>
<servlet-mapping>
Le mapping de la servlet <servlet-name>MyServlet</servlet-name>
sur l’URL du serveur <url-pattern>/MyServlet</url-pattern>
/MyServlet </servlet-mapping>
</web-app>
Appel de la servlet

 L’exécution d’une requête fait appel à la servlet. Par exemple:

http://localhost:8080/CoursServlet/MyServlet

serveur Context path URL pattern


Méthodes des requêtes Http
 HTTP définit un ensemble de méthodes de requête qui indiquent l'action que
l'on souhaite réaliser sur la ressource indiquée:
GET
La méthode GET demande une représentation de la ressource spécifiée. Les
requêtes GET doivent uniquement être utilisées afin de récupérer des données.

HEAD
La méthode HEAD demande une réponse identique à une requête GET pour
laquelle on aura omis le corps de la réponse (on a uniquement l'en-tête).

POST
La méthode POST est utilisée pour envoyer une entité vers la ressource indiquée.
Cela entraîne généralement un changement d'état ou des effets de bord sur le
serveur.
Méthodes des requêtes Http
PUT
La méthode PUT remplace toutes les représentations actuelles de la ressource
visée par le contenu de la requête (modification).
DELETE
La méthode DELETE supprime la ressource indiquée.
OPTIONS
La méthode OPTIONS est utilisée pour décrire les options de communications avec
la ressource visée.
TRACE
La méthode TRACE réalise un message de test aller/retour en suivant le chemin de
la ressource visée.
PATCH
La méthode PATCH est utilisée pour appliquer des modifications partielles à une
ressource.
Les Servlets Http
 Pour faciliter le traitement particulier des requêtes web, la classe Servlet est
affinée en javax.servlet.http.HttpServlet.

 Deux méthodes remplacent la méthode service() de la classe mère :


- doGet() pour les requêtes http de type GET
- doPost() pour les requêtes http de type POST

 La classe servlet doit obligatoirement implémenter l’une des méthodes


redéfinies, choisies selon le mode d’envoi du formulaire html qui l’exécute.

 La méthode service() de HttpServlet appelle automatiquement la bonne


méthode en fonction du type de requêtes http.
Les Servlets Http

HttpServletRequest

HttpServletResponse
Les Servlets Http

 Une servlet peut traiter un ou plusieurs types de requêtes grâce à plusieurs


autres méthodes :
- doHead() : pour les requêtes http de type HEAD
- doPut() : pour les requêtes http de type PUT
- doDelete() : pour les requêtes http de type DELETE
- doOptions() : pour les requêtes http de type OPTIONS
- doTrace() : pour les requêtes http de type TRACE
Les Servlets Http
 La servlet reçoit les requêtes et renvoie les réponses via deux objets :
- HttpServletRequest contient les renseignements sur le formulaire HTML initial
(utile pour doPost()) ;
- HttpServletResponse contient le flux de sortie pour la génération de la page
HTML résultat. Ce flux de sortie est obtenu par les méthodes: getWriter() et
getOutputStream().

 Il faut utiliser ces deux objets comme paramètres des méthodes doGet() ou
doPost() pour implémenter le service.
La méthode doGet()
 Une requête de type GET est utile avec des liens. Par exemple :

<A HREF="http://localhost:8080/examples/servlet/tomcat1.MyHelloServlet">test
de la servlet</A>

 Dans une servlet de type HttpServlet, une telle requête est associée à la
méthode doGet().

 La signature de la méthode doGet() :

protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws


IOException { }
La méthode doPost()
 Une requête POST n'est utilisable qu'avec un formulaire HTML.
<FORM ACTION="http://localhost:8080/examples/servlet/tomcat1.TestPostServlet"
METHOD="POST">
<INPUT NAME="NOM">
<INPUT NAME="PRENOM">
<INPUT TYPE="ENVOYER">
</FORM>
 Dans une servlet de type HttpServlet, une telle requête est associée à la
méthode doPost().
protected void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException { }
La méthode doPost()
 La méthode doPost() doit généralement recueillir les paramètres pour les traiter
et générer la réponse.
 Pour obtenir la valeur associée à chaque paramètre il faut utiliser la méthode
getParameter() de l'objet HttpServletRequest. Cette méthode attend en
paramètre le nom du paramètre dont on veut la valeur. Ce paramètre est
sensible à la casse.
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException {
response.setContentType("text/html");
PrintWriter pwriter= response.getWriter();
String name = request.getParameter(“NOM");
String age = request.getParameter(“PRENOM");
pwriter.println("Nom: "+NOM);
pwriter.println(“Prenom: "+PRENOM);
pwriter.close(); }
L’interface HttpServletRequest
 Les fonctionnalités de HttpServletRequest les plus utilisées permettent de:
- Obtenir les paramètres de l'utilisateur,
- stocker et obtenir les objets au sein de la requête
- Lire les en-tête
- Obtenir les objets Session
- Obtenir des informations sur le serveur
 L'interface HttpServletRequest dérive de l'interface ServletRequest, donc elle
dispose des méthodes de ServletRequest comme:
- String getParameter (String parameterName): Cette méthode est utilisée pour
récupérer la valeur d'un paramètre d'une requête en se servant du nom; ces
paramétres sont envoyées par le client; chaque valeur retournée est de type
"String"
L’interface HttpServletRequest
- S​ tring[] getParameterValues (String parameterName): Cette méthode
fonctionne comme la précédente sauf qu' ici on aura un tableau de caractères à
la sortie; les éléments de ce tableau représentent les valeurs des paramètres des
requêtes envoyées; ça peut être par exemple les valeurs issues de menu
déroulant à choix multiples
- Object getAttribute (String attributeName): cette méthode récupère la valeur de
l' attribut ayant comme nom "attributName; cette valeur est un objet de Object.
- void setAttribute (String attributeName, Object value): Cette méthode est
utilisée pour affecter la valeur "value" au paramètre "attributeName" d’une
requête; "value" est de type Object.
- ServletContext getServletContext (): Cette méthode est utilisée pour récupérer
le contexte courant de la Servlet. L'objet ServletContext contient des
informations relatives à l'application web et aussi pour toutes les Servlets de
l'application.
L’interface HttpServletRequest
 ​Exemple: Afficher les informations relatives au serveur
public class ServeurInfo extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws
ServletException, IOExcepption {
res.setContentType("text/plain"); // on produit du texte ASCII
PrintWriter out = res.getWriter();
out.println("Nom du serveur : " + req.getServerName() + " .");
out.println("Logiciel utilisé : " + req.getServletContext().getServerInfo() +
" .");
out.println("Port du serveur : " + req.getServerPort() + " .");
out.println("Chemin vers le fichier " + req.getPathInfo() + " : " +
req.getPathTranslated(req.getPathInfo()) + " .");
}}
L’interface HttpServletRequest
 ​Exemple: Afficher les paramètres de la requête
public class ServeurInfo extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOExcepption {
res.setContentType("text/plain"); // on produit du texte ASCII
PrintWriter out = res.getWriter();
Enumeration parametres = req.getParameterNames();
out.println("Affichage des informations sur les paramètres de la
requête");
while (parametres.hasMoreElements()) {
String nomParametre = (String) parametres.nextElement();
out.println("Le paramètre " + nomParametre + " a la valeur : " +
getParameter(nomParametre) + " .");
} }}
L’interface HttpServletRequest
 ​Exemple: Afficher l’entête de la requête
public class ServeurInfo extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws
ServletException, IOExcepption {
res.setContentType("text/plain"); // on produit du texte ASCII
PrintWriter out = res.getWriter();
out.println("Affichage des informations sur les en-têtes de la requête");
Enumeration entetes = req.getHeaderNames();
while (entetes.hasMoreElements()) {
String nomEntete = (String) entetes.nextElement();
out.println("a l'entête " + nomEntete + " correspond la valeur " +
getHeader(nomEntete) + ".");
} }}
L’interface HttpServletResponse
 Les fonctionnalités de HttpServletResponse les plus utilisées permettent de:
- Renvoyer la réponse vers l'utilisateur (getWriter())
- Changer ou mettre à jour les valeurs des en-tête (setHeader())
- Rediriger le browser vers un autre URL (void sendRedirect (String url))
- void addCookie (Cookie cookie): Cette méthode ajoute l'objet "cookie" à la
réponse.
 D'autres méthodes appartiennent à HttpServletResponse par dérivation:
- PrintWriter getWriter () : Cette méthode retourne un objet PrintWriter qui peut
envoyer toute sorte de fichiers (texte, html, etc) au client.
- void setContentType (String type): Cette méthode définit le type du contenu de
la réponse à envoyer au client.
L’interface HttpServletResponse
 Exemple d’utilisation de la méthode sendRedirect():

private boolean forwardToLogin(HttpServletRequest request,


HttpServletResponse response) throws ServletException,
IOException {
String url = "http://" + request.getServerName() + ":"
+ request.getServerPort() + request.getContextPath()
+ "/login.jsp";
response.sendRedirect(url);
return false;
}
L’interface HttpServletResponse
 Exemple d’utilisation de la méthode setHeader():

protected void doGet(HttpServletRequest request, HttpServletResponse response)


throws ServletException, IOException {

String filename = request.getParameter("file");


response.setContentType("application/octet-stream");
response.setHeader("Content-Disposition", "attachment; filename=" + filename);
}
L’interface HttpSession
 Le protocole HTTP au sein des Serveurs Web est une technologie sans état, c'est
à-dire, dès que le serveur Web reçoit une requête, il la traite et il se met en
attente d'une autre requête sans garder de trace de la requête qu'elle a traitée
précédemment.
 Dans certains cas, on a besoin des informations venant de la précédente
requête; dans ce cas on fait référence à la notion de session.
 Une Session est le faite de pouvoir conserver l'état conversationnel d'un client
avec un serveur en l’occurrence ici un serveur Web.
 L'interface "javax.servlet.http.HttpSession" définit un certain nombre de
méthodes
 L'id de la session (le même durant la session) est transmis du client au serveur à
chaque requête/réponse et ainsi on peut garder la trace des échanges entre les
client et le Serveur Web.
L’interface HttpSession
 Un objet de type HttpSession est créé en invoquant l’une des méthodes
suivantes:
- HttpSession HttpServletRequest.getSession () : Cette méthode getSession() de
HttpServletRequest retourne un objet de type HttpSession; l'objet retourné est
attaché à la requête du client; si la requête n'est pas déjà liée à une session, alors
un objet session est créé et est retourné.
- HttpSession HttpServletRequest.getSession (boolean flag): Cette méthode
HttpServletRequest.getSession(...) retourne un objet de type HttpSession si la
requête est liée à une session; sinon elle retourne null.
L’interface HttpSession
 l'interface javax.servlet.http.HttpSession possède des méthodes comme:
- String getId () : cette méthode retourne une chaîne de caractères représentant
l'unique identificateur assigné à la session.
- Object getAttribute (String name): cette méthode retourne un objet associé au
nom spécifié au sein de la session, ou null si aucun objet n'est associé au nom de
la session. D'autres méthodes permettent aussi de travailler au sein d' une
session à savoir, getAttributeNames(), removeAttribute(String name) et
setAttribute(String name, Object value)
- long getCreationTime (): cette méthode retourne comme valeur le moment où
cette session vient d'être créée. On peut aussi avoir le moment où la session est
utilisée pour la dernière fois avec la méthode getLastAccessedTime ()
- boolean isNew (): cette méthode retourne « true » si la session est fraîchement
créée par client sinon « false »
- void invalidate (): cette méthode invalide la session et libère tout objet qui lui est
associé.
L’interface HttpSession
Fichier LoginServlet.java:
Fichier Login.html: public class LoginServlet extends HttpServlet {
protected void doPost(HttpServletRequest request, HttpServletResponse
<form action="LoginServlet" response) throws ServletException, IOException {
method="post"> response.setContentType("text/html");
Name:<input type="text" PrintWriter out=response.getWriter();
name="name"><br> request.getRequestDispatcher("link.html").include(request, response);
Password:<input type="password" String name=request.getParameter("name");
name="password"><br> String password=request.getParameter("password");
<input type="submit" if(password.equals("admin123")){
value="login"> out.print("Welcome, "+name);
</form> HttpSession session=request.getSession();
session.setAttribute("name",name);
}
else{
out.print("Sorry, username or password error!");
request.getRequestDispatcher("login.html").include(request,
response);
} out.close(); } }
L’interface HttpSession
Fichier LogoutServlet.java:
public class LogoutServlet extends HttpServlet {
protected void doGet(HttpServletRequest request, HttpServletResponse
response) throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out=response.getWriter();

request.getRequestDispatcher("link.html").include(request, response);

HttpSession session=request.getSession();
session.invalidate();

out.print("You are successfully logged out!");

out.close();
}
}
L’interface HttpSession
<?xml version="1.0" encoding="UTF-8"?>
Fichier web.xml:
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xmlns="http://java.sun.com/xml/ns/javaee"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" Suite du fichier
version="2.5"> web.xml

<servlet>
<description></description>
<display-name>LoginServlet</display-name> <servlet>
<servlet-name>LoginServlet</servlet-name> <description></description>
<servlet-class>LoginServlet</servlet-class> <display-name>LogoutServlet</display-name>
</servlet> <servlet-name>LogoutServlet</servlet-name>
<servlet-mapping> <servlet-class>LogoutServlet</servlet-class>
<servlet-name>LoginServlet</servlet-name> </servlet>
<url-pattern>/LoginServlet</url-pattern> <servlet-mapping>
</servlet-mapping> <servlet-name>LogoutServlet</servlet-name>
<url-pattern>/LogoutServlet</url-pattern>
</servlet-mapping>
</web-app>
Redirection ou inclusion d’une ressource
 Un objet de type RequestDispatcher est obtenu en invoquant la méthode
getRequestDispatcher(String) de la requête.
 Le chemin qui lui est passé en paramètre est un chemin relatif ou absolu, qui doit
correspondre à une ressource se trouvant dans la même application web.
 La ressource désignée par ce chemin peut être statique (une image, ou un
fichier), ou dynamique (une servlet).
 Cet objet expose deux méthodes :
- Forward (): elle redirige la requête vers la ressource désignée,
- Include (): elle inclut cette ressource dans la réponse courante.
Ces deux méthodes prennent en paramètre la requête et la réponse courantes.
Redirection ou inclusion d’une ressource

Méthode include(): Méthode forward():


Redirection ou inclusion d’une ressource
Exemple de scénario qui exige une collaboration entre plusieurs ressources:
Exercices d’application

Exercice 1.

Ecrire une servlet qui affiche la date courante. Effectuer cette tâche à l’aide la classe
Date et du package java.util.*, sans oublier de modifier le fichier web.xml.
Exercices d’application
Corrigé Exercice 1.
import java.io.*;
import java.util.Date;
import javax.servlet.*;
import javax.servlet.http.*;

// Extend HttpServlet class


public class CurrentDate extends HttpServlet {

public void doGet(HttpServletRequest request, HttpServletResponse response)


throws ServletException, IOException {

// Set response content type


response.setContentType("text/html");

PrintWriter out = response.getWriter();


String title = « Afficher la date courante";
Date date = new Date();
String docType = "<!doctype html public \"-//w3c//dtd html 4.0 " + "transitional//en\">\n"
Exercices d’application
Corrigé Exercice 1.

out.println(docType +
"<html>\n" +
"<head><title>" + title + "</title></head>\n" +
"<body bgcolor = \"#f0f0f0\">\n" +
"<h1 align = \"center\">" + title + "</h1>\n" +
"<h2 align = \"center\">" + date.toString() + "</h2>\n" +
"</body>
</html>"
);
}
}
Exercices d’application

Exercice 2.

Nous allons utiliser une servlet pour traiter les données saisies via une page html :
• Ecrire une page html pour saisir le nom et le mot de passe de l’internaute.
• Ecrire une servlet qui affiche le nom et le mot de passe saisie auparavant (cette
servlet est l’action à exécuter une fois le formulaire de saisie rempli).

Vous aimerez peut-être aussi