1. DEUXIEME RAPPORT EN JAVA EE
Suivi de Session
L’objet HTTPSession
Définition
Fonctionnement d’une session
Méthode utilisées
Cycle de vie d’une session
Travaux Pratique
Encadré Par :
M Mohamed NAYA
Préparé par
Soukaina NAJIHI
Soukaina BOUJADI
d’une session
ratique
:
2. 2
2
2 DEUXIEME RAPPORT EN JAVA EE
Sommaire :
Remerciements..………………………………………………………..….……4
Suivi de session………..……………………….…………………………...…...5
L’objet HTTPSession……………………….……………………………..…...5
Définition d’une session……………………….…………………………..…...5
Fonctionnement d’une session………………….………………………...…...5
Méthode utilisées……………………….……………………………………...6
Cycle de vie d’une session……………………….………………………..…...6
Travaux Pratique……………………….…………………………….…..…...7
Suivi de session pour un compteur dynamique……..........….…..……..…7
Suivi de session pour un compteur statique……..........….………….……10
Récapitulations …………………………………………………….…...……12
3. 3
3
3 DEUXIEME RAPPORT EN JAVA EE
Remerciement
Au terme de ce travail, Nous tenons à remercier notre Cher
professeur Monsieur Mohamed NAYA , pour ses
précieuses directives et son suivi continu et pour tous les efforts qu'il
a fournis en classe et qui ont porté leur fruits, et surtout pour son
soutien continue et inconditionnel.
Du fond du coeur, merci
4. 4 DEUXIEME RAPPORT EN JAVA
EE
Le protocole HTTP est un protocole non connecté (on parle aussi de
protocole sans états, en anglais stateless protocol
requête est traité indépendamment des autres et qu'aucun historique des
différentes requêtes n'est conservé.
Ainsi le serveur web ne peut pas se « souvenir » de la requête précédente,
ce qui est dommageable dans des utilisat
lequel le serveur doit mémoriser les achats de l'utilisateur sur les différentes
pages. Il s'agit donc de maintenir la cohésion entre l'utilisateur et la requête,
c'est-à-dire reconnaître les requêtes provenant
du même utilisateur, associer un profil à l'utilisateur, connaître les
paramètres de l'application (nombre de produits vendus, ...). On appelle ce
mécanisme de gestion des états le « suivi de session » (en anglais session
tracking).
Le protocole http en bref
Le protocole HTTP est un protocole sans
le serveur ignore qu'une s
provient d'un m
En mode HTTP, pour le serveur, 2 requ
successives d'un m
Le serveur
En effet une adresse IP n'est pas suffisante pour
identifier un utilisateur
e protocol), cela signifie que chaque
utilisations telles que le e-commerce, pour
:
séquence de requ
même client .
requêtes
même client sont indépendantes
HTTP voit les requêtes, pas les clients.
4
4
), état =>
quence requêtes
tes
pendantes .
tes,
5. 5
5
5 DEUXIEME RAPPORT EN JAVA EE
L'objet HttpSession
L'objet HttpSession permet de mémoriser les données de l'utilisateur, grâce à
une structure similaire à une table de hachage, permettant de relier chaque id
de session à l'ensemble des informations relatives à l'utilisateur. Ainsi en
utilisant un mécanisme tel que les cookies, permettant d'associer une requête à
un id, et l'objet HttpSession, permettant de relier des informations relatives à
l'utilisateur à un id, il est possible d'associer facilement une requête aux
informations de session !
Definition d’une session
• Une session = Une suite d’interactions entre un client et
Un serveur Web
– Elle couvre plusieurs requêtes HTTP sur une période donnée
• On peut utiliser les sessions pour
– Mémoriser les actions d’un utilisateur unique
– Exemples
• achats en ligne (panier de commande)
• examens à distance
Fonctionnement d’une session
A la première requête vers une application web :
Un objet HttpSession est créé.
Ainsi qu’un identifiant unique pour cet objet.
L’identifiant est en général sauvegardé par un cookie appelé
JSESSIONID
seul l’identifiant de session est envoyé au client.
Grâce à cet identifiant, le serveur détermine l’objet session
correspondant à la requête courante.
A toute nouvelle requête émise par l’utilisateur, le cookie est transmis
via le serveur web et accédé par la méthode :
6. 6 DEUXIEME RAPPORT EN JAVA
EE
public String HttpSession.getId()
Méthodes utilisées
API de suivi de session HttpSession
Méthodes de création liées à la requête (HttpServletRequest)
HttpSession getSession() : retourne la session associée à l’utilisateur
HttpSession getSession(boolean p) : création selon la valeur de p
Gestion d’association (HttpSession)
Enumeration getAttributNames() : retourne les noms de tous les
attributs
Object getAttribut(String name) : retourne l’objet associé au nom
setAttribut(String na, Object va) : modifie na par la valeur va
removeAttribut(String na) : supprime l’attribut associé à
Destruction (HttpSession)
invalidate() : expire la session
logout() : termine la session
getAttribut("nom") renvoie un objet de type Object, qu’il
faut donc caster.
Cycle de vie d’une session
A sa création, une période de temps est affectée à
la session.
Elle expire automatiquement à la fin de cette période (par défaut 30mns
avec Tomcat).
Elle peut être invalidée explicitement par la servlet
(HttpSession.invalidate()). Permet de fermer une session.
A l’expiration (invalidation), les données de
l’objet session
(HttpSession) sont retournées au moteur de servlets.
Les sessions ne sont donc pas invalidées à la fermeture du navigateur.
6
6
na
7. 7
7
7 DEUXIEME RAPPORT EN JAVA EE
Travaux Pratique :
1- Suivi de session pour un compteur dynamique
Dans cet exemple, nous allons savoir comment nous pouvons realiser un
programme qui gardera la trace combien de fois la servlet a été consultée.
Pour rédiger ce programme tout d'abord nous devons créer une classe
CounterServlet . Le nom de la classe doit suivre la convention de
nommage. N'oubliez pas de garder le nom de la classe de telle sorte qu'il
devient facile de comprendre ce que le programme va faire juste en
voyant le nom de la classe. Après avoir fait une classe définit un
compteur de variable qui va garder une trace de combien de fois le servlet
a été consultée. Maintenant, utilisez la méthode soit doGet () ou doPost ()
pour écrire une logique du programme. Notre logique du programme est
simple. Nous devons tout simplement incrémenter la valeur du compteur
de 1. Pour afficher la sortie utiliser la méthode de l'objet de la réponse qui
sera à son tour renvoyer l'objet de la classe PrintWrite méthode getWriter
(). Maintenant, afficher la valeur du compteur.
Le code du programme est donné ci-dessous:
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet(urlPatterns = {"/CounterServlet"})
public class CounterServlet extends HttpServlet {
int counter = 0;
public void doGet(HttpServletRequest req, HttpServletResponseres)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter pw = res.getWriter();
counter++;
pw.println(" à present le nombre du compteur est : " + counter);
}
}
8. 8 DEUXIEME RAPPORT EN JAVA
EE
configuration dans web.xml
<?xml version="1.0" encoding="UTF
<web-app
xmlns:xsi="http://www.w3.org/2001/XMLSchema
xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:web="http://java.sun.com/xml/ns/javaee/web
app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web
id="WebApp_ID" version="2.5">
<display-name>CounterServlet</display
<servlet>
<servlet-name>CounterServlet</servlet
<servlet-class>CounterServlet</servlet
</servlet>
<servlet-mapping>
<servlet-name>CounterServlet</servlet
<url-pattern>/CounterServlet</url
</servlet-mapping>
<welcome-file
<welcome-file>in
</welcome-file
</web-app>
Dans notre cas le fichier web.xml n'est pas créer par
netbeans et on doit l'ajouter clique droit sur
l'application '' ApplicationWeb_SousUbuntu'',
Nouveau ,
Autre / Web,
StandardDeployementDescriptor(web.xml)
UTF-8"?>
XMLSchema-xmlns="
web-app_2_5.xsd"
display-name>
servlet-name>
servlet-class>
servlet-name>
url-pattern>
file-list>
index.jsp</welcome-file>
file-list>
8
8
-instance"
web-xsi:
9. 9
9
9 DEUXIEME RAPPORT EN JAVA EE
Apres creation et configuration de web.xml vous pouvez exécuter la servlet .
10. 10
10
10 DEUXIEME RAPPORT EN JAVA EE
2- suivi de session pour un compteur satatique
Implémenter la méthode doGet pour gérer le suivi de
session:
Affiche un compteur qui est incrémenté
à chaque accès sur cette servlet
pendant une session.
11. 11 DEUXIEME RAPPORT EN JAVA
EE
Cette servlet recupere d'abord l'objet HttpSession associé au client courant.
En passant true à getSession() , elle demande la reation d'une session si
nécessaire. LA servlet obtient ensuite un objet Integer lié au nom
tracker.count. Si cet objet n'existe pas , la servlet
démarre un nouveau
compteur .sinon ,elle remplace l'Integer par un nouveau dont
la valeur a été
incrémentée de 1 . Enfin , la servlet affiche le compteur courant et toutes les
paires nom/valeur de la session .
11
11
12. 12
12
12 DEUXIEME RAPPORT EN JAVA EE
Mécanisme très puissant permettant de stocker des objets et non de
simples chaînes de caractères comme les cookies.
Méthode de création (de HttpServletRequest) :
HttpSession getSession() : retourne la session associée à
l’utilisateur.
Gestion d’association (de HttpSession) :
Enumération getAttributNames() : retourne les noms de tous les
attributs.
Object getAttribut(String name) : retourne l’objet associé au
nom.
setAttribut(String na, Object va) : donne la valeur va à l’attribut
na.
removeAttribut(String na) : supprime l’attribut de nom na.
Destruction (de HttpSession) :
logout() : termine la session.