Introductions Aux Servlets
-
Upload
francois-charoy -
Category
Technology
-
view
9.438 -
download
2
Transcript of Introductions Aux Servlets
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