Descriptif 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 

Servlet & JSP - Développement Web

3.3.Implémentation avancée


Nous avons vu, dans la partie précédente, les bases pour le développement de servlet. Nous allons à présent nous attarder sur des concepts plus avancés.

3.3.1.Les cookies

3.3.1.1.Principe


Les cookies sont de petites informations textuelles envoyées par le serveur et renvoyé par le client, sans modification de sa part, à chaque visite ultérieure. Cette technique peut être très intéressante pour garder une trace des visiteurs (savoir s’il est déjà venu sur le site ou non …).

3.3.1.2.Avantages


Les cookies permettre de garder un lien entre le client et sa session sur un serveur par le biais d’un identifiant de session par exemple.
L’utilisation des cookies est très simple à mettre en place et permet de gérer un ensemble de fonctionnalités intéressantes pour le visiteur.

3.3.1.3.Inconvénients


Les cookies sont transmis à chaque requête, cela peut alourdir les demandes et réponses du client si ces cookies sont utilisés abusivement.
L’utilisation de cookies n’est pas à préconiser pour une utilisation sécurisée, en effet les valeurs de chaque paramètre sont passées en clair dans la requête et peuvent être récupérées par un pirate assez facilement.
Les cookies ne sont pas toujours acceptés par le client, cela peut poser un énorme problème lorsqu’un système n’a pas de moyen en parallèle mis en place.

3.3.1.4.Création de cookies


Les servlets ont leur propre API de cookies. Les cookies sont représentés par l’objet Cookie. Voici une description de cette classe :
  • Le constructeur Cookie (String name, String value) : constructeur qui prend en paramètre le nom du cookie et sa valeur assignée.

Une fois l’objet cookie instancié, vous pouvez spécifier certains attributs de celui-ci (ce sont des « setters ») ou récupérer une information d’un cookie via le « getter » correspondant :

  • La méthode String getComment(): retourne le commentaire
  • La méthode setComment (String): assigne un commentaire

  • La méthode String getDomain(): retourne le domaine
  • La méthode setDomain (String domainPattern) : assigne un domaine

  • La méthode int getMaxAge(): retourne la durée en secondes avant que le cookie soit périmé
  • La méthode setDomain (int lifetime) : indique la durée en secondes avant que le cookie soit périmée, la valeur 0 indique que le cookie doit être supprimé.

  • La méthode String getName() : retourne le nom du cookie
  • La méthode setName (String name) : assigne un nom au cookie

  • La méthode String getPath () : retourne le chemin d’un cookie
  • La méthode setPath (String path) : assigne un chemin au cookie (permet d’indiquer que le cookie n’est utilisé que pour certains niveaux dans le site)

  • La méthode boolean getSecure () : retourne true si le cookie est transmis que pour les connexions sécurisées
  • La méthode setSecure (boolean secureFlag) : positionne le drapeau d’indication de transmission.

  • La méthode String getValue () : retourne la valeur du cookie
  • La méthode setValue (String cookieValue) : assigne ou modifie la valeur du cookie

Une fois le cookie paramétré il faut le rajouter à l’en-tête http : Set-Cookie. Pour cela vous avez juste à appeler la méthode addCookie de l’objet de réponse de votre servlet.

Voici un exemple de création de cookie :

Cookie cookieDejaVenu = new Cookie(“dejaVenu”, “1”);
cookieDejaVenu.setMaxAge(60 * 60 * 24 * 365); // 1 an
res.addCookie(cookieDejaVenu);

3.3.1.5.Lecture des cookies


Les cookies reçus sont stockés dans un tableau que l’on peut récupérer par l’instance de l’objet HttpServletResquest via la méthode getCookies(). Celle-ci renvoie un tableau dont la longueur représente le nombre de cookie envoyé (si la longueur est égale à nulle, aucun cookie n’a été envoyé). Pour obtenir un cookie en particuliers à partir de son nom vous devez parcourir le tableau en appelant pour chaque élément la méthode getName() jusqu’à temps d’arriver sur le cookie qui vous intéresse.
Une fois récupérer vous avez juste à appeler la méthode getValue() pour récupérer son contenu.

Voici un exemple de création de cookie :
public void doGet (HttpServletRequest req,HttpServletResponse res )
throws ServletException, IOException
{
// Initialisation
PrintWriter out = res.getWriter();
res.setContentType (“text/html”);
Cookie [] tabCookies = req.getCookies();
Cookie cookie;

// Boucle qui affiche tous les cookies
for (int i = 0; i < tabCookies.length; i++)
{
cookie = tabCookies [i];
out.println(“Cookie : ” + i + “<br>” +
“ - Nom : ” + cookie.getName() + “<br>” +
“ - Valeur : ” + cookie.getValue() + “<br>”);

}
out.flush();
out.close();
}

Si vous voulez supprimer un cookie, il suffit d’attribut une durée de vie à 0 à votre objet cookie :


c1.setMaxAge(0);

3.3.2.Les sessions

3.3.2.1.Présentation


Nous avons vu précédemment comment garder des informations chez le client par le biais de cookie. Cependant ce mécanisme est très limité, c’est donc pour cela que le système de session a été mis en place.
Lorsque l’on parle de session, l’activité se passe côté Serveur et non Client (contrairement aux cookies). Les sessions sont très utilisées dans les applications web et plus particulièrement dans les sites e-business … Elles permettent de stocker des informations pour chaque client côté serveur.

3.3.2.2.Avantages


Les sessions sont exécutées côté serveur ce qui leur permet d’être beaucoup plus sécurisées que les cookies.
Un seul identifiant est nécessaire pour lier le serveur et le client car les données sont stockées sur le serveur.
Les sessions sont simples d’utilisation grâce à l’API de suivi de session des servlets.

3.3.2.3.Inconvénients


Un lien doit être mis en place entre le client et le serveur (identifiant de session) soit par cookie soit par le mécanisme de réécriture d’URL.

3.3.2.4.API de suivi de session


Les servlets possèdent une API pour la gestion des sessions. L’utilisation de sessions dans les servlets est très simple car il suffit de récupérer l’objet session lié à la requête actuelle. Si aucun objet de session n’a encore été créé, on peut décider de le créer automatiquement.
La classe décrivant une session est : HttpSession.

Voici une description de chacun des méthodes de celle-ci :

  • La méthode Object getValue () ou Objet getAttribute (String name) : retourne la valeur d’un attribut de la session précédemment ajouté.
Remarque : la méthode getValue() est à remplacer par getAttribute() depuis la version 2.2 de l’API des servlets.

  • La méthode putValue (String name, Object value) ou setAttribute (String name, Object value) : associe un objet à un nom d’attribut de la session.
Remarque : la méthode putValue est à remplacer par setAttribute depuis la version 2.2 de l’API des servlets.

  • La méthode removeValue (String name) ou removeAttribute (String name) : supprime un attribut à partir de son nom.
Remarque : la méthode removeValue est à remplacer par removeAttribute depuis la version 2.2 de l’API des servlets.

  • La méthode String [] getValueNames() ou Enumeration getAttributeNames () : retourne les noms de tous les attributs de la session.
Remarque : la méthode getValueNames est à remplacer par getAttributeNames depuis la version 2.2 de l’API des servlets.

  • La méthode String getId() : retourne l’identifiant unique de la session (il peut être utilisé comme une clé ).

  • La méthode boolean isNew() : retourne true si la session vient d’être créées (nouvelle session) ou false dans le cas d’une session déjà existante.

  • La méthode invalidate() : invalide l’ensemble de la session et libère tous les objets qui y sont associés.

3.3.2.5.Gestion de la session


Tout d’abord il vous faut récupérer l’objet session associé à la requête cliente, pour appeler la méthode : getSession de l’objet HttpServletRequest.

HttpSession session = req.getSession (true);

Pour que la session soit créée automatiquement (dans le cas où elle n’existerait pas), nous passons true en paramètre à la méthode getSession.
Remarque : Si on passait false en paramètre, la méthode getSession nous retournerait un objet null.

Avec cet objet session, vous allez pouvoir lui ajouter des objets (méthode setAttribute), en retirer (méthode removeAttribute) ou en lire (méthode getAttribute).

3.3.3.L’interface SingleThreadModel


Nous avons vu qu’une servlet n’a qu’une seule instance qui est ‘attaquée’ par plusieurs threads à la fois (1 thread par client). Ceci peut parfois être gênant lorsque l’on veut, par exemple, qu’un objet de connexion à une base de données ne soit pas partagé parmi les threads, la modification d’un fichier précis …
Une première solution serait d’affecter l’attribut synchronized à la méthode service de la servlet.

Cependant il existe un meilleur moyen de gérer cela. En effet, il existe l’interface SingleThreadModel qui permet d’indiquer au moteur de servlets que l’on souhaite qu’une instance de la servlet ne soit « attaquée » que par un Thread à la fois.

Cette interface ne comporte aucune méthode à implémenter, elle ne représente qu’un drapeau pour le moteur de servlet.

Finalement cette interface est pratique car elle permet en quelques sortes de sécuriser les accès concurrents, cependant ce n’est pas la meilleure solution. L’idéal est de créer dans le cas d’une connexion à la base de données, une gestion de pool de connexions multithreadées. En effet, il se peut que la base de données n’accepte qu’un nombre restreint de connexions (qui peut être dépassé par le nombre de clients accédant à la servlet).

3.3.4.Utilisation du ServletContext


On appelle contexte associé à la servlet (ServletContext) l’environnement au sein duquel la servlet s’exécute. L’objet ServletContext est créé par le containeur de servlet et permet d’accéder à des informations rattachées à l’environnement.
L’objet créé est partagé par toutes les servlets du containeur. Cela permet donc de partager des informations entre les servlets.

3.3.4.1.Description de l’objet ServletContext


Voici une description des méthodes principales de l’objet ServletContext :

  • La méthode Object getAttribute(String name) : retourne l’attribut associé à name

  • La méthode setAttribute(String name, Object o) : assigne un objet à un nom d’attribut

  • La méthode removeAttribute(String name) : supprime un attribut du context

  • La méthode Enumeration getAttributeNames() : retourne la liste des attributs du contexte

  • La méthode int getMajorVersion() : retourne la dernière version supportée par l’environnement

  • La méthode int getMinorVersion() : retourne la première version minimale supportée

3.3.4.2.Utilisation l’objet ServletContext


L’accès au context se fait par le biais de la méthode getServletContext() de la servlet. L’objet récupéré est du type ServletContext.







Descriptif 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 

Retrouvez ci-dessous les autres sections du Laboratoire Sun
Exemples de code
JavaManipuler les looks and feel (lister et affecter)10/15/07
JavaFaire sa propre injection de dépendance avec les annotations5/9/06
JavaSplash screen avec progress Bar5/5/06
JavaFaire un splash screen en swing5/5/06

Essentiels de cours Java
JavaEJB 3 - Les Entreprise Java Bean version 3 (JavaBeans)
Cet essentiel est la suite de « Entreprise JavaBean 2.1 ». Cependant, nous allons étudier les nouvelles spécifications 3.0 qui simplifient énormément le développement par rapport aux EJB 2.6/20/06
JavaSWT - Créer des interfaces graphiques performantes
SWT (Standard Widget Toolkit) est une librairie graphique qui vous permet de réaliser des applications graphiques Java beaucoup plus avancées et surtout plus rapide à l’exécution.1/29/06
JavaStruts - Un framework MVC pour vos applications J2EE
Struts est un framework open-source qui vous permet de gagner du temps, mais qui permet aussi de voir des applications complexes comme une suite de composants de base : Vues, Actions, Modèles. Vous gagnez ainsi en évolutivité et en lisibilité du code.1/13/06
JavaHibernate - Persistance objet - relationnel
Cet essentiel explique comment utiliser Hibernate afin de gérer la persistance objet relationnel au sein de vos applications Java.12/14/05
JavaIntroduction J2EE - Applications d'entreprise
Cours d'introduction aux diverses technologies et outils que l'on peut rencontrer dans le monde du Java orienté entreprise J2EE12/14/05
JavaEJB 2 - Les Entreprise Java Bean (JavaBeans)
L'objectif avec EJB2 (Entreprise JavaBeans) est d'introduire les concepts de l’Ingénierie Logicielle Basée sur les Composants.12/14/05
JavaDesign Pattern - Améliorez l'architecture de vos programmes
Afin de répondre a des situation récurrentes en programmation, les "design pattern" apportent une solution type à beaucoup de contraintes liées à la programmation objet.12/14/05
JavaArchitecture J2EE - Comment organiser son application J2EE
Ce cours explique comment créer un code modulable, lisible et évolutif afin d'assurer la pérénité de son application.12/14/05
JavaLes web-services - Publication de services
Le développement tend vers les technologies du Web. Il est difficile de faire la distinction entre les différents logiciels qui sont de plus en plus intégrés au Web. Les Web Services rentrent dans l’optique de différencier bien précisément les couches.12/14/05
JavaAnt - L'automatisation des tâches du programmeur
Ecrire des scripts afin d'exécuter les tâches récurrentes10/31/05
JavaIntroduction au langage Java - Présentation & historique
Présentation des origines du langage, ainsi que se buts premiers8/11/05
JavaLa Syntaxe Java - Bases & nomenclatures
Bases de la syntaxe du langage Java8/11/05
JavaLes Classes - Concepts & héritage
Base du développement objet en Java grâce aux classes8/11/05
JavaLes Exceptions - Gestion d'erreurs
Gérer les erreurs liés à la programmation8/11/05

Articles
Eclipse Europa : le successeur de Callisto
Après Eclipse Callisto (Eclipse 3.2), la fondation Eclipse sort la nouvelle mouture d'Eclipse appelée Europa (Eclipse 3.3) faisant ainsi passer le nombre de projets embarqués de 10 à 21. Que ceux qui sont réticents aux « distributions » d'Eclipse se rassu12/21/07
JavaCruiseControl : l’outil d’intégration continue à avoir dans sa boite à outils
CruiseControl est un projet open-source offrant de multiples fonctionnalités pour l’intégration, que ce soit pour des développements Java ou .Net. Il est courant sur un projet d’être plusieurs développeurs avec des tâches de développement réparties. Dans7/2/07
JavaEJB3 - Des concepts à l'écriture du code - Editions DUNOD
Consulter le résumé du premier ouvrage du laboratoire Sun de SUPINFO : EJB3 - Des concepts à l'écriture du code. Guide du développeur, éditions DUNOD.5/27/07
JavaPassage de certification Java Web (SCWCD)
Passer une certification est toujours un moment important car cela permet de mieux faire reconnaître ses compétences face à un recruteur ou un employeur.5/12/07
JavaGoogle Web Toolkit
Google Web Toolkit est un framework java pour générer du javascript et des requêtes Ajax à partir d’un code java. Voilà comment il fonctionne.5/10/07
JavaJ2ME Vs SDE
Demain, les terminaux « légers » seront plus nombreux que les ordinateurs personnels, ce qui entraîne une bataille sur le choix d’une plateforme identique à tous ces terminaux… Aujourd’hui nous retrouvons le J2ME ainsi que le SDE qui s’offrent une rude b4/22/07

Tips du laboratoire
EclipseVisual Editor avec Eclipse Europa, c'est possible3/28/08
EclipseGérer les projets dans un workspace.10/16/07
JavaManager votre server d'application avec Eclipse4/21/07
JavaVue des sub-packages avec Eclipse4/21/07
JavaGlisser-déposer avec Eclipse4/21/07

Laboratoire SUPINFO des technologies Sun
labo-sun@supinfo.com


Conditions d'utilisation et © Copyright SUPINFO International University
23, rue de Château Landon - 75010 PARIS - Tél : +33 (0) 153359700 Fax : +33 (0) 153359701
Respect de la vie privée