64
Le développement d’applications Web

Introductions Aux Servlets

Embed Size (px)

Citation preview

Le deacuteveloppement drsquoapplications Web

Plan

bull Principes des applications Webbull Origine et utiliteacute des Servletsbull Preacutesentation des Servletsbull Les JSPbull La Standard TAG Librarybull Servlet JSP et accegraves aux SGBD

Short History

bull Deacuteveloppement de pages en HTMLbull Scripts CGI

ndash Programmes C shell scripts perl

bull Langages speacutecifiquesndash PHP JSP ASP (Server Side scripting)ndash JavaScript (Client Side Scripting)

bull Evolutions de HTMLndash XHTML CSS JavaScript

Quels sont les problegravemes

bull Application distribueacuteendash Concurrence drsquoaccegravesndash Seacutecuriteacutendash Passage agrave lrsquoeacutechelle

bull Protocole HTTP (stateless)ndash Identification des clientsndash Maintien des sessions

Les Servlets

bull Permettre la programmation dapplications coteacute serveur

bull Permettre lextension dun serveur Web en java

bull Permettre la construction dappli Web dynamique

bull Equivalent des CGI en java

Fonctionnement dun servlet

bull Un servlet lit les donneacutees envoyeacutees par un client Web (transmises par le serveur)ndash Donneacutees explicites (Formulaire)ndash Donneacutees implicites (Request Header)

bull Il geacutenegravere un reacutesultatbull Il envoit le reacutesultat au client

ndash Donneacutees explicites (Page HTML)ndash Donneacutees implicites (Response Header Status code)

Serveur Web

DatabaseJndiJava App

Avantage des servlets

bull Efficaciteacutendash Utilisent des threads plutocirct que des processus comme

les CGIbull Pratique

ndash Librairie tregraves deacuteveloppeacutee (moins que PHP mais plus consistante)

bull Portablendash Deacuteployable quelque soit le serveur (ou presque)

bull Seacutecuriseacutendash Fonctionne dans une machine virtuelle (plus maitrisable)

bull Pas cherndash Nombreux serveurs gratuits

Les technologies

Les containers de servlet

bull Les servlets sont des composantsndash Ils sexeacutecutent dans un containerndash Ils doivent se conformer agrave une interface

preacutedeacutefiniendash Ils ne sont jamais creacuteeacutes

bull Les containersndash Tomcat (jakartaapacheorgtomcat)

bull Implantation de reacutefeacuterence

ndash Jettyndash Weblogicndash

Un premier servlet

bull Le servlet HelloWorldbull Un servlet surcharge la classe HttpServletbull Il doit implanter au moins une des

meacutethodesndash doGetndash doPostndash doPutndash doDelete

Le servlet HelloWorld

Le fichier de configuration

Lrsquoapplication Web

bull Une archive war

bull Deacuteployeacutee dans le serveur Web

bull Webxml = description de lrsquoapplication

Structure drsquoune application

bull Package deacuteployablebull Composants Web Servlet et JSPbull Ressources statiques (images)bull Classes java (helper)bull Librairiesbull Descripteurs de deacuteploiement (webxml)

Execution drsquoune requecircte

Les paramegravetres

bull Les paramegravetres dune requecircte sont accessibles dans lobjet (HttpServletRequest)requestndash requestgetParameter(paramname)

bull Il est possible de reacutecupeacuterer tous les noms des paramegravetresndash requestgetParameterNames()

Exemples paramegravetres

Exemple POST

Exemple POST (suite)

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Plan

bull Principes des applications Webbull Origine et utiliteacute des Servletsbull Preacutesentation des Servletsbull Les JSPbull La Standard TAG Librarybull Servlet JSP et accegraves aux SGBD

Short History

bull Deacuteveloppement de pages en HTMLbull Scripts CGI

ndash Programmes C shell scripts perl

bull Langages speacutecifiquesndash PHP JSP ASP (Server Side scripting)ndash JavaScript (Client Side Scripting)

bull Evolutions de HTMLndash XHTML CSS JavaScript

Quels sont les problegravemes

bull Application distribueacuteendash Concurrence drsquoaccegravesndash Seacutecuriteacutendash Passage agrave lrsquoeacutechelle

bull Protocole HTTP (stateless)ndash Identification des clientsndash Maintien des sessions

Les Servlets

bull Permettre la programmation dapplications coteacute serveur

bull Permettre lextension dun serveur Web en java

bull Permettre la construction dappli Web dynamique

bull Equivalent des CGI en java

Fonctionnement dun servlet

bull Un servlet lit les donneacutees envoyeacutees par un client Web (transmises par le serveur)ndash Donneacutees explicites (Formulaire)ndash Donneacutees implicites (Request Header)

bull Il geacutenegravere un reacutesultatbull Il envoit le reacutesultat au client

ndash Donneacutees explicites (Page HTML)ndash Donneacutees implicites (Response Header Status code)

Serveur Web

DatabaseJndiJava App

Avantage des servlets

bull Efficaciteacutendash Utilisent des threads plutocirct que des processus comme

les CGIbull Pratique

ndash Librairie tregraves deacuteveloppeacutee (moins que PHP mais plus consistante)

bull Portablendash Deacuteployable quelque soit le serveur (ou presque)

bull Seacutecuriseacutendash Fonctionne dans une machine virtuelle (plus maitrisable)

bull Pas cherndash Nombreux serveurs gratuits

Les technologies

Les containers de servlet

bull Les servlets sont des composantsndash Ils sexeacutecutent dans un containerndash Ils doivent se conformer agrave une interface

preacutedeacutefiniendash Ils ne sont jamais creacuteeacutes

bull Les containersndash Tomcat (jakartaapacheorgtomcat)

bull Implantation de reacutefeacuterence

ndash Jettyndash Weblogicndash

Un premier servlet

bull Le servlet HelloWorldbull Un servlet surcharge la classe HttpServletbull Il doit implanter au moins une des

meacutethodesndash doGetndash doPostndash doPutndash doDelete

Le servlet HelloWorld

Le fichier de configuration

Lrsquoapplication Web

bull Une archive war

bull Deacuteployeacutee dans le serveur Web

bull Webxml = description de lrsquoapplication

Structure drsquoune application

bull Package deacuteployablebull Composants Web Servlet et JSPbull Ressources statiques (images)bull Classes java (helper)bull Librairiesbull Descripteurs de deacuteploiement (webxml)

Execution drsquoune requecircte

Les paramegravetres

bull Les paramegravetres dune requecircte sont accessibles dans lobjet (HttpServletRequest)requestndash requestgetParameter(paramname)

bull Il est possible de reacutecupeacuterer tous les noms des paramegravetresndash requestgetParameterNames()

Exemples paramegravetres

Exemple POST

Exemple POST (suite)

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Short History

bull Deacuteveloppement de pages en HTMLbull Scripts CGI

ndash Programmes C shell scripts perl

bull Langages speacutecifiquesndash PHP JSP ASP (Server Side scripting)ndash JavaScript (Client Side Scripting)

bull Evolutions de HTMLndash XHTML CSS JavaScript

Quels sont les problegravemes

bull Application distribueacuteendash Concurrence drsquoaccegravesndash Seacutecuriteacutendash Passage agrave lrsquoeacutechelle

bull Protocole HTTP (stateless)ndash Identification des clientsndash Maintien des sessions

Les Servlets

bull Permettre la programmation dapplications coteacute serveur

bull Permettre lextension dun serveur Web en java

bull Permettre la construction dappli Web dynamique

bull Equivalent des CGI en java

Fonctionnement dun servlet

bull Un servlet lit les donneacutees envoyeacutees par un client Web (transmises par le serveur)ndash Donneacutees explicites (Formulaire)ndash Donneacutees implicites (Request Header)

bull Il geacutenegravere un reacutesultatbull Il envoit le reacutesultat au client

ndash Donneacutees explicites (Page HTML)ndash Donneacutees implicites (Response Header Status code)

Serveur Web

DatabaseJndiJava App

Avantage des servlets

bull Efficaciteacutendash Utilisent des threads plutocirct que des processus comme

les CGIbull Pratique

ndash Librairie tregraves deacuteveloppeacutee (moins que PHP mais plus consistante)

bull Portablendash Deacuteployable quelque soit le serveur (ou presque)

bull Seacutecuriseacutendash Fonctionne dans une machine virtuelle (plus maitrisable)

bull Pas cherndash Nombreux serveurs gratuits

Les technologies

Les containers de servlet

bull Les servlets sont des composantsndash Ils sexeacutecutent dans un containerndash Ils doivent se conformer agrave une interface

preacutedeacutefiniendash Ils ne sont jamais creacuteeacutes

bull Les containersndash Tomcat (jakartaapacheorgtomcat)

bull Implantation de reacutefeacuterence

ndash Jettyndash Weblogicndash

Un premier servlet

bull Le servlet HelloWorldbull Un servlet surcharge la classe HttpServletbull Il doit implanter au moins une des

meacutethodesndash doGetndash doPostndash doPutndash doDelete

Le servlet HelloWorld

Le fichier de configuration

Lrsquoapplication Web

bull Une archive war

bull Deacuteployeacutee dans le serveur Web

bull Webxml = description de lrsquoapplication

Structure drsquoune application

bull Package deacuteployablebull Composants Web Servlet et JSPbull Ressources statiques (images)bull Classes java (helper)bull Librairiesbull Descripteurs de deacuteploiement (webxml)

Execution drsquoune requecircte

Les paramegravetres

bull Les paramegravetres dune requecircte sont accessibles dans lobjet (HttpServletRequest)requestndash requestgetParameter(paramname)

bull Il est possible de reacutecupeacuterer tous les noms des paramegravetresndash requestgetParameterNames()

Exemples paramegravetres

Exemple POST

Exemple POST (suite)

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Quels sont les problegravemes

bull Application distribueacuteendash Concurrence drsquoaccegravesndash Seacutecuriteacutendash Passage agrave lrsquoeacutechelle

bull Protocole HTTP (stateless)ndash Identification des clientsndash Maintien des sessions

Les Servlets

bull Permettre la programmation dapplications coteacute serveur

bull Permettre lextension dun serveur Web en java

bull Permettre la construction dappli Web dynamique

bull Equivalent des CGI en java

Fonctionnement dun servlet

bull Un servlet lit les donneacutees envoyeacutees par un client Web (transmises par le serveur)ndash Donneacutees explicites (Formulaire)ndash Donneacutees implicites (Request Header)

bull Il geacutenegravere un reacutesultatbull Il envoit le reacutesultat au client

ndash Donneacutees explicites (Page HTML)ndash Donneacutees implicites (Response Header Status code)

Serveur Web

DatabaseJndiJava App

Avantage des servlets

bull Efficaciteacutendash Utilisent des threads plutocirct que des processus comme

les CGIbull Pratique

ndash Librairie tregraves deacuteveloppeacutee (moins que PHP mais plus consistante)

bull Portablendash Deacuteployable quelque soit le serveur (ou presque)

bull Seacutecuriseacutendash Fonctionne dans une machine virtuelle (plus maitrisable)

bull Pas cherndash Nombreux serveurs gratuits

Les technologies

Les containers de servlet

bull Les servlets sont des composantsndash Ils sexeacutecutent dans un containerndash Ils doivent se conformer agrave une interface

preacutedeacutefiniendash Ils ne sont jamais creacuteeacutes

bull Les containersndash Tomcat (jakartaapacheorgtomcat)

bull Implantation de reacutefeacuterence

ndash Jettyndash Weblogicndash

Un premier servlet

bull Le servlet HelloWorldbull Un servlet surcharge la classe HttpServletbull Il doit implanter au moins une des

meacutethodesndash doGetndash doPostndash doPutndash doDelete

Le servlet HelloWorld

Le fichier de configuration

Lrsquoapplication Web

bull Une archive war

bull Deacuteployeacutee dans le serveur Web

bull Webxml = description de lrsquoapplication

Structure drsquoune application

bull Package deacuteployablebull Composants Web Servlet et JSPbull Ressources statiques (images)bull Classes java (helper)bull Librairiesbull Descripteurs de deacuteploiement (webxml)

Execution drsquoune requecircte

Les paramegravetres

bull Les paramegravetres dune requecircte sont accessibles dans lobjet (HttpServletRequest)requestndash requestgetParameter(paramname)

bull Il est possible de reacutecupeacuterer tous les noms des paramegravetresndash requestgetParameterNames()

Exemples paramegravetres

Exemple POST

Exemple POST (suite)

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Les Servlets

bull Permettre la programmation dapplications coteacute serveur

bull Permettre lextension dun serveur Web en java

bull Permettre la construction dappli Web dynamique

bull Equivalent des CGI en java

Fonctionnement dun servlet

bull Un servlet lit les donneacutees envoyeacutees par un client Web (transmises par le serveur)ndash Donneacutees explicites (Formulaire)ndash Donneacutees implicites (Request Header)

bull Il geacutenegravere un reacutesultatbull Il envoit le reacutesultat au client

ndash Donneacutees explicites (Page HTML)ndash Donneacutees implicites (Response Header Status code)

Serveur Web

DatabaseJndiJava App

Avantage des servlets

bull Efficaciteacutendash Utilisent des threads plutocirct que des processus comme

les CGIbull Pratique

ndash Librairie tregraves deacuteveloppeacutee (moins que PHP mais plus consistante)

bull Portablendash Deacuteployable quelque soit le serveur (ou presque)

bull Seacutecuriseacutendash Fonctionne dans une machine virtuelle (plus maitrisable)

bull Pas cherndash Nombreux serveurs gratuits

Les technologies

Les containers de servlet

bull Les servlets sont des composantsndash Ils sexeacutecutent dans un containerndash Ils doivent se conformer agrave une interface

preacutedeacutefiniendash Ils ne sont jamais creacuteeacutes

bull Les containersndash Tomcat (jakartaapacheorgtomcat)

bull Implantation de reacutefeacuterence

ndash Jettyndash Weblogicndash

Un premier servlet

bull Le servlet HelloWorldbull Un servlet surcharge la classe HttpServletbull Il doit implanter au moins une des

meacutethodesndash doGetndash doPostndash doPutndash doDelete

Le servlet HelloWorld

Le fichier de configuration

Lrsquoapplication Web

bull Une archive war

bull Deacuteployeacutee dans le serveur Web

bull Webxml = description de lrsquoapplication

Structure drsquoune application

bull Package deacuteployablebull Composants Web Servlet et JSPbull Ressources statiques (images)bull Classes java (helper)bull Librairiesbull Descripteurs de deacuteploiement (webxml)

Execution drsquoune requecircte

Les paramegravetres

bull Les paramegravetres dune requecircte sont accessibles dans lobjet (HttpServletRequest)requestndash requestgetParameter(paramname)

bull Il est possible de reacutecupeacuterer tous les noms des paramegravetresndash requestgetParameterNames()

Exemples paramegravetres

Exemple POST

Exemple POST (suite)

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Fonctionnement dun servlet

bull Un servlet lit les donneacutees envoyeacutees par un client Web (transmises par le serveur)ndash Donneacutees explicites (Formulaire)ndash Donneacutees implicites (Request Header)

bull Il geacutenegravere un reacutesultatbull Il envoit le reacutesultat au client

ndash Donneacutees explicites (Page HTML)ndash Donneacutees implicites (Response Header Status code)

Serveur Web

DatabaseJndiJava App

Avantage des servlets

bull Efficaciteacutendash Utilisent des threads plutocirct que des processus comme

les CGIbull Pratique

ndash Librairie tregraves deacuteveloppeacutee (moins que PHP mais plus consistante)

bull Portablendash Deacuteployable quelque soit le serveur (ou presque)

bull Seacutecuriseacutendash Fonctionne dans une machine virtuelle (plus maitrisable)

bull Pas cherndash Nombreux serveurs gratuits

Les technologies

Les containers de servlet

bull Les servlets sont des composantsndash Ils sexeacutecutent dans un containerndash Ils doivent se conformer agrave une interface

preacutedeacutefiniendash Ils ne sont jamais creacuteeacutes

bull Les containersndash Tomcat (jakartaapacheorgtomcat)

bull Implantation de reacutefeacuterence

ndash Jettyndash Weblogicndash

Un premier servlet

bull Le servlet HelloWorldbull Un servlet surcharge la classe HttpServletbull Il doit implanter au moins une des

meacutethodesndash doGetndash doPostndash doPutndash doDelete

Le servlet HelloWorld

Le fichier de configuration

Lrsquoapplication Web

bull Une archive war

bull Deacuteployeacutee dans le serveur Web

bull Webxml = description de lrsquoapplication

Structure drsquoune application

bull Package deacuteployablebull Composants Web Servlet et JSPbull Ressources statiques (images)bull Classes java (helper)bull Librairiesbull Descripteurs de deacuteploiement (webxml)

Execution drsquoune requecircte

Les paramegravetres

bull Les paramegravetres dune requecircte sont accessibles dans lobjet (HttpServletRequest)requestndash requestgetParameter(paramname)

bull Il est possible de reacutecupeacuterer tous les noms des paramegravetresndash requestgetParameterNames()

Exemples paramegravetres

Exemple POST

Exemple POST (suite)

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Avantage des servlets

bull Efficaciteacutendash Utilisent des threads plutocirct que des processus comme

les CGIbull Pratique

ndash Librairie tregraves deacuteveloppeacutee (moins que PHP mais plus consistante)

bull Portablendash Deacuteployable quelque soit le serveur (ou presque)

bull Seacutecuriseacutendash Fonctionne dans une machine virtuelle (plus maitrisable)

bull Pas cherndash Nombreux serveurs gratuits

Les technologies

Les containers de servlet

bull Les servlets sont des composantsndash Ils sexeacutecutent dans un containerndash Ils doivent se conformer agrave une interface

preacutedeacutefiniendash Ils ne sont jamais creacuteeacutes

bull Les containersndash Tomcat (jakartaapacheorgtomcat)

bull Implantation de reacutefeacuterence

ndash Jettyndash Weblogicndash

Un premier servlet

bull Le servlet HelloWorldbull Un servlet surcharge la classe HttpServletbull Il doit implanter au moins une des

meacutethodesndash doGetndash doPostndash doPutndash doDelete

Le servlet HelloWorld

Le fichier de configuration

Lrsquoapplication Web

bull Une archive war

bull Deacuteployeacutee dans le serveur Web

bull Webxml = description de lrsquoapplication

Structure drsquoune application

bull Package deacuteployablebull Composants Web Servlet et JSPbull Ressources statiques (images)bull Classes java (helper)bull Librairiesbull Descripteurs de deacuteploiement (webxml)

Execution drsquoune requecircte

Les paramegravetres

bull Les paramegravetres dune requecircte sont accessibles dans lobjet (HttpServletRequest)requestndash requestgetParameter(paramname)

bull Il est possible de reacutecupeacuterer tous les noms des paramegravetresndash requestgetParameterNames()

Exemples paramegravetres

Exemple POST

Exemple POST (suite)

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Les technologies

Les containers de servlet

bull Les servlets sont des composantsndash Ils sexeacutecutent dans un containerndash Ils doivent se conformer agrave une interface

preacutedeacutefiniendash Ils ne sont jamais creacuteeacutes

bull Les containersndash Tomcat (jakartaapacheorgtomcat)

bull Implantation de reacutefeacuterence

ndash Jettyndash Weblogicndash

Un premier servlet

bull Le servlet HelloWorldbull Un servlet surcharge la classe HttpServletbull Il doit implanter au moins une des

meacutethodesndash doGetndash doPostndash doPutndash doDelete

Le servlet HelloWorld

Le fichier de configuration

Lrsquoapplication Web

bull Une archive war

bull Deacuteployeacutee dans le serveur Web

bull Webxml = description de lrsquoapplication

Structure drsquoune application

bull Package deacuteployablebull Composants Web Servlet et JSPbull Ressources statiques (images)bull Classes java (helper)bull Librairiesbull Descripteurs de deacuteploiement (webxml)

Execution drsquoune requecircte

Les paramegravetres

bull Les paramegravetres dune requecircte sont accessibles dans lobjet (HttpServletRequest)requestndash requestgetParameter(paramname)

bull Il est possible de reacutecupeacuterer tous les noms des paramegravetresndash requestgetParameterNames()

Exemples paramegravetres

Exemple POST

Exemple POST (suite)

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Les containers de servlet

bull Les servlets sont des composantsndash Ils sexeacutecutent dans un containerndash Ils doivent se conformer agrave une interface

preacutedeacutefiniendash Ils ne sont jamais creacuteeacutes

bull Les containersndash Tomcat (jakartaapacheorgtomcat)

bull Implantation de reacutefeacuterence

ndash Jettyndash Weblogicndash

Un premier servlet

bull Le servlet HelloWorldbull Un servlet surcharge la classe HttpServletbull Il doit implanter au moins une des

meacutethodesndash doGetndash doPostndash doPutndash doDelete

Le servlet HelloWorld

Le fichier de configuration

Lrsquoapplication Web

bull Une archive war

bull Deacuteployeacutee dans le serveur Web

bull Webxml = description de lrsquoapplication

Structure drsquoune application

bull Package deacuteployablebull Composants Web Servlet et JSPbull Ressources statiques (images)bull Classes java (helper)bull Librairiesbull Descripteurs de deacuteploiement (webxml)

Execution drsquoune requecircte

Les paramegravetres

bull Les paramegravetres dune requecircte sont accessibles dans lobjet (HttpServletRequest)requestndash requestgetParameter(paramname)

bull Il est possible de reacutecupeacuterer tous les noms des paramegravetresndash requestgetParameterNames()

Exemples paramegravetres

Exemple POST

Exemple POST (suite)

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Un premier servlet

bull Le servlet HelloWorldbull Un servlet surcharge la classe HttpServletbull Il doit implanter au moins une des

meacutethodesndash doGetndash doPostndash doPutndash doDelete

Le servlet HelloWorld

Le fichier de configuration

Lrsquoapplication Web

bull Une archive war

bull Deacuteployeacutee dans le serveur Web

bull Webxml = description de lrsquoapplication

Structure drsquoune application

bull Package deacuteployablebull Composants Web Servlet et JSPbull Ressources statiques (images)bull Classes java (helper)bull Librairiesbull Descripteurs de deacuteploiement (webxml)

Execution drsquoune requecircte

Les paramegravetres

bull Les paramegravetres dune requecircte sont accessibles dans lobjet (HttpServletRequest)requestndash requestgetParameter(paramname)

bull Il est possible de reacutecupeacuterer tous les noms des paramegravetresndash requestgetParameterNames()

Exemples paramegravetres

Exemple POST

Exemple POST (suite)

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Le servlet HelloWorld

Le fichier de configuration

Lrsquoapplication Web

bull Une archive war

bull Deacuteployeacutee dans le serveur Web

bull Webxml = description de lrsquoapplication

Structure drsquoune application

bull Package deacuteployablebull Composants Web Servlet et JSPbull Ressources statiques (images)bull Classes java (helper)bull Librairiesbull Descripteurs de deacuteploiement (webxml)

Execution drsquoune requecircte

Les paramegravetres

bull Les paramegravetres dune requecircte sont accessibles dans lobjet (HttpServletRequest)requestndash requestgetParameter(paramname)

bull Il est possible de reacutecupeacuterer tous les noms des paramegravetresndash requestgetParameterNames()

Exemples paramegravetres

Exemple POST

Exemple POST (suite)

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Le fichier de configuration

Lrsquoapplication Web

bull Une archive war

bull Deacuteployeacutee dans le serveur Web

bull Webxml = description de lrsquoapplication

Structure drsquoune application

bull Package deacuteployablebull Composants Web Servlet et JSPbull Ressources statiques (images)bull Classes java (helper)bull Librairiesbull Descripteurs de deacuteploiement (webxml)

Execution drsquoune requecircte

Les paramegravetres

bull Les paramegravetres dune requecircte sont accessibles dans lobjet (HttpServletRequest)requestndash requestgetParameter(paramname)

bull Il est possible de reacutecupeacuterer tous les noms des paramegravetresndash requestgetParameterNames()

Exemples paramegravetres

Exemple POST

Exemple POST (suite)

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Lrsquoapplication Web

bull Une archive war

bull Deacuteployeacutee dans le serveur Web

bull Webxml = description de lrsquoapplication

Structure drsquoune application

bull Package deacuteployablebull Composants Web Servlet et JSPbull Ressources statiques (images)bull Classes java (helper)bull Librairiesbull Descripteurs de deacuteploiement (webxml)

Execution drsquoune requecircte

Les paramegravetres

bull Les paramegravetres dune requecircte sont accessibles dans lobjet (HttpServletRequest)requestndash requestgetParameter(paramname)

bull Il est possible de reacutecupeacuterer tous les noms des paramegravetresndash requestgetParameterNames()

Exemples paramegravetres

Exemple POST

Exemple POST (suite)

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Structure drsquoune application

bull Package deacuteployablebull Composants Web Servlet et JSPbull Ressources statiques (images)bull Classes java (helper)bull Librairiesbull Descripteurs de deacuteploiement (webxml)

Execution drsquoune requecircte

Les paramegravetres

bull Les paramegravetres dune requecircte sont accessibles dans lobjet (HttpServletRequest)requestndash requestgetParameter(paramname)

bull Il est possible de reacutecupeacuterer tous les noms des paramegravetresndash requestgetParameterNames()

Exemples paramegravetres

Exemple POST

Exemple POST (suite)

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Execution drsquoune requecircte

Les paramegravetres

bull Les paramegravetres dune requecircte sont accessibles dans lobjet (HttpServletRequest)requestndash requestgetParameter(paramname)

bull Il est possible de reacutecupeacuterer tous les noms des paramegravetresndash requestgetParameterNames()

Exemples paramegravetres

Exemple POST

Exemple POST (suite)

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Les paramegravetres

bull Les paramegravetres dune requecircte sont accessibles dans lobjet (HttpServletRequest)requestndash requestgetParameter(paramname)

bull Il est possible de reacutecupeacuterer tous les noms des paramegravetresndash requestgetParameterNames()

Exemples paramegravetres

Exemple POST

Exemple POST (suite)

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Exemples paramegravetres

Exemple POST

Exemple POST (suite)

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Exemple POST

Exemple POST (suite)

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Exemple POST (suite)

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

La classe HttpServlet

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Linterface HttpServletRequest

bull Fournit les informations sur la requecircte du client au serveur

bull Principales meacutethodes (pour linstant)ndash String getParameter(String name)ndash Enumeration getParameterNames()

bull Retourne une eacutenumeacuteration de tous les noms de paramegravetresndash String[] getParameterValues()

bull Retourne un tableau contenant toutes les valeurs des paramegravetres

ndash String getHeader(String name)ndash Enumeration getHeaderNames()

bull Retourne une eacutenumeacuteration de tous les noms des proprieacuteteacutes du header

ndash String[] getHeaderValues()bull Retourne un tableau de toutes les valeurs du header

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Les request headers

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Linterface HttpServletResponse

bull Objet fournissant les services pour envoyer la reacuteponse agrave un client

bull Les principales meacutethodes sontndash javaioPrintWriter getWriter()

bull Pour reacutecupeacuterer un printWriter qui permet denvoyer du texte au client

ndash public void setContentLength(int len)bull Positionne le Content-Length Header

ndash public void setContentType(javalangString type) bull Position le Content-Type header (exemple texthtml)

ndash public void sendError(int sc javalangString msg) throws javaioIOException

bull Envoi un message derreur au client (cf code dans lAPI)ndash public void setHeader(javalangString name

javalangString value)

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

webxml

bull Le fichier webxml donne des instructions sur le deacuteploiement du servlet dans le container

bull web-appndash La description dune Web Application

bull Servletndash La relation entre le nom du servlet et la classe

qui limplantebull Servlet-mapping

ndash La relation entre le nom du servlet et lurl qui permet dy acceacuteder

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Les paramegravetres dinitialisation

bull Les servlets peuvent avoir des paramegravetres dinitialisation

bull Ces paramegravetres peuvent ecirctre changeacutes sans avoir agrave recompiler lapplicationndash ltinit-paramgt

bull ltparam-namegttestValueltparam-namegtbull ltparam-valuegt12ltparam-valuegtbull ltdescriptiongtune valeur quelconqueltdescriptiongt

ndash ltinit-paramgtbull Ces paramegravetres peuvent ecirctre utiliseacutes avec

la meacutethodendash javaxservletgetInitParameter()

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Exemple

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Le servlet mapping

bull Permet de construire la relation entre un servlet et son URLndash ltservlet-mappinggt

bull ltservlet-namegtTestltservlet-namegtbull lturl-patterngtTestlturl-patterngt

ndash ltservlet-mappinggtbull Tous les urls correspondant agrave

httphostportwebappurl-pattern deacuteclencherons lrsquoexeacutecution du servlet

bull Exemplesndash dondash Testndash courstest

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Les eacuteleacutements du chemin de requecircte

bull ContextPath le chemin du contexte de deacuteploiement

bull ServletPath la section du chemin qui a deacuteclencheacute le mapping

bull PathInfo la partie de la requecircte qui nrsquoest ni le ContextPath ni le ServletPathndash RequestgetContextPath()ndash RequestgetServletPath()ndash RequestgetPathInfo()

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Exemples

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Autre proprieacuteteacutes

bull Pour le mapping mimendash ltmime-mappinggt

bull Pour les fichiers agrave charger quand un nom de reacutepertoire est donneacutendash ltwelcome-file-listgt

bull Pour les pages derreurndash lterror-pagegtndash Pour chaque code derreur on peut fixer une page

speacutecifiquebull Il y en a dautres pour

ndash La seacutecuriteacutendash Les taglibsndash Les reacutefeacuterences aux ressources utiliseacutes par les servlets

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Les paramegravetres de seacutecuriteacute

bull Permet de lier un nom de role au nom de role utiliseacute en dur dans le servlet pour la seacutecuriteacutendash ltsecurity-role-refgt

bull ltrole-namegtmyAdminltrole-namegtbull ltrole-linkgtadminltrole-linkgt

ndash ltsecurity-role-refgt

bull Cela permet deacuteviter davoir agrave changer le code du servlet pour ladapter agrave lenvironnement

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Le cycle de vie dun servlet

bull Tous les servlets ont le mecircme cycle de viendash Le container charge le servlet

bull La fonction init() est appeleacutee (initialisation de variables connection agrave des bases de donneacutees)

ndash Le servlet reacutepond aux requecirctes des clientsndash Le contaire deacutetruit le servlet

bull La fonction destroy() est appeleacutee (fermeture des connections)

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

doGet et doPost

R e q u e s t

S e r v i c e ( )

R e s p o n s e

S e r v e r H t t p S e r v l e t s u b c l a s s

K e y I m p l e m e n t e d b y s u b c l a s s

d o G e t ( )

d o P o s t ( )

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

La visibiliteacute

(from jGuru)

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Le Servlet Context

bull Maintien des donneacutees pour toute lrsquoapplication

bull Fournit le request dispatcherbull Donneacutees drsquoinitialisations pour toute

lrsquoapplicationbull Logbull Un ServletContext par application et par

JVM

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Le ServletContext

bull Objet permettant au servlet de communiquer avec le servlet container

bull Obtenu avecndash ServletgetServletContext()

bull Les principales meacutethodes de ServletContextndash Object getAttribute(String name)

bull Retourne un attribut du contextendash Void setAttribute(String name Object value)

bull Ajoute ou remplace un objet dans le contextendash String getInitParameter(String name)

bull Retourne un paramegravetre dinitialisation de lapplicationndash Void Log(String msg)

bull Ajoute un message dans le log file du servlet container

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Le Servlet Context

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Le RequestDispatcher

bull Lobjet RequestDispatcher est utiliseacute pourndash Transfeacuterer la requecircte agrave un autre programmendash Inclure la reacuteponse dun autre programme

bull Pour obtenir le request dispatcher

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Lutilisation du RequestDispatcher

bull La requecircte peut ecirctre transfeacutereacuteendash rdforward(requestresponse)ndash Lutilisation classique consiste agrave avoir un servlet

controcircleur qui transmet les commandes agrave des servlets speacutecialiseacutes

ndash Le controcircle ne revient jamais au servlet

bull La reponse peut ecirctre incluse dans la reacuteponse en cours de constructionndash rdinclude(requestresponse)ndash Ici on peut implanter un equivalent de server

side include

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Exemple drsquoutilisation

Deacutemonstration

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Les attributs du context

bull Valeurs disponibles pour toute lrsquoapplication

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Les Sessions

bull Comment maintenir lrsquoeacutetat drsquoun client au cours drsquoune seacuterie de requecirctes drsquoun mecircme utilisateur pendant un temps donneacute

bull HTTP est statelessbull Comment identifier le client bull Ougrave mettre les donneacutees de la session

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Servlet et sessions

bull La gestion des sessions utilise les techniques classiquesndash url rewritingndash Cookiesndash Champs cacheacutes dans les formulaires

bull LAPI HttpServlet fournit des fonctions pour geacuterer les sessions

bull Limplantation est transparente pour lutilisateur

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Session amp HttpServletRequest

bull Cest le paramegravetre request qui maintient les informations sur la session

bull Les meacutethodes sontndash HttpSession requestgetSession(boolean flag)

bull Flag=true retourne lobjet session courant ou en creacutee un sil ny en a pas

bull Flag=false Retourne lobjet session courant ou null sil ny en a pas

ndash isRequestedSessionIdValid()bull Vrai si lid de la session est valide dans le contexte courant

ndash isRequestedSessionIdFromCookie()bull Vrai si lid de la session vient dun cookie

ndash isRequestedSessionIdFromURL()bull Vrai si lid de la session vient dun URL

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Creacuteation de la session

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Requecircte dans la mecircme session

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Lobjet HttpSession

bull Lobjet HttpSession permet de conserver des valeurs entre des appels dun client

bull Les principales meacutethodes sontndash Object getAttribute(String name)

bull Reacutecupegravere la valeur de lattribut par son nomndash Enumeration getAttributeNames()

bull Retourne la liste de tous les attributsndash Void setAttribute(String name Object value)

bull Ajoute un attribut agrave la sessionndash String getId()

bull Retourne lidentifiant de la sessionndash Void invalidate()

bull Invalide la sessionndash Long getCreationTime()ndash Long getLastAccessedTime()ndash Long getMaxInactiveInterval()ndash ServletContext getServletContext()

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Configuration des sessions

bull Il est possible de fixer la dureacutee dune session par application (en minutes)ndash ltsession-configgt

bull ltsession-timeoutgt30ltsession-timeoutgt

ndash ltsession-configgt

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Terminer une session

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Le contexte

bull Il est possible davoir des paramegravetres dinitialisation du contextendash ltcontext-paramgt

bull ltparam-namegtdatabaseltparam-namegtbull ltparam-valuegttestDBltparam-valuegtbull ltdescriptiongtle nom de la baseltdescriptiongt

ndash ltcontext-paramgt

bull Ces paramegravetres peuvent ecirctre utiliseacutes dans le servlet avec la meacutethodendash JavaxservletServletContext getInitParameter() etndash JavaxservletServletContextgetInitParameterNames()

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Le ServletConfig

bull Objet utiliseacute par le container de servlet pour passer des valeurs lors de linitialisation du servlet

bull Obtenu avecndash ServletgetServletConfig()

bull Principales meacutethodesndash String getInitParameter(String name)

bull Retourne la valeur dun paramegravetre dinitialisation du servletndash ServletContext getServletContext()

bull Permet de reacutecupeacuterer lobjet servletcontextndash String getServletName()

bull Retourne le nom du servlet comme speacutecifieacute dans le fichier de description

bull Implanteacute par HttpServlet

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Les listeners

bull Les listeners sont des objets dont les meacutethodes sont invoqueacutees en fonction du cycle de vie dun servlet

bull A la creacuteation et agrave la destruction dun contexte (une appli)ndash JavaxservletServletContextListener

bull Quand on modifie les attributs du contextendash JavaxservletServletContextAttributeListener

bull A la creacuteation la suppression le timeout dune sessionndash JavaxservletHttpSessionListener

bull A la creacuteation modification suppression dun attribut de session

ndash JavaxservletHttpSessionAttributeListener

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Les listeners du contexte

Void contextDestroyed(ServletContextEvent sce) Notification that the servlet context is about to be shut down

void contextInitialized(ServletContextEvent sce) Notification that the web application is ready to process requests

ServletContextListener

void attributeAdded(ServletContextAttributeEvent scab) Notification that a new attribute was added to the servlet context

void attributeRemoved(ServletContextAttributeEvent scab) Notification that an existing attribute has been remved from the servlet context

void attributeReplaced(ServletContextAttributeEvent scab)

Notification that an attribute on the servlet context has been replaced

ServletContextAttributeListener

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Les listeners de session

Void sessionCreated(HttpSessionEvent se) Notification that a session was created

void sessionDestroyed(HttpSessionEvent se) Notification that a session was invalidated

HttpSessionListener

void attributeAdded(HttpSessionBindingEvent se) Notification that an attribute has been added to a session

void attributeRemoved(HttpSessionBindingEvent se) Notification that an attribute has been removed from a session

void attributeReplaced(HttpSessionBindingEvent se) Notification that an attribute has been replaced in a session

HttpSessionAttributeListener

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

La deacuteclaration drsquoun listener

ltlistenergt

ltlistener-classgt

coursexemple1SessionCounter

ltlistener-classgt

ltlistenergt

Il nrsquoest pas neacutecessaire de preacuteciser le type du Listener (pourquoi )

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Exemple

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Un autre exemple

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Les filtres

bull Un filtre est un morceau de code exeacutecuteacute entre la requecircte et le laquo endpoint raquo

bull Permettent de faire du pre et post-processing sur une requecirctendash Lire la requecircte modifier la requecircte modifier la

reacuteponse retourner des erreurs au client

bull Mecircme cycle de vie qursquoun servletndash Init doFilter destroy

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Coder un filtre

bull Implanter la meacutethode doFilter()bull Deacuteclarer le filtre dans webxml

ndash Filterndash Filter-mapping

bull Mecircme fonctionnement que pour un servletbull Il faut implanter la fonction doFilterbull Le transfert agrave la suite de la chaine se fait

par la fonction chaindoFilter()ndash Transfert agrave un autre filtre ou agrave un servlet ou

une page HTML ou une page JSPndash La suite srsquoexeacutecute au retour de doFilter

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Inteacuterecirct des filtres

bull Ajouter des fonctions aux applicationsndash Logndash Compressionndash Cache

bull Parfois en utilisant des Wrappers

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Wrapping

bull Principe encapsuler lrsquoobjet requecircte ou lrsquoobjet reacuteponse pour modifier son comportement

bull Encapsulation de request surcharge HttpServletRequestWrapper

bull Encapsulation de reponse surcharge de HttpServletRequestResponse

bull Ensuite il suffit de remplacer lrsquoobjet wrappeacute

bull Le Wrapping peut aussi ecirctre utiliseacute dans des Servlets normaux

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Le Wrapping des reacuteponses

bull Plus compliqueacute que pour les requecirctesbull Neacutecessite de

ndash reacutecupeacuterer la reacuteponse drsquoabordndash Ou drsquoeacutecrire un Writer speacutecialiseacute

bull Utilisations classiquesndash Caching des reacuteponsesndash Compression des reacuteponses

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

Exemple de filtre

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java

La gestion des erreurs

bull Il est possible de deacutefinir les pages agrave afficherndash En fonction derreurs httpndash En fonction dexceptions java

lterror-pagegt ltexception-typegt courseventEventException ltexception-typegt ltlocationgterreurhtmlltlocationgt lterror-pagegt

Dans webxml

lterror-pagegt lterror-codegt404lterror-codegt ltlocationgt404htmlltlocationgtlterror-pagegt

Pour une erreur Http

Pour une exception

java