SlideShare una empresa de Scribd logo
1 de 111
SERVLETS
heithem.abbes@gmail.com2014/2015
Servlet - Définition
 Servlet : Server-side applet
 Applet est une classe s’exécutant chez le client alors que
la servlet s’exécute chez server.
 Une classe java s’exécutant coté serveur
 reçoit et répond aux requêtes de clients web,
 généralement via HTTP  servlet web ou servlet (pour
simplifier)
 Permettre la programmation d'applications web en
Java
Navigateur Web
requête requête
réponseréponse
Servlet
Serveur
Web
Environnement d’exécution de
servlets
 Les servlets s'exécutent dans un conteneur de servlets, appelé aussi
conteneur web
 Conteneur web = serveur web + moteur de servlet
 Etablit le lien entre le serveur web et la servlet
Navigateur Web
requête requête
réponseréponse
Servlet
Serveur
Web
 Exemples de conteneur de servlets
 Tomcat (Implantation de référence)
 Jetty
 Weblogic
 ...
Conteneur
de servlets
Squelette de base de servlet
import javax.servlet.*;
public class MyServlet implements Servlet {
public void init(ServletConfig config) throws ServletException {
…
}
public void service( ServletRequest request, ServletResponse response )
throws ServletException, IOException {
…
}
public void destroy() {
…
}
Cycle de vie d’une servlet
 Le conteneur gère le cycle de vie :
 charge la classe de servlet et initialise une instance de cette
classe
 chaque requête du client est traitée par une instance de
servlet dans un thread séparé
 peut supprimer la servlet
 peut garder la servlet pour traiter d’autres requêtes
Browser
Browser
Browser
Server
Servlet
Instance
Cycle de vie d’une servlet
 Lorsque la servlet est instancié, le conteneur appelle la méthode init()
pour initialiser la servlet
 Sur demande du client, le conteneur appelle la méthode service()
 Avant la suppression de la servlet, le conteneur appelle la méthode
destroy()
Classe Servlet
Appel de la methode
init
Instance de
Servlet
Traitement de requêtes:
appel de la méthode
service
Détruire la Servlet:
appel de la méthode
destroy
Garbage
Collection
ServletConfig
Modèle de programmation
 Une servlet doit implémenter
l’interface javax.servlet.Servlet
 soit directement,
 soit en dérivant d’une classe
implémentant cette interface :
 javax.servlet.GenericServlet : une
classe abstraite indépendante du
protocole
 javax.servlet.http.HttpServlet : une
classe abstraite spécifique au
protocole HTTP
 l’interface javax.servlet.Servlet
possède les méthodes pour
 initialiser la servlet : init()
 recevoir et répondre aux requêtes
des clients : service()
 détruire la servlet et ses
ressources : destroy()
Servlet web
 Pour faciliter le traitement particulier des requêtes web, la
classe Servlet est affinée en javax.servlet.http.HttpServlet
 des méthodes remplacent la méthode service() de la classe mère
 doGet() pour les requêtes http de type GET
 doPost() pour les requêtes http de type POST
 ....
 La classe servlet doit OBLIGATOIREMENT implémenter l’une des
méthodes redéfinies, choisies selon le mode d’envoi du formulaire
html qui l’exécute
 service() de HttpServlet appelle automatiquement la bonne
méthode en fonction du type de requêtes http
HTTP
 HTTP décrit les échanges entre navigateur web (client) et
serveur web : le navigateur effectue une requête HTTP; le
serveur la traite et envoie une réponse HTTP.
 Une requête HTTP a le format suivant :
Ligne de commande (Commande, URL, Version de protocole)
En-tête de requête
[Ligne vide]
Corps de requête
 Une réponse HTTP a le format suivant :
Ligne de statut (Version, Code-réponse, Texte-réponse)
En-tête de réponse
[Ligne vide]
Corps de réponse
 Les commandes essentielles sont GET (obtenir un
document) et POST (envoyer du contenu).
 Les données de la requête sont passées dans l’URL pour un
GET et dans le corps pour un POST.
Développement de Servlet
 Une Servlet web
 étend la classe
javax.servlet.http.HttpServlet
 implémente des méthodes
spécifiques au protocole HTTP
remplacent la méthode service() :
doGet(), doPost()…
 La servlet reçoit les requêtes et renvoie
les réponses via 2 objets :
 Objet requête : javax.servlet.ServletRequest
 contient les informations nécessaires pour
une communication du client vers le serveur
 Objet réponse : javax.servlet.ServletResponse
 contient les informations nécessaires pour
une communication du serveur vers le client
Développement de Servlet
 Si la méthode utilisée est GET, il suffit de redéfinir la
méthode :
public void doGet( HttpServletRequest request,
HttpServletResponse response )
 Si la méthode utilisée est POST, il suffit de redéfinir la
méthode :
public void doPost( HttpServletRequest request,
HttpServletResponse response)
Développement de Servlet
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class ServletName extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res) throws
ServletException {
// lecture de la requête
// traitements
// envoi de la réponse
}
public void doPost(HttpServletRequest req, HttpServletResponse res) throws
ServletException {
// lecture de la requête
// traitements
// envoi de la réponse
}
}
Principe de fonctionnement
 Les fichiers de bytecode (.class) sont stockés sur le
serveur (comme des docs)
 Ils sont désignés par une URL
 http://depinfo-fst.rnu.tn/MaServlet
 Le chargement de l'URL provoque l'exécution de la
servlet
Exemple - HelloServlet
Exemple - HelloServlet
Exemple - HelloServlet
Paramètres des méthodes doGet() et
doPost()
 Utiliser les objets HttpServletRequest et
HttpServletResponse passés en paramètres de
ces méthodes pour implanter le service
 HttpServletRequest contient les informations sur le
formulaire html initial (utile pour doPost())
 La méthode getParameter() récupère les paramètres
d’entrée
 HttpServletResponse contient le flux de sortie pour la
génération de la page html résultat (getWriter())
Aperçu de l’API servlet
 Méthodes importantes d’un objet HttpServletRequest
 String getParameter(String param)
 Retourne la valeur du champ param transmis dans les données
du formulaire
 java.util.Enumeration getParameterNames()
 retourne l'ensemble des noms de paramètres transmis à la servlet
 String getMethod()
 retourne la méthode HTTP (GET ou POST) utilisée pour invoquer
la servlet
 Méthodes importantes d’un objet HttpServletResponse
 void setContentType(String type)
 définit le type MIME du document retourné par la servlet
 PrintWriter getWriter()
 retourne un flux de sortie permettant à la servlet de produire son
résultat
Aperçu de l’API servlet
Autres méthodes appelables sur un objet HttpServletRequest
 String getProtocol()
 retourne le protocole implanté par le serveur (ex. : HTTP/1.1)
 String getServerName() / String getServerPort()
 retourne le nom/port de la machine serveur
 String getRemoteAddr() / String getRemoteHost()
 retourne l'adresse/nom de la machine cliente (ayant invoqué la
servlet)
 String getScheme()
 retourne le protocole utilisé (ex. : http ou https) par le client
 java.io.BufferedReader getReader()
 retourne un flux d'entrée permettant à une servlet chaînée de
récupérer le résultat produit par la servlet précédente
 permet à la servlet chaînée de modifier le résultat
Déploiement d’une Servlet
 Pour déployer une application
dans un conteneur, il faut lui
fournir deux éléments :
 Tous les composants (classes
compilées, ressources ...)
regroupée dans une archive ou
module
 Descripteur de déploiement
contenu dans le module qui
précise au conteneur des options
pour exécuter l'application
 Une servlet doit faire partie d’un module web pour être
déployée
 Un module Web est un ensemble de librairies, de fichiers de
configurations, de code Java (bytecode des servlets...), ...
Déploiement d’une application
web
 Web Application Archive : une application web (*.html, *.jsp,
servlets, ...) packagée dans un archive (.war) et est
paramétrée dans le fichier WEB-INF/web.xml
 Structure
 Fichiers web de l’application (HTML, JSP, js, css...)
 Répertoire « META-INF » : fichiers de configuration
 MANIFEST.MF : informations sur le zip
 Répertoire « WEB-INF » : contenu de l’application
 WEB-INF/web.xml
 Descripteur de déploiement
 WEB-INF/classes/
 class des servlets et des classes (JavaBean, ...) associées
 WEB-INF/lib/
 .jar additionnels provenant de tierce parties (comme des drivers JDBC, TagLib (JSF,
...),
 WEB-INF/tlds/
 .tld décrivant les TagLibs
Descripteur de déploiement
web.xml
<web-app>
<servlet>
<servlet-name> nom de servlet </servlet-name>
<servlet-class> nom de la classe de servlet </servlet-class>
<init-param>
< param-name> nom du paramètre d’initialisation
</param-name>
< param-value> valeur du paramètre d’initialisation
</param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name> nom de servlet </servlet-name>
<url-pattern> url d’invocation de servlet </url-pattern>
</servlet-mapping>
</web-app>
Descripteur de déploiement
web.xml
<web-app>
<servlet>
<servlet-name> HelloServlet </servlet-name>
<servlet-class> server.HelloServlet </servlet-class>
<init-param>
< param-name> compteur </param-name>
< param-value> 0 </param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name> HelloServlet </servlet-name>
<url-pattern> /hello </url-pattern>
</servlet-mapping>
</web-app>
Initialisation de servlet
 La méthode est invoquée pour initialiser la servlet
 Les paramètres d’initiation sont définis dans web.xml
 peuvent être changés sans avoir à recompiler l'application
 La méthode, getInitParameter() de l’interface ServletConfig permet de
récupérer ces paramètres d’initialisation
<web-app>
…
<servlet>
<servlet-name>InitExample</servlet-name>
<servlet-class>ServletInit</servlet-class>
<init-param>
<param-name>login</param-name>
<param-value>snoopy</param-value>
</init-param>
</servlet>
…
</web-app>
Chaînage de servlets
 Agrégation des résultats fournis par plusieurs servlets
 Meilleure modularité
 Meilleure réutilisation
 Utilisation d'un RequestDispatcher
 obtenu via un objet request de type HttpServletRequest
RequestDispatcher rd = request.getRequestDispatcher(
"servlet2" );
 Inclusion du résultat d'une autre servlet
rd.include(request, response);
 Délégation du traitement à une autre servlet
rd.forward(request, response);
Cookies
 Cookie = donnée stockée par un serveur web chez un client
 Moyen pour récupérer des informations sur le client
 nom, adresse email, …
 Eviter à l’utilisateur de taper ces informations chaque fois qu’il
est nécessaire
 L'utilisateur a la possibilité d'interdire leur dépôt dans son
navigateur
 Définis dans la classe javax.servlet.http.Cookie
 Créé en donnant un nom (String) et une valeur (String) Cookie
unCookie = new Cookie( "sonNom", "saValeur" );
 Positionné via un objet response
response.addCookie( unCookie );
 Récupéré via un objet request
Cookie[] desCookies = request.getCookies();
 Quelques méthodes : String getName() / String getValue()
Sessions
 HTTP protocole non connecté (sans état), ne gère
pas les sessions
 Deux requêtes successives d'un même client sont
indépendantes pour le serveur
 Notion de session : suivi de l'activité du client sur
plusieurs pages
 un objet Session associé à toutes les requêtes d’un
utilisateur
 Les sessions expirent au bout d'un délai fixé (pas de
requête pendant n secondes ! expiration de la
session)
 La gestion des sessions utilise les techniques
API de HttpServlet
 Les servlets offrent une API simplifiant la gestion de sessions
 L’objet request de HttpServletRequest maintient les
informations sur la session
 Accessibles via les méthodes:
 HttpSession session = request.getSession(boolean flag)
 flag=true: retourne l'objet session courant ou en crée un s'il n'y en a
pas.
 flag=false: retourne l'objet session courant ou null s'il n'y en a pas
 isRequestedSessionIdFromCookie()
 vrai si l'id de la session vient d'un cookie
 isRequestedSessionIdFromURL()
 vrai si l'id de la session vient d'un URL
 JSESSIONID est le nom du cookie, utilisé par le conteneur
de servlet, qui maintient un identifiant unique pour chaque
session
Configuration de session
 Initialisation de la durée d'une session
 dans le web.xml (en minutes)
<session-config>
<session-timeout>30</session-timeout>
</session-config>
 avec la méthode void setMaxInactiveInterval( int seconds ); de
HttpSession qui spécifie le temps avant la fermeture d’une
session
 Terminaison de session
 après expiration du timeout
 avec la méthode void setMaxInactiveInterval( int seconds );
 avec la méthode void invalidate() de l'objet HttpSession,
HttpSession session = request.getSession(true);
session.invalidate(); ou setMaxInactiveInterval(0);
Méthodes de session
 Méthodes appelables sur un objet de type
HttpSession
 void setAttribute( String name, Object value );
 ajoute un couple (name, value) pour cette session
 Object getAttribute( String name );
 retourne l'objet associé à la clé name ou null
 void removeAttribute( String name );
 enlève le couple de clé name
 java.util.Enumeration getAttributeNames();
 retourne tous les noms d'attributs associés à la session
 long getCreationTime(); /long getLastAccessedTime();
 retourne la date de création / de dernier accès de la
session en ms
Partage de données entre
servlets
 Contexte d'exécution = ensemble de couples (name, value) partagées par
toutes les servlets instanciées
ServletContext ctx = getServletContext()
 Méthodes appelables sur un objet de type ServletContext
 void setAttribute( String name, Object value )
 ajoute un couple (name, value) dans le contexte
 Object getAttribute( String name )
 retourne l'objet associé à la clé name ou null
 void removeAttribute( String name )
 enlève le couple de clé name
 java.util.Enumeration getAttributeNames()
 retourne tous les noms d'attributs associés au contexte
Les listeners
 Les listeners sont des objets dont les méthodes sont invoquées en
fonction du cycle de vie d'une servlet
 A la création et à la destruction d'un contexte (une application)
Javax.servlet.ServletContextListener
 Quand on modifie les attributs du contexte
Javax.servlet.ServletContextAttributeListener
 A la création, la suppression, d'une session
Javax.servlet.HttpSessionListener
 A la création, modification, suppression d'un attribut de session
Javax.servlet.HttpSessionAttributeListener
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 déclaration d’un listener
 Il faut informer le conteneur de la classe de listener, dans le
descripteur de déploiement web.xml
<listener>
<listener-class>
cours.exemple1.SessionCounter
</listener-class>
</listener>
Exemple de classe de listener
Filtres
 Un filtre est un code exécuté entre la requête et le « endpoint »
 Permettent de faire du pre et post-processing sur une requête
 Lire la requête, modifier la requête, modifier la réponse, retourner des
erreurs au client
 Ajouter des fonctions aux applications
 Log, Compression, Cache
 Même cycle de vie qu’une servlet
 Init/doFilter/destroy
 Implanter la méthode doFilter()
 Déclarer le filtre dans web.xml
 Filter
 Filter-mapping
 Le transfert à la suite de la chaine se fait par la fonction
chain.doFilter()
 Transfert à un autre filtre ou à une servlet ou une page HTML ou une
page JSP
 La suite s’exécute au retour de doFilter()
Filtres
Filtres
public class LoginFilter extends GenericFilter {
private FilterConfig filterConfig;
public void doFilter(HttpServletRequest request, HttpServletResponse response,
FilterChain chain){
System.out.println("Entering Filter");
request.setAttribute("hello","Hello World!");
chain.doFilter(request,response);
System.out.println("Exiting HelloWorldFilter");
} }
Gestion des erreurs
 Il est possible de définir les pages à afficher
 En fonction d'erreurs http
 En fonction d'exceptions java
<error-page>
<exception-type>
cours.event.EventException
</exception-type>
<location>/erreur.html</location>
</error-page>
Dans web.xml
<error-page>
<error-code>404</error-code>
<location>/404.html</location>
</error-page>
Pour une
erreur Http
Pour une
exception
java
Gestion de concurrence
 Par défaut les servlets sont exécutées de façon multi-
threadée
 Si une servlet doit être exécutée en exclusion mutuelle
(ex. : accès à des ressources partagées critiques)
 implantation de l'interface SingleThreadModel
public class CompteurServlet extends HttpServlet implements
SingleThreadModel{
public void doGet( ServletRequest request, ServletResponse response )
throws ServletException, IOException {
/* Tout le code de la Servlet est en exclusion avec lui-même */
}
}
 Autre solution : définir du code synchronized dans la servlet
 Attention aux inter-blocages
Conclusion
 Servlets : étendent le comportement des serveurs
Web avec des programme Java
 Portabilité
 facilité d'écriture (Java)
 Définition du code, du paquetage, du déploiement
 Exécutée en // avec des processus légers (threads)
 Limites
 Difficile d’écrire du code HTML dans du code Java
 Introduction de la technologie Java Server Pages (JSP)
 Pas de mécanisme intégré de distribution
 Introduction de la technologie Enterprise Java Beans (EJB)
JAVA SERVER PAGES
(JSP)
Servlet & JSP
 Servlet : une classe java
 Java Server Pages : insertion du code Java
dans une page HTML
 JSP ont les mêmes fonctionnalités que
HttpServlet
 Implémentation du mécanisme requête/réponse
 Accéder aux mêmes données/objets qu’une
servlet
 Inclure ou rediriger la requête vers une autre
servlet/JSP
 Génération de différents types de contenus :
HTML, XML, SVG..
 Gestion des méthodes, headers, cookies,
sessions...
Servlet & JSP
 Traitement d’une JSP par le serveur
 Une JSP est compilée en servlet à la première
utilisation
 Se transforme en classe implémentant:
javax.servlet.jsp.HttpJspPage
 Lors du premier chargement d’une jsp
 Génération d’une servlet à partir de la jsp
 Compilation de la servlet
 Instanciation de la servlet
 Délai d’attente lors de la première consultation
 En cas d’erreur de syntaxe, message envoyé au
navigateur (erreurs détectées à l’exécution)
 Lors des chargements suivants
 Exécution de la servlet dans un thread
JSP : illustration du
fonctionnement
JSP : illustration du
fonctionnement
JSP : illustration du
fonctionnement
JSP: Syntaxe
 4 parties d'une JSP
 Scriptlets <% %>
 Déclarations <%! %>
 Expressions <%= %>
 Directives <%@directive %>
Scriptlets <% %>
 contient du code Java
 insérer dans _jspservice() de la servlet, donc peut utiliser out,
request, response, …
<html> <body>
<%
String[] langages = {"Java", "C++", "Smalltalk", "Simula 67"};
out.println("<h3>Principaux langages orientés objets : </h3>");
for (int i=0; i < langages.length; i++) {
out.println("<p>" + langages[i] + "</p>"); }
%>
</body> </html>
Expressions <%= ... %>
 <%= expr %> génère l'affichage d'une valeur de
l'expression expr
 expr : expression en Java qui renvoie un objet String ou un
type primitif.
 raccourci pour <% out.println(expr); %>
Déclarations <%! … %>
 Méthodes et variables d'instance
 Des méthodes et des variables d'instance peuvent
être associées à une JSP entre les directives <%! et
%>
 Méthodes et variables d’instance de la servlet
générée
Déclarations <%! … %>
 Méthodes et variables d’instance
 Méthode d’instance de la servlet générée à partir de
la jsp
 Pas d’accès aux objets implicites (out, request,
page...) : ce sont des objets définis dans la méthode
principale de la servlet (_jspService())
Attention!
<%! ... %> : définie une variable d’instance (persiste entre deux invocations)
<% ... %> : définie une variable locale à la jsp (réinitialisée à chaque
invocation)
Directive <%@directive... %>
 Fournit des informations globales relatives à la page
<%@ directive attribut="valeur" %>
 Trois types de directives:
 page : modifier les données de la page (import de packages,
spécification d’un type de contenu, gestion des sessions)
 Forme générale :
<%@ page import="java.io.*, java.sql.*">
<%@ page isErrorPage="false" %>
<%@ page contentType="text/html" %>
 include : inclure des fichiers ou autres servlets/JSP, C’est comme si
le contenu du fichier à inclure était directement copié dans le fichier
courant.
<%@ include page="/monJSP.jsp" %>
 taglib : utiliser des bibliothèques de balises personnalisées
<%@ taglib uri="..." prefix="..." %>
Objets implicites
 Objets pré-déclarés utilisables dans le code Java
des JSPs
 out : le flux de sortie pour générer le code HTML
 request : la requête qui a provoqué le chargement de la
JSP
 response : la réponse à la requête de chargement de la
JSP
 page : l'instance de servlet associée à la JSP courante (
this)
 exception : l'exception générée en cas d'erreur sur une
page
 session : suivi de session pour un même client
Objets implicites
<HTML>
<BODY BGCOLOR="#ffffcc">
<CENTER>
<% if (request.getParameter("nom")==null
&& request.getParameter("email")== null) { %>
<H2>Information utilisateur</H2>
<FORM method="GET"
action="/exemple2/web/process.jsp">
<P>Votre nom: <input type="text" name="nom"
size=26>
<P>Votre email: <input type="text" name="email"
size=26>
<P><input type="submit" value="Envoyer">
</FORM>
<% } else { %>
<%! String nom, email; %>
<% nom = request.getParameter("nom");
email = request.getParameter("email");
%>
<P><B>Vous avez fourni les informations suivantes:</B>
<P><B>Name</B>: <%= nom %>
<P><B>Email</B>: <%= email %>
<% } %>
</CENTER>
</BODY>
</HTML>
Gestion des erreurs
 Erreur de syntaxe
 Dans le code HTML
 Dans les directives JSP (ex. : oubli d'une directive %>)
 Dans le code Java (ex : oubli de ;)
 Erreur d’ exécution du code Java (ex. :
NullPointerException)
 Dans tous les cas, erreur récupérée dans le navigateur
client
 Conserver la page par défaut construite par le moteur
 En concevoir une adaptée aux besoins particuliers de
l'application
 Utilisation des directives :
 <%@ page errorPage="..." %> : URL du gestionnaire d’erreurs
 <%@ page isErrorPage="..." %> : vrai si page est un
Gestion des erreurs
Gestion des erreurs
Balises de commentaires
 2 manières de placer des commentaires dans une
page JSP
<!-- mon commentaire -->
 dans ce cas les commentaires sont transmis à la
réponse. Ils sont donc visibles lorsqu'on visualise le
code source de la page HTML.
 ou
<%-- mon commentaire --%>
 Le serveur JSP ne les prend pas en compte. Leur
intérêt est uniquement de commenter le code JSP
La directive <%@include %>
<%@include
file="/chemin/relatif/auContexte"%>
 Cette inclusion se fait au moment de la
conversion, pendant la création de la servlet
correspondante.
 Le contenu du fichier externe est inclus comme
s’il était saisi directement dans la page JSP
 Les ressources à inclure doivent être contenues
dans le contexte de l'application web
Exemple <%@include %>
TagLib
 Un tag JSP est une simple balise XML à laquelle est associée une
classe Java.
 A la compilation d'une page JSP, ces tags sont remplacés par
l'utilisation de ces classes Java qui implémentent une interface
particulière.
<prefixe:nomDuTag attribut="valeur">
Corps du tag
</prefix:nomDuTag>
 Un préfixe, qui permet de distinguer les différentes taglibs utilisées.
 Le nom du tag de la librairie
 un certain nombre de couple d'attribut/valeur
 un corps.
 Une JSP Taglib est une collection d'actions prédéfinies destinée à
être utilisée dans une page JSP sous forme de tags.
 Elle se compose:
 d'un descripteur de taglib (Tag Librarie Descriptor)
TagLib usuels
 jsp:useBean associe une instance d’objet Java Bean
 jsp:setProperty positionne la valeur d’une propriété d’un bean
 jsp:getProperty récupère la valeur de la propriété d’un bean
 jsp:include inclut le contenu du page statique ou dynamique
 jsp:invoke invoque l’exécution d’un fragment (JSP, ...)
 jsp:forward redirige le traitement de la requête à un autre
script
 jsp:element insère un élément (XML) dans le document
 jsp:attribute attribut d’un élément
 jsp:output configure le prélude du document XML
 jsp:param paramètre (key/value) pour jsp:forward et
jsp:include
 jsp:text ajoute le texte à la sortie
 jsp:plugin insère un objet externe
 jsp:fallback alternative en cas d’échec du jsp:plugin
Le tag <jsp:include>
 permet d'inclure le contenu généré par une JSP ou une servlet
dynamiquement au moment ou la JSP est exécutée.
 Contrairement à la directive <@include page= > avec laquelle le
fichier est inséré dans la JSP avant la génération de la servlet.
 Syntaxe <jsp:include page= "URL" flush="true" />
 L'attribut page permet de préciser l'URL relative de l'élément à
insérer.
 L'attribut permet d'indiquer si le tampon doit être envoyé au client
est vidé avant de l’inclure.
 Par défaut : flush = false
 Si flush = true : le serveur envoie le tampon de sortie de la page en
cours (la partie de la page qui a déjà été traitée) dans le navigateur
avant de traiter le fichier inclus.
Le tag <jsp:include>
 Agrégation des résultats fournis par plusieurs JSP
 Inclusion dynamique (délégation de servlets : deux servlets, l’une
appelle l’autre)
Fichierinc.jsp
Le modèle de composants Java
 Le modèle de composants Java (Java beans)
permet de construire une application en
assemblant des entités logicielles par programme
(ou visuellement)
 Ce modèle de composants est décrit par un
ensemble d'APIs
 Pour fonctionner, ce modèle repose sur un
ensemble d'outils formant un environnement dans
lequel les composants interagissent
 Ce modèle utilise des conteneurs qui fixe un
cadre pour la coopération des composants
 Dans l'architecture des applications web (3-tiers),
les composants métiers sont implantés par des
Java beans
Persistance - JavaBean
 Un bean est un objet Java
 Comme tout objet, il possède un état
 Cet état doit être mémorisé pour toute utilisation
ultérieure du bean
 Tout bean doit donc utiliser un mécanisme de
persistance universel défini par leur conteneur
 Ils doivent d'implémenter l'interface
java.io.Serializable
JavaBean
 Les JavaBeans sont des classes Java qui respectent les
directives suivantes :
 un constructeur public sans argument
 les propriétés d'un Bean sont accessibles au travers de
méthodes getXXX (lecture) et setXXX (écriture) portant le nom
de la propriété
 Méthodes de lecture des propriétés :
 type getNomDeLaPropriété()
 boolean isNomPropriété()
 Méthodes d'écriture des propriétés :
 void setNomDeLaPropriété(type) : un seul argument du type de
la propriété et son type de retour est void
 Un JavaBean implémente l'interface java.io.Serializable
 permettant la sauvegarde de l'état du Bean
Exemple de JavaBean
Bean et JSP
 Un bean est inclus dans une page JSP par la balise :
<jsp:useBean>
 permet de localiser une instance ou d'instancier un bean pour
l'utiliser dans la JSP
 Un bean peut encapsuler des traitements complexes et être
réutilisable par d'autre JSP ou composants
 Après exécution, un bean rend son résultat à la page JSP ou
à la servlet
 L'utilisation de beans évite l'emploi de la méthode
getRequestParameter(...)
 La valeur du paramètre d'une requête peut être utilisée
directement pour renseigner la propriété d'un bean
 Un serveur peut gérer la portée (scope) d'un bean en le liant
soit à une page, une requête, une session ou une application
JavaBeans - Syntaxe
<jsp:useBean id="nomInstanceJavaBean"
class="nomClasseDuBean"
scope="request|session|application|page">
</jsp:useBean>
 Le bean est alors identifié et accessible par :
"nomInstanceJavaBean"
 L'attribut scope indique la portée du bean.
JSP et Java Beans
JSP et Java Beans
 Récupération des propriétés du bean:
 Par appel de méthode getXXX() ou par la
balise<jsp:getProperty…>
JSP et Java Beans
 Positionner les propriétés du bean dans une JSP
 Par appel de méthode setXXX(...) ou par la balise
<jsp:setProperty…>
Exemple
 La page JSP qui suit affiche le texte : Bonjour suivi de la
valeur du paramètre nom de la requête.
 La classe HelloBean est stockée dans le répertoire entites.
 La propriété nom du bean HelloBean est alimentée par le
paramètre de la requête passé dans son en-tête si celui-ci
est renseigné
 Sinon c'est sa valeur par défaut qui est utilisée
 L'exécution de la page JSP provoque l'affichage du texte
bonjour suivi du contenu de la propriété nom du bean
HelloBean
 Intérêt :
 pas de code Java dans la page JSP
 modularité dans la construction de l'application
Exemple
Exemple
JSP et JavaBeans – Centré
page!
 La logique de l’application est dans
les pages JSP
 Mixité de la présentation et la logique
métier
 L’enchainement des pages est codé
dans les pages JSP
 Contrôle de flux pris en charge par les
JSP
memu.jsp catalog.jsp checkout.jsp
dataBase
page–centric catalog application
Modèle MVC
 Le modèle Model-View-Controller a pour objectif
d ’organiser une application interactive en séparant :
 les données
 la représentation des données
 le comportement de l’application
 Le Model représente la structure des données dans
l ’application et les opérations spécifiques sur ces
données
 Une Vue présente les données sous une certaine forme
à l ’utilisateur, suivant un contexte d ’exploitation.
 Un Controller traduit les interactions utilisateur par des
appels de méthodes (comportement) sur le modèle et
sélectionne la vue appropriée basée sur l’état du
modèle.
Modèle MVC en JAVA
 Controlleur : Servlet
 View : JSP
 Model : JavaBean
Exemple - MVC : étape 1
 Le client récupère un formulaire (index.html)
 pour passer une requête avec paramètres (1, 2,
puis 3)
index.html
MVC : étape 2
1. Le client envoie son formulaire (GET/POST avec paramètres)
2. Le conteneur transmet au servlet correspondant (le
controller)
Controller : SelectPromo.java
Configuration : web.xml
MVC : étape 3
3. La servlet contrôleur interroge le model sur «ing2»
4. Le model retourne au contrôleur le résultat
correspondant
Model : Promo.java
MVC : étape 4
5. Le controller utilise les données du model pour sa
réponse
6. Le controller transmet sa réponse à la view (JSP)
Controller : SelectPromo.java
MVC : étape 5
7. La JSP (view) traite la réponse transmise par le
controller
8. La page HTML résultante est reçue par le client
View : result.jsp
Ex : AREL V6 - liste des promos
 Package javax.servlet.http
 HttpServlet gestion des servlet pour recevoir des
requêtes et envoyer des réponses
 HttpServletRequest interface des requêtes
 HttpServletResponse interface des réponses
 HttpSession gestion de la session
 ServletContext gestion du contexte de
l'application
 RequestDispatcher lancement de servlet
(forward())
105
public class ServletInit extends HttpServlet {
String _login = null;
Calendar _initTime = null;
public void init() throws ServletException {
_login = this.getInitParameter("login");
_initTime = new GregorianCalendar();
}
public void doGet(HttpServletRequest req,
HttpServletResponse res) throws ServletException, IOException {
PrintWriter out = res.getWriter();
res.setContentType("text/html");
out.println("<html><head><title>Initialization</title><body><h2>"
+ "I am the Servlet of <i>" + _login+ "</i><br/>"
+ "I was initialized at " + _initTime.get(Calendar.HOUR_OF_DAY)
+ ":"+ _initTime.get(Calendar.MINUTE)
+ ":"+ _initTime.get(Calendar.SECOND)
+ "</h2></body></html>"); }} ServletInit.java
106
Loading a Servlet on Startup
 A Servlet is usually loaded when it is first being
called
 You can set Tomcat to load a specific Servlet
on startup in the Servlet declaration inside
web.xml
<servlet>
<servlet-name>InitExample</servlet-name>
<servlet-class>ServletInit</servlet-class>
<load-on-startup/>
</servlet>
107
Destruction de servlets
 Le serveur peut détruire des servlets chargées :
 arrêt demandé par l’administrateur (exp, arrêt du
serveur)
 servlet n’est pas utilisée pour une longue periode
 serveur a besoin de ressources libres
 Le serveur supprime une servlet seulement si
tous les threads sont terminés et une période de
grâce est expirée
 Avant la suppression, le conteneur appelle la
méthode destroy()
 Fermer les connexions vers les BDD
 ….
Servlet <<Interface>> ServletConfig <<Interface>>
+ init(…) + getInitParameter(String): String
+ service(…) + getServletName(): String
+ destroy() + …
GenericServlet {abstraite}
+ service(...) {abstraite}
+ ...
HttpServlet
+ service(…)
+ doXXX (…)
Dériver HttpServlet
pour construire des
Servlets spécifiques
au protocole HTTP
en redéfinissant
doGet, doPost…HelloWorld
+ doGet(…)
HttpServlet
définit la
méthode
service
qui appelle
doXXX selon la
requête HTTP
reçue (doGet,
doPost…).
L’implantation
par défaut de
doXXX rend
une erreur
HTTP 405
(méthode non
109
Thread Synchronization
 Multiple threads are accessing the same Servlet
object at the same time
 Therefore, you have to deal with concurrency
 init() and destroy() are guaranteed to be
executed only once (before/after all service
executions)
What is Java Servlets?
 Servlet
 module run inside request/response-oriented server
Browser
Java-enabled
Web Server
Servlet Database
HTML form
Server
Servlet
= Browser
Applet
Servlets are to Servers what Applets are to Browsers
Substitute for CGI scripts
easier to write and fast to run
Not part of the core Java Framework
Architecture
Une servlet peut être appelée par un client alors qu’elle s’exécute
déjà pour un autre client. L’objet servlet unique s’exécute alors dans
un autre thread. Certaines parties du code doivent être synchronisées
avec les techniques prévues en Java pour ce faire.
Développement de l’application web
 Sources java
+ ressources statiques
(ex: images)
+ librairies (.jar)
+ fichier de déploiement
(web.xml)
 Création d’une archive
.war (Web Application
ARchive) à déposer sur
le serveur (ex : dans le
répertoire webapps de
Tomcat)
(paquetage)
Servlet & HTTP
 Une servlet doit
implémenter l’interface
javax.servlet.Servlet
 soit directement,
 soit en dérivant d’une classe
implémentant cette interface :
 javax.servlet.GenericServlet :
une classe abstraite
indépendante du protocole
 javax.servlet.http.HttpServlet :
une classe abstraite
spécifique au protocole HTTP
HttpServletRequest
HttpSession
ServletContext
En résumé
Niveau de la requête client
Niveau de la session client
Niveau de l’application web
115
Sessions
And the server
knows that all
of these
requests are
from a different
client.
HttpServletRequest
HttpServletResponse

Más contenido relacionado

La actualidad más candente

Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
Antoine Rey
 

La actualidad más candente (20)

Architecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependancesArchitecture jee principe de inversion de controle et injection des dependances
Architecture jee principe de inversion de controle et injection des dependances
 
Maven et industrialisation du logiciel
Maven et industrialisation du logicielMaven et industrialisation du logiciel
Maven et industrialisation du logiciel
 
Introduction à spring boot
Introduction à spring bootIntroduction à spring boot
Introduction à spring boot
 
Workshop spring session 2 - La persistance au sein des applications Java
Workshop spring   session 2 - La persistance au sein des applications JavaWorkshop spring   session 2 - La persistance au sein des applications Java
Workshop spring session 2 - La persistance au sein des applications Java
 
Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)Support programmation orientée aspect mohamed youssfi (aop)
Support programmation orientée aspect mohamed youssfi (aop)
 
Support de cours Spring M.youssfi
Support de cours Spring  M.youssfiSupport de cours Spring  M.youssfi
Support de cours Spring M.youssfi
 
Entreprise Java Beans (EJB)
Entreprise Java Beans (EJB)Entreprise Java Beans (EJB)
Entreprise Java Beans (EJB)
 
cours j2ee -présentation
cours  j2ee -présentationcours  j2ee -présentation
cours j2ee -présentation
 
Support NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDBSupport NodeJS avec TypeScript Express MongoDB
Support NodeJS avec TypeScript Express MongoDB
 
Support Java Avancé Troisième Partie
Support Java Avancé Troisième PartieSupport Java Avancé Troisième Partie
Support Java Avancé Troisième Partie
 
Support de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfiSupport de cours technologie et application m.youssfi
Support de cours technologie et application m.youssfi
 
Cours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxyCours design pattern m youssfi partie 6 proxy
Cours design pattern m youssfi partie 6 proxy
 
Support JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVCSupport JEE Spring Inversion de Controle IOC et Spring MVC
Support JEE Spring Inversion de Controle IOC et Spring MVC
 
Appels de procédures distants (RPC)
Appels de procédures distants (RPC)Appels de procédures distants (RPC)
Appels de procédures distants (RPC)
 
Fondamentaux java
Fondamentaux javaFondamentaux java
Fondamentaux java
 
Support de cours angular
Support de cours angularSupport de cours angular
Support de cours angular
 
Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)Sécurité des Applications Web avec Json Web Token (JWT)
Sécurité des Applications Web avec Json Web Token (JWT)
 
Java 8 - collections et stream
Java 8 - collections et streamJava 8 - collections et stream
Java 8 - collections et stream
 
Support Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFISupport Web Services SOAP et RESTful Mr YOUSSFI
Support Web Services SOAP et RESTful Mr YOUSSFI
 
Marzouk jsp
Marzouk jspMarzouk jsp
Marzouk jsp
 

Destacado

Introductions Aux Servlets
Introductions Aux ServletsIntroductions Aux Servlets
Introductions Aux Servlets
François Charoy
 
Java Servlets
Java ServletsJava Servlets
Java Servlets
Nitin Pai
 
Carta abierta a los catolicos perplejos.mons. lefebvre
Carta abierta a los catolicos perplejos.mons. lefebvreCarta abierta a los catolicos perplejos.mons. lefebvre
Carta abierta a los catolicos perplejos.mons. lefebvre
Virginia López
 

Destacado (20)

Architectures 3-tiers (Web)
Architectures 3-tiers (Web)Architectures 3-tiers (Web)
Architectures 3-tiers (Web)
 
Sockets
SocketsSockets
Sockets
 
Java Server Faces (JSF)
Java Server Faces (JSF)Java Server Faces (JSF)
Java Server Faces (JSF)
 
Architectures n-tiers
Architectures n-tiersArchitectures n-tiers
Architectures n-tiers
 
Cloud computing
Cloud computingCloud computing
Cloud computing
 
Introduction aux systèmes répartis
Introduction aux systèmes répartisIntroduction aux systèmes répartis
Introduction aux systèmes répartis
 
Architectures orientés services (SOA)
Architectures orientés services (SOA)Architectures orientés services (SOA)
Architectures orientés services (SOA)
 
Introduction aux architectures des SI
Introduction aux architectures des SI Introduction aux architectures des SI
Introduction aux architectures des SI
 
Jsf 110530152515-phpapp01
Jsf 110530152515-phpapp01Jsf 110530152515-phpapp01
Jsf 110530152515-phpapp01
 
Introductions Aux Servlets
Introductions Aux ServletsIntroductions Aux Servlets
Introductions Aux Servlets
 
OBJIS Congo présente 10 reperes cle du developpeur java
OBJIS Congo présente 10 reperes cle du developpeur javaOBJIS Congo présente 10 reperes cle du developpeur java
OBJIS Congo présente 10 reperes cle du developpeur java
 
Java - JEE - Introduction aux JSP
Java - JEE - Introduction aux JSPJava - JEE - Introduction aux JSP
Java - JEE - Introduction aux JSP
 
J2 ee
J2 eeJ2 ee
J2 ee
 
Java Servlets
Java ServletsJava Servlets
Java Servlets
 
Java Server Faces 2
Java Server Faces 2Java Server Faces 2
Java Server Faces 2
 
Génie Logiciels : Introduction aux architectures
Génie Logiciels : Introduction aux architecturesGénie Logiciels : Introduction aux architectures
Génie Logiciels : Introduction aux architectures
 
Le Manifeste Agile
Le Manifeste AgileLe Manifeste Agile
Le Manifeste Agile
 
Carta abierta a los catolicos perplejos.mons. lefebvre
Carta abierta a los catolicos perplejos.mons. lefebvreCarta abierta a los catolicos perplejos.mons. lefebvre
Carta abierta a los catolicos perplejos.mons. lefebvre
 
Tema 2
Tema 2Tema 2
Tema 2
 
La TeoríA Celular
La TeoríA CelularLa TeoríA Celular
La TeoríA Celular
 

Similar a Servlets et JSP

ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
Horacio Gonzalez
 
BordeauxJUG : Portails &amp; Portlets Java
BordeauxJUG : Portails &amp; Portlets JavaBordeauxJUG : Portails &amp; Portlets Java
BordeauxJUG : Portails &amp; Portlets Java
Camblor Frédéric
 
Webserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWebserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas doc
Winslo Nwan
 

Similar a Servlets et JSP (20)

ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - CoursENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
ENIB cours CAI Web - Séance 3 - JSP/Servlet - Cours
 
Rapport tp3 j2ee
Rapport tp3 j2eeRapport tp3 j2ee
Rapport tp3 j2ee
 
APACHE TOMCAT
APACHE TOMCATAPACHE TOMCAT
APACHE TOMCAT
 
Ajax en Java - GTI780 & MTI780 - ETS - A08
Ajax en Java - GTI780 & MTI780 - ETS - A08Ajax en Java - GTI780 & MTI780 - ETS - A08
Ajax en Java - GTI780 & MTI780 - ETS - A08
 
Ajax en Java - GTI780 & MTI780 - ETS - A09
Ajax en Java - GTI780 & MTI780 - ETS - A09Ajax en Java - GTI780 & MTI780 - ETS - A09
Ajax en Java - GTI780 & MTI780 - ETS - A09
 
Tp2 - WS avec JAXRS
Tp2 - WS avec JAXRSTp2 - WS avec JAXRS
Tp2 - WS avec JAXRS
 
Java EE _ Servlet et vue (1).pdf
Java EE _ Servlet et vue (1).pdfJava EE _ Servlet et vue (1).pdf
Java EE _ Servlet et vue (1).pdf
 
Spring MVC
Spring MVCSpring MVC
Spring MVC
 
BordeauxJUG : Portails &amp; Portlets Java
BordeauxJUG : Portails &amp; Portlets JavaBordeauxJUG : Portails &amp; Portlets Java
BordeauxJUG : Portails &amp; Portlets Java
 
Rapport tp2 j2ee
Rapport tp2 j2eeRapport tp2 j2ee
Rapport tp2 j2ee
 
Services rest & jersey
Services rest & jerseyServices rest & jersey
Services rest & jersey
 
les servlets-java EE
les  servlets-java EEles  servlets-java EE
les servlets-java EE
 
Soap
SoapSoap
Soap
 
Webserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas docWebserver tomcat-jboss-jrun-jonas doc
Webserver tomcat-jboss-jrun-jonas doc
 
Aspnetcore introduction
Aspnetcore introductionAspnetcore introduction
Aspnetcore introduction
 
Java Entreprise Edition EE est fait pour le développement des applications Cl...
Java Entreprise Edition EE est fait pour le développement des applications Cl...Java Entreprise Edition EE est fait pour le développement des applications Cl...
Java Entreprise Edition EE est fait pour le développement des applications Cl...
 
Service WEB de type REST avec Java
Service WEB de type REST avec JavaService WEB de type REST avec Java
Service WEB de type REST avec Java
 
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbWebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
WebServices.pdfbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbbb
 
Tutoriel ajax jquery
Tutoriel ajax jqueryTutoriel ajax jquery
Tutoriel ajax jquery
 
eServices-Tp1: Web Services
eServices-Tp1: Web ServiceseServices-Tp1: Web Services
eServices-Tp1: Web Services
 

Último

Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdf
ssuserc72852
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
Faga1939
 

Último (13)

GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
GIÁO ÁN DẠY THÊM (KẾ HOẠCH BÀI DẠY BUỔI 2) - TIẾNG ANH 6, 7 GLOBAL SUCCESS (2...
 
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdfCOURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
COURS SVT 3 EME ANNEE COLLEGE 2EME SEM.pdf
 
Cours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdfCours Préparation à l’ISO 27001 version 2022.pdf
Cours Préparation à l’ISO 27001 version 2022.pdf
 
Sidonie au Japon . pptx Un film français
Sidonie    au   Japon  .  pptx  Un film françaisSidonie    au   Japon  .  pptx  Un film français
Sidonie au Japon . pptx Un film français
 
Computer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptxComputer Parts in French - Les parties de l'ordinateur.pptx
Computer Parts in French - Les parties de l'ordinateur.pptx
 
Evaluación Alumnos de Ecole Victor Hugo
Evaluación Alumnos de Ecole  Victor HugoEvaluación Alumnos de Ecole  Victor Hugo
Evaluación Alumnos de Ecole Victor Hugo
 
Apolonia, Apolonia.pptx Film documentaire
Apolonia, Apolonia.pptx         Film documentaireApolonia, Apolonia.pptx         Film documentaire
Apolonia, Apolonia.pptx Film documentaire
 
Bolero. pptx . Film de A nnne Fontaine
Bolero. pptx . Film   de  A nnne FontaineBolero. pptx . Film   de  A nnne Fontaine
Bolero. pptx . Film de A nnne Fontaine
 
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
L'ÉVOLUTION DE L'ÉDUCATION AU BRÉSIL À TRAVERS L'HISTOIRE ET LES EXIGENCES DE...
 
Boléro. pptx Film français réalisé par une femme.
Boléro.  pptx   Film   français   réalisé  par une  femme.Boléro.  pptx   Film   français   réalisé  par une  femme.
Boléro. pptx Film français réalisé par une femme.
 
gestion des conflits dans les entreprises
gestion des  conflits dans les entreprisesgestion des  conflits dans les entreprises
gestion des conflits dans les entreprises
 
La nouvelle femme . pptx Film français
La   nouvelle   femme  . pptx  Film françaisLa   nouvelle   femme  . pptx  Film français
La nouvelle femme . pptx Film français
 
Cours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdfCours ofppt du Trade-Marketing-Présentation.pdf
Cours ofppt du Trade-Marketing-Présentation.pdf
 

Servlets et JSP

  • 2. Servlet - Définition  Servlet : Server-side applet  Applet est une classe s’exécutant chez le client alors que la servlet s’exécute chez server.  Une classe java s’exécutant coté serveur  reçoit et répond aux requêtes de clients web,  généralement via HTTP  servlet web ou servlet (pour simplifier)  Permettre la programmation d'applications web en Java Navigateur Web requête requête réponseréponse Servlet Serveur Web
  • 3. Environnement d’exécution de servlets  Les servlets s'exécutent dans un conteneur de servlets, appelé aussi conteneur web  Conteneur web = serveur web + moteur de servlet  Etablit le lien entre le serveur web et la servlet Navigateur Web requête requête réponseréponse Servlet Serveur Web  Exemples de conteneur de servlets  Tomcat (Implantation de référence)  Jetty  Weblogic  ... Conteneur de servlets
  • 4. Squelette de base de servlet import javax.servlet.*; public class MyServlet implements Servlet { public void init(ServletConfig config) throws ServletException { … } public void service( ServletRequest request, ServletResponse response ) throws ServletException, IOException { … } public void destroy() { … }
  • 5. Cycle de vie d’une servlet  Le conteneur gère le cycle de vie :  charge la classe de servlet et initialise une instance de cette classe  chaque requête du client est traitée par une instance de servlet dans un thread séparé  peut supprimer la servlet  peut garder la servlet pour traiter d’autres requêtes Browser Browser Browser Server Servlet Instance
  • 6. Cycle de vie d’une servlet  Lorsque la servlet est instancié, le conteneur appelle la méthode init() pour initialiser la servlet  Sur demande du client, le conteneur appelle la méthode service()  Avant la suppression de la servlet, le conteneur appelle la méthode destroy() Classe Servlet Appel de la methode init Instance de Servlet Traitement de requêtes: appel de la méthode service Détruire la Servlet: appel de la méthode destroy Garbage Collection ServletConfig
  • 7. Modèle de programmation  Une servlet doit implémenter l’interface javax.servlet.Servlet  soit directement,  soit en dérivant d’une classe implémentant cette interface :  javax.servlet.GenericServlet : une classe abstraite indépendante du protocole  javax.servlet.http.HttpServlet : une classe abstraite spécifique au protocole HTTP  l’interface javax.servlet.Servlet possède les méthodes pour  initialiser la servlet : init()  recevoir et répondre aux requêtes des clients : service()  détruire la servlet et ses ressources : destroy()
  • 8. Servlet web  Pour faciliter le traitement particulier des requêtes web, la classe Servlet est affinée en javax.servlet.http.HttpServlet  des méthodes remplacent la méthode service() de la classe mère  doGet() pour les requêtes http de type GET  doPost() pour les requêtes http de type POST  ....  La classe servlet doit OBLIGATOIREMENT implémenter l’une des méthodes redéfinies, choisies selon le mode d’envoi du formulaire html qui l’exécute  service() de HttpServlet appelle automatiquement la bonne méthode en fonction du type de requêtes http
  • 9. HTTP  HTTP décrit les échanges entre navigateur web (client) et serveur web : le navigateur effectue une requête HTTP; le serveur la traite et envoie une réponse HTTP.  Une requête HTTP a le format suivant : Ligne de commande (Commande, URL, Version de protocole) En-tête de requête [Ligne vide] Corps de requête  Une réponse HTTP a le format suivant : Ligne de statut (Version, Code-réponse, Texte-réponse) En-tête de réponse [Ligne vide] Corps de réponse  Les commandes essentielles sont GET (obtenir un document) et POST (envoyer du contenu).  Les données de la requête sont passées dans l’URL pour un GET et dans le corps pour un POST.
  • 10. Développement de Servlet  Une Servlet web  étend la classe javax.servlet.http.HttpServlet  implémente des méthodes spécifiques au protocole HTTP remplacent la méthode service() : doGet(), doPost()…  La servlet reçoit les requêtes et renvoie les réponses via 2 objets :  Objet requête : javax.servlet.ServletRequest  contient les informations nécessaires pour une communication du client vers le serveur  Objet réponse : javax.servlet.ServletResponse  contient les informations nécessaires pour une communication du serveur vers le client
  • 11. Développement de Servlet  Si la méthode utilisée est GET, il suffit de redéfinir la méthode : public void doGet( HttpServletRequest request, HttpServletResponse response )  Si la méthode utilisée est POST, il suffit de redéfinir la méthode : public void doPost( HttpServletRequest request, HttpServletResponse response)
  • 12. Développement de Servlet import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class ServletName extends HttpServlet { public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException { // lecture de la requête // traitements // envoi de la réponse } public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException { // lecture de la requête // traitements // envoi de la réponse } }
  • 13. Principe de fonctionnement  Les fichiers de bytecode (.class) sont stockés sur le serveur (comme des docs)  Ils sont désignés par une URL  http://depinfo-fst.rnu.tn/MaServlet  Le chargement de l'URL provoque l'exécution de la servlet
  • 17. Paramètres des méthodes doGet() et doPost()  Utiliser les objets HttpServletRequest et HttpServletResponse passés en paramètres de ces méthodes pour implanter le service  HttpServletRequest contient les informations sur le formulaire html initial (utile pour doPost())  La méthode getParameter() récupère les paramètres d’entrée  HttpServletResponse contient le flux de sortie pour la génération de la page html résultat (getWriter())
  • 18. Aperçu de l’API servlet  Méthodes importantes d’un objet HttpServletRequest  String getParameter(String param)  Retourne la valeur du champ param transmis dans les données du formulaire  java.util.Enumeration getParameterNames()  retourne l'ensemble des noms de paramètres transmis à la servlet  String getMethod()  retourne la méthode HTTP (GET ou POST) utilisée pour invoquer la servlet  Méthodes importantes d’un objet HttpServletResponse  void setContentType(String type)  définit le type MIME du document retourné par la servlet  PrintWriter getWriter()  retourne un flux de sortie permettant à la servlet de produire son résultat
  • 19. Aperçu de l’API servlet Autres méthodes appelables sur un objet HttpServletRequest  String getProtocol()  retourne le protocole implanté par le serveur (ex. : HTTP/1.1)  String getServerName() / String getServerPort()  retourne le nom/port de la machine serveur  String getRemoteAddr() / String getRemoteHost()  retourne l'adresse/nom de la machine cliente (ayant invoqué la servlet)  String getScheme()  retourne le protocole utilisé (ex. : http ou https) par le client  java.io.BufferedReader getReader()  retourne un flux d'entrée permettant à une servlet chaînée de récupérer le résultat produit par la servlet précédente  permet à la servlet chaînée de modifier le résultat
  • 20. Déploiement d’une Servlet  Pour déployer une application dans un conteneur, il faut lui fournir deux éléments :  Tous les composants (classes compilées, ressources ...) regroupée dans une archive ou module  Descripteur de déploiement contenu dans le module qui précise au conteneur des options pour exécuter l'application  Une servlet doit faire partie d’un module web pour être déployée  Un module Web est un ensemble de librairies, de fichiers de configurations, de code Java (bytecode des servlets...), ...
  • 21. Déploiement d’une application web  Web Application Archive : une application web (*.html, *.jsp, servlets, ...) packagée dans un archive (.war) et est paramétrée dans le fichier WEB-INF/web.xml  Structure  Fichiers web de l’application (HTML, JSP, js, css...)  Répertoire « META-INF » : fichiers de configuration  MANIFEST.MF : informations sur le zip  Répertoire « WEB-INF » : contenu de l’application  WEB-INF/web.xml  Descripteur de déploiement  WEB-INF/classes/  class des servlets et des classes (JavaBean, ...) associées  WEB-INF/lib/  .jar additionnels provenant de tierce parties (comme des drivers JDBC, TagLib (JSF, ...),  WEB-INF/tlds/  .tld décrivant les TagLibs
  • 22. Descripteur de déploiement web.xml <web-app> <servlet> <servlet-name> nom de servlet </servlet-name> <servlet-class> nom de la classe de servlet </servlet-class> <init-param> < param-name> nom du paramètre d’initialisation </param-name> < param-value> valeur du paramètre d’initialisation </param-value> </init-param> </servlet> <servlet-mapping> <servlet-name> nom de servlet </servlet-name> <url-pattern> url d’invocation de servlet </url-pattern> </servlet-mapping> </web-app>
  • 23. Descripteur de déploiement web.xml <web-app> <servlet> <servlet-name> HelloServlet </servlet-name> <servlet-class> server.HelloServlet </servlet-class> <init-param> < param-name> compteur </param-name> < param-value> 0 </param-value> </init-param> </servlet> <servlet-mapping> <servlet-name> HelloServlet </servlet-name> <url-pattern> /hello </url-pattern> </servlet-mapping> </web-app>
  • 24. Initialisation de servlet  La méthode est invoquée pour initialiser la servlet  Les paramètres d’initiation sont définis dans web.xml  peuvent être changés sans avoir à recompiler l'application  La méthode, getInitParameter() de l’interface ServletConfig permet de récupérer ces paramètres d’initialisation <web-app> … <servlet> <servlet-name>InitExample</servlet-name> <servlet-class>ServletInit</servlet-class> <init-param> <param-name>login</param-name> <param-value>snoopy</param-value> </init-param> </servlet> … </web-app>
  • 25. Chaînage de servlets  Agrégation des résultats fournis par plusieurs servlets  Meilleure modularité  Meilleure réutilisation  Utilisation d'un RequestDispatcher  obtenu via un objet request de type HttpServletRequest RequestDispatcher rd = request.getRequestDispatcher( "servlet2" );  Inclusion du résultat d'une autre servlet rd.include(request, response);  Délégation du traitement à une autre servlet rd.forward(request, response);
  • 26. Cookies  Cookie = donnée stockée par un serveur web chez un client  Moyen pour récupérer des informations sur le client  nom, adresse email, …  Eviter à l’utilisateur de taper ces informations chaque fois qu’il est nécessaire  L'utilisateur a la possibilité d'interdire leur dépôt dans son navigateur  Définis dans la classe javax.servlet.http.Cookie  Créé en donnant un nom (String) et une valeur (String) Cookie unCookie = new Cookie( "sonNom", "saValeur" );  Positionné via un objet response response.addCookie( unCookie );  Récupéré via un objet request Cookie[] desCookies = request.getCookies();  Quelques méthodes : String getName() / String getValue()
  • 27. Sessions  HTTP protocole non connecté (sans état), ne gère pas les sessions  Deux requêtes successives d'un même client sont indépendantes pour le serveur  Notion de session : suivi de l'activité du client sur plusieurs pages  un objet Session associé à toutes les requêtes d’un utilisateur  Les sessions expirent au bout d'un délai fixé (pas de requête pendant n secondes ! expiration de la session)  La gestion des sessions utilise les techniques
  • 28. API de HttpServlet  Les servlets offrent une API simplifiant la gestion de sessions  L’objet request de HttpServletRequest maintient les informations sur la session  Accessibles via les méthodes:  HttpSession session = request.getSession(boolean flag)  flag=true: retourne l'objet session courant ou en crée un s'il n'y en a pas.  flag=false: retourne l'objet session courant ou null s'il n'y en a pas  isRequestedSessionIdFromCookie()  vrai si l'id de la session vient d'un cookie  isRequestedSessionIdFromURL()  vrai si l'id de la session vient d'un URL  JSESSIONID est le nom du cookie, utilisé par le conteneur de servlet, qui maintient un identifiant unique pour chaque session
  • 29. Configuration de session  Initialisation de la durée d'une session  dans le web.xml (en minutes) <session-config> <session-timeout>30</session-timeout> </session-config>  avec la méthode void setMaxInactiveInterval( int seconds ); de HttpSession qui spécifie le temps avant la fermeture d’une session  Terminaison de session  après expiration du timeout  avec la méthode void setMaxInactiveInterval( int seconds );  avec la méthode void invalidate() de l'objet HttpSession, HttpSession session = request.getSession(true); session.invalidate(); ou setMaxInactiveInterval(0);
  • 30. Méthodes de session  Méthodes appelables sur un objet de type HttpSession  void setAttribute( String name, Object value );  ajoute un couple (name, value) pour cette session  Object getAttribute( String name );  retourne l'objet associé à la clé name ou null  void removeAttribute( String name );  enlève le couple de clé name  java.util.Enumeration getAttributeNames();  retourne tous les noms d'attributs associés à la session  long getCreationTime(); /long getLastAccessedTime();  retourne la date de création / de dernier accès de la session en ms
  • 31. Partage de données entre servlets  Contexte d'exécution = ensemble de couples (name, value) partagées par toutes les servlets instanciées ServletContext ctx = getServletContext()  Méthodes appelables sur un objet de type ServletContext  void setAttribute( String name, Object value )  ajoute un couple (name, value) dans le contexte  Object getAttribute( String name )  retourne l'objet associé à la clé name ou null  void removeAttribute( String name )  enlève le couple de clé name  java.util.Enumeration getAttributeNames()  retourne tous les noms d'attributs associés au contexte
  • 32. Les listeners  Les listeners sont des objets dont les méthodes sont invoquées en fonction du cycle de vie d'une servlet  A la création et à la destruction d'un contexte (une application) Javax.servlet.ServletContextListener  Quand on modifie les attributs du contexte Javax.servlet.ServletContextAttributeListener  A la création, la suppression, d'une session Javax.servlet.HttpSessionListener  A la création, modification, suppression d'un attribut de session Javax.servlet.HttpSessionAttributeListener
  • 33. 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
  • 34. 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
  • 35. La déclaration d’un listener  Il faut informer le conteneur de la classe de listener, dans le descripteur de déploiement web.xml <listener> <listener-class> cours.exemple1.SessionCounter </listener-class> </listener>
  • 36. Exemple de classe de listener
  • 37. Filtres  Un filtre est un code exécuté entre la requête et le « endpoint »  Permettent de faire du pre et post-processing sur une requête  Lire la requête, modifier la requête, modifier la réponse, retourner des erreurs au client  Ajouter des fonctions aux applications  Log, Compression, Cache  Même cycle de vie qu’une servlet  Init/doFilter/destroy  Implanter la méthode doFilter()  Déclarer le filtre dans web.xml  Filter  Filter-mapping  Le transfert à la suite de la chaine se fait par la fonction chain.doFilter()  Transfert à un autre filtre ou à une servlet ou une page HTML ou une page JSP  La suite s’exécute au retour de doFilter()
  • 39. Filtres public class LoginFilter extends GenericFilter { private FilterConfig filterConfig; public void doFilter(HttpServletRequest request, HttpServletResponse response, FilterChain chain){ System.out.println("Entering Filter"); request.setAttribute("hello","Hello World!"); chain.doFilter(request,response); System.out.println("Exiting HelloWorldFilter"); } }
  • 40. Gestion des erreurs  Il est possible de définir les pages à afficher  En fonction d'erreurs http  En fonction d'exceptions java <error-page> <exception-type> cours.event.EventException </exception-type> <location>/erreur.html</location> </error-page> Dans web.xml <error-page> <error-code>404</error-code> <location>/404.html</location> </error-page> Pour une erreur Http Pour une exception java
  • 41. Gestion de concurrence  Par défaut les servlets sont exécutées de façon multi- threadée  Si une servlet doit être exécutée en exclusion mutuelle (ex. : accès à des ressources partagées critiques)  implantation de l'interface SingleThreadModel public class CompteurServlet extends HttpServlet implements SingleThreadModel{ public void doGet( ServletRequest request, ServletResponse response ) throws ServletException, IOException { /* Tout le code de la Servlet est en exclusion avec lui-même */ } }  Autre solution : définir du code synchronized dans la servlet  Attention aux inter-blocages
  • 42. Conclusion  Servlets : étendent le comportement des serveurs Web avec des programme Java  Portabilité  facilité d'écriture (Java)  Définition du code, du paquetage, du déploiement  Exécutée en // avec des processus légers (threads)  Limites  Difficile d’écrire du code HTML dans du code Java  Introduction de la technologie Java Server Pages (JSP)  Pas de mécanisme intégré de distribution  Introduction de la technologie Enterprise Java Beans (EJB)
  • 44. Servlet & JSP  Servlet : une classe java  Java Server Pages : insertion du code Java dans une page HTML  JSP ont les mêmes fonctionnalités que HttpServlet  Implémentation du mécanisme requête/réponse  Accéder aux mêmes données/objets qu’une servlet  Inclure ou rediriger la requête vers une autre servlet/JSP  Génération de différents types de contenus : HTML, XML, SVG..  Gestion des méthodes, headers, cookies, sessions...
  • 45. Servlet & JSP  Traitement d’une JSP par le serveur  Une JSP est compilée en servlet à la première utilisation  Se transforme en classe implémentant: javax.servlet.jsp.HttpJspPage  Lors du premier chargement d’une jsp  Génération d’une servlet à partir de la jsp  Compilation de la servlet  Instanciation de la servlet  Délai d’attente lors de la première consultation  En cas d’erreur de syntaxe, message envoyé au navigateur (erreurs détectées à l’exécution)  Lors des chargements suivants  Exécution de la servlet dans un thread
  • 46. JSP : illustration du fonctionnement
  • 47. JSP : illustration du fonctionnement
  • 48. JSP : illustration du fonctionnement
  • 49. JSP: Syntaxe  4 parties d'une JSP  Scriptlets <% %>  Déclarations <%! %>  Expressions <%= %>  Directives <%@directive %>
  • 50. Scriptlets <% %>  contient du code Java  insérer dans _jspservice() de la servlet, donc peut utiliser out, request, response, … <html> <body> <% String[] langages = {"Java", "C++", "Smalltalk", "Simula 67"}; out.println("<h3>Principaux langages orientés objets : </h3>"); for (int i=0; i < langages.length; i++) { out.println("<p>" + langages[i] + "</p>"); } %> </body> </html>
  • 51. Expressions <%= ... %>  <%= expr %> génère l'affichage d'une valeur de l'expression expr  expr : expression en Java qui renvoie un objet String ou un type primitif.  raccourci pour <% out.println(expr); %>
  • 52. Déclarations <%! … %>  Méthodes et variables d'instance  Des méthodes et des variables d'instance peuvent être associées à une JSP entre les directives <%! et %>  Méthodes et variables d’instance de la servlet générée
  • 53. Déclarations <%! … %>  Méthodes et variables d’instance  Méthode d’instance de la servlet générée à partir de la jsp  Pas d’accès aux objets implicites (out, request, page...) : ce sont des objets définis dans la méthode principale de la servlet (_jspService()) Attention! <%! ... %> : définie une variable d’instance (persiste entre deux invocations) <% ... %> : définie une variable locale à la jsp (réinitialisée à chaque invocation)
  • 54. Directive <%@directive... %>  Fournit des informations globales relatives à la page <%@ directive attribut="valeur" %>  Trois types de directives:  page : modifier les données de la page (import de packages, spécification d’un type de contenu, gestion des sessions)  Forme générale : <%@ page import="java.io.*, java.sql.*"> <%@ page isErrorPage="false" %> <%@ page contentType="text/html" %>  include : inclure des fichiers ou autres servlets/JSP, C’est comme si le contenu du fichier à inclure était directement copié dans le fichier courant. <%@ include page="/monJSP.jsp" %>  taglib : utiliser des bibliothèques de balises personnalisées <%@ taglib uri="..." prefix="..." %>
  • 55. Objets implicites  Objets pré-déclarés utilisables dans le code Java des JSPs  out : le flux de sortie pour générer le code HTML  request : la requête qui a provoqué le chargement de la JSP  response : la réponse à la requête de chargement de la JSP  page : l'instance de servlet associée à la JSP courante ( this)  exception : l'exception générée en cas d'erreur sur une page  session : suivi de session pour un même client
  • 57. <HTML> <BODY BGCOLOR="#ffffcc"> <CENTER> <% if (request.getParameter("nom")==null && request.getParameter("email")== null) { %> <H2>Information utilisateur</H2> <FORM method="GET" action="/exemple2/web/process.jsp"> <P>Votre nom: <input type="text" name="nom" size=26> <P>Votre email: <input type="text" name="email" size=26> <P><input type="submit" value="Envoyer"> </FORM> <% } else { %> <%! String nom, email; %> <% nom = request.getParameter("nom"); email = request.getParameter("email"); %> <P><B>Vous avez fourni les informations suivantes:</B> <P><B>Name</B>: <%= nom %> <P><B>Email</B>: <%= email %> <% } %> </CENTER> </BODY> </HTML>
  • 58. Gestion des erreurs  Erreur de syntaxe  Dans le code HTML  Dans les directives JSP (ex. : oubli d'une directive %>)  Dans le code Java (ex : oubli de ;)  Erreur d’ exécution du code Java (ex. : NullPointerException)  Dans tous les cas, erreur récupérée dans le navigateur client  Conserver la page par défaut construite par le moteur  En concevoir une adaptée aux besoins particuliers de l'application  Utilisation des directives :  <%@ page errorPage="..." %> : URL du gestionnaire d’erreurs  <%@ page isErrorPage="..." %> : vrai si page est un
  • 61. Balises de commentaires  2 manières de placer des commentaires dans une page JSP <!-- mon commentaire -->  dans ce cas les commentaires sont transmis à la réponse. Ils sont donc visibles lorsqu'on visualise le code source de la page HTML.  ou <%-- mon commentaire --%>  Le serveur JSP ne les prend pas en compte. Leur intérêt est uniquement de commenter le code JSP
  • 62. La directive <%@include %> <%@include file="/chemin/relatif/auContexte"%>  Cette inclusion se fait au moment de la conversion, pendant la création de la servlet correspondante.  Le contenu du fichier externe est inclus comme s’il était saisi directement dans la page JSP  Les ressources à inclure doivent être contenues dans le contexte de l'application web
  • 64. TagLib  Un tag JSP est une simple balise XML à laquelle est associée une classe Java.  A la compilation d'une page JSP, ces tags sont remplacés par l'utilisation de ces classes Java qui implémentent une interface particulière. <prefixe:nomDuTag attribut="valeur"> Corps du tag </prefix:nomDuTag>  Un préfixe, qui permet de distinguer les différentes taglibs utilisées.  Le nom du tag de la librairie  un certain nombre de couple d'attribut/valeur  un corps.  Une JSP Taglib est une collection d'actions prédéfinies destinée à être utilisée dans une page JSP sous forme de tags.  Elle se compose:  d'un descripteur de taglib (Tag Librarie Descriptor)
  • 65. TagLib usuels  jsp:useBean associe une instance d’objet Java Bean  jsp:setProperty positionne la valeur d’une propriété d’un bean  jsp:getProperty récupère la valeur de la propriété d’un bean  jsp:include inclut le contenu du page statique ou dynamique  jsp:invoke invoque l’exécution d’un fragment (JSP, ...)  jsp:forward redirige le traitement de la requête à un autre script  jsp:element insère un élément (XML) dans le document  jsp:attribute attribut d’un élément  jsp:output configure le prélude du document XML  jsp:param paramètre (key/value) pour jsp:forward et jsp:include  jsp:text ajoute le texte à la sortie  jsp:plugin insère un objet externe  jsp:fallback alternative en cas d’échec du jsp:plugin
  • 66. Le tag <jsp:include>  permet d'inclure le contenu généré par une JSP ou une servlet dynamiquement au moment ou la JSP est exécutée.  Contrairement à la directive <@include page= > avec laquelle le fichier est inséré dans la JSP avant la génération de la servlet.  Syntaxe <jsp:include page= "URL" flush="true" />  L'attribut page permet de préciser l'URL relative de l'élément à insérer.  L'attribut permet d'indiquer si le tampon doit être envoyé au client est vidé avant de l’inclure.  Par défaut : flush = false  Si flush = true : le serveur envoie le tampon de sortie de la page en cours (la partie de la page qui a déjà été traitée) dans le navigateur avant de traiter le fichier inclus.
  • 67. Le tag <jsp:include>  Agrégation des résultats fournis par plusieurs JSP  Inclusion dynamique (délégation de servlets : deux servlets, l’une appelle l’autre) Fichierinc.jsp
  • 68. Le modèle de composants Java  Le modèle de composants Java (Java beans) permet de construire une application en assemblant des entités logicielles par programme (ou visuellement)  Ce modèle de composants est décrit par un ensemble d'APIs  Pour fonctionner, ce modèle repose sur un ensemble d'outils formant un environnement dans lequel les composants interagissent  Ce modèle utilise des conteneurs qui fixe un cadre pour la coopération des composants  Dans l'architecture des applications web (3-tiers), les composants métiers sont implantés par des Java beans
  • 69. Persistance - JavaBean  Un bean est un objet Java  Comme tout objet, il possède un état  Cet état doit être mémorisé pour toute utilisation ultérieure du bean  Tout bean doit donc utiliser un mécanisme de persistance universel défini par leur conteneur  Ils doivent d'implémenter l'interface java.io.Serializable
  • 70. JavaBean  Les JavaBeans sont des classes Java qui respectent les directives suivantes :  un constructeur public sans argument  les propriétés d'un Bean sont accessibles au travers de méthodes getXXX (lecture) et setXXX (écriture) portant le nom de la propriété  Méthodes de lecture des propriétés :  type getNomDeLaPropriété()  boolean isNomPropriété()  Méthodes d'écriture des propriétés :  void setNomDeLaPropriété(type) : un seul argument du type de la propriété et son type de retour est void  Un JavaBean implémente l'interface java.io.Serializable  permettant la sauvegarde de l'état du Bean
  • 72. Bean et JSP  Un bean est inclus dans une page JSP par la balise : <jsp:useBean>  permet de localiser une instance ou d'instancier un bean pour l'utiliser dans la JSP  Un bean peut encapsuler des traitements complexes et être réutilisable par d'autre JSP ou composants  Après exécution, un bean rend son résultat à la page JSP ou à la servlet  L'utilisation de beans évite l'emploi de la méthode getRequestParameter(...)  La valeur du paramètre d'une requête peut être utilisée directement pour renseigner la propriété d'un bean  Un serveur peut gérer la portée (scope) d'un bean en le liant soit à une page, une requête, une session ou une application
  • 73. JavaBeans - Syntaxe <jsp:useBean id="nomInstanceJavaBean" class="nomClasseDuBean" scope="request|session|application|page"> </jsp:useBean>  Le bean est alors identifié et accessible par : "nomInstanceJavaBean"  L'attribut scope indique la portée du bean.
  • 74. JSP et Java Beans
  • 75. JSP et Java Beans  Récupération des propriétés du bean:  Par appel de méthode getXXX() ou par la balise<jsp:getProperty…>
  • 76. JSP et Java Beans  Positionner les propriétés du bean dans une JSP  Par appel de méthode setXXX(...) ou par la balise <jsp:setProperty…>
  • 77. Exemple  La page JSP qui suit affiche le texte : Bonjour suivi de la valeur du paramètre nom de la requête.  La classe HelloBean est stockée dans le répertoire entites.  La propriété nom du bean HelloBean est alimentée par le paramètre de la requête passé dans son en-tête si celui-ci est renseigné  Sinon c'est sa valeur par défaut qui est utilisée  L'exécution de la page JSP provoque l'affichage du texte bonjour suivi du contenu de la propriété nom du bean HelloBean  Intérêt :  pas de code Java dans la page JSP  modularité dans la construction de l'application
  • 80. JSP et JavaBeans – Centré page!  La logique de l’application est dans les pages JSP  Mixité de la présentation et la logique métier  L’enchainement des pages est codé dans les pages JSP  Contrôle de flux pris en charge par les JSP memu.jsp catalog.jsp checkout.jsp dataBase page–centric catalog application
  • 81. Modèle MVC  Le modèle Model-View-Controller a pour objectif d ’organiser une application interactive en séparant :  les données  la représentation des données  le comportement de l’application  Le Model représente la structure des données dans l ’application et les opérations spécifiques sur ces données  Une Vue présente les données sous une certaine forme à l ’utilisateur, suivant un contexte d ’exploitation.  Un Controller traduit les interactions utilisateur par des appels de méthodes (comportement) sur le modèle et sélectionne la vue appropriée basée sur l’état du modèle.
  • 82. Modèle MVC en JAVA  Controlleur : Servlet  View : JSP  Model : JavaBean
  • 83. Exemple - MVC : étape 1  Le client récupère un formulaire (index.html)  pour passer une requête avec paramètres (1, 2, puis 3)
  • 85. MVC : étape 2 1. Le client envoie son formulaire (GET/POST avec paramètres) 2. Le conteneur transmet au servlet correspondant (le controller)
  • 88. MVC : étape 3 3. La servlet contrôleur interroge le model sur «ing2» 4. Le model retourne au contrôleur le résultat correspondant
  • 90. MVC : étape 4 5. Le controller utilise les données du model pour sa réponse 6. Le controller transmet sa réponse à la view (JSP)
  • 92. MVC : étape 5 7. La JSP (view) traite la réponse transmise par le controller 8. La page HTML résultante est reçue par le client
  • 94. Ex : AREL V6 - liste des promos
  • 95.
  • 96.
  • 97.
  • 98.  Package javax.servlet.http  HttpServlet gestion des servlet pour recevoir des requêtes et envoyer des réponses  HttpServletRequest interface des requêtes  HttpServletResponse interface des réponses  HttpSession gestion de la session  ServletContext gestion du contexte de l'application  RequestDispatcher lancement de servlet (forward())
  • 99. 105 public class ServletInit extends HttpServlet { String _login = null; Calendar _initTime = null; public void init() throws ServletException { _login = this.getInitParameter("login"); _initTime = new GregorianCalendar(); } public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException, IOException { PrintWriter out = res.getWriter(); res.setContentType("text/html"); out.println("<html><head><title>Initialization</title><body><h2>" + "I am the Servlet of <i>" + _login+ "</i><br/>" + "I was initialized at " + _initTime.get(Calendar.HOUR_OF_DAY) + ":"+ _initTime.get(Calendar.MINUTE) + ":"+ _initTime.get(Calendar.SECOND) + "</h2></body></html>"); }} ServletInit.java
  • 100. 106 Loading a Servlet on Startup  A Servlet is usually loaded when it is first being called  You can set Tomcat to load a specific Servlet on startup in the Servlet declaration inside web.xml <servlet> <servlet-name>InitExample</servlet-name> <servlet-class>ServletInit</servlet-class> <load-on-startup/> </servlet>
  • 101. 107 Destruction de servlets  Le serveur peut détruire des servlets chargées :  arrêt demandé par l’administrateur (exp, arrêt du serveur)  servlet n’est pas utilisée pour une longue periode  serveur a besoin de ressources libres  Le serveur supprime une servlet seulement si tous les threads sont terminés et une période de grâce est expirée  Avant la suppression, le conteneur appelle la méthode destroy()  Fermer les connexions vers les BDD  ….
  • 102. Servlet <<Interface>> ServletConfig <<Interface>> + init(…) + getInitParameter(String): String + service(…) + getServletName(): String + destroy() + … GenericServlet {abstraite} + service(...) {abstraite} + ... HttpServlet + service(…) + doXXX (…) Dériver HttpServlet pour construire des Servlets spécifiques au protocole HTTP en redéfinissant doGet, doPost…HelloWorld + doGet(…) HttpServlet définit la méthode service qui appelle doXXX selon la requête HTTP reçue (doGet, doPost…). L’implantation par défaut de doXXX rend une erreur HTTP 405 (méthode non
  • 103. 109 Thread Synchronization  Multiple threads are accessing the same Servlet object at the same time  Therefore, you have to deal with concurrency  init() and destroy() are guaranteed to be executed only once (before/after all service executions)
  • 104. What is Java Servlets?  Servlet  module run inside request/response-oriented server Browser Java-enabled Web Server Servlet Database HTML form Server Servlet = Browser Applet Servlets are to Servers what Applets are to Browsers Substitute for CGI scripts easier to write and fast to run Not part of the core Java Framework
  • 105. Architecture Une servlet peut être appelée par un client alors qu’elle s’exécute déjà pour un autre client. L’objet servlet unique s’exécute alors dans un autre thread. Certaines parties du code doivent être synchronisées avec les techniques prévues en Java pour ce faire.
  • 106. Développement de l’application web  Sources java + ressources statiques (ex: images) + librairies (.jar) + fichier de déploiement (web.xml)  Création d’une archive .war (Web Application ARchive) à déposer sur le serveur (ex : dans le répertoire webapps de Tomcat) (paquetage)
  • 107. Servlet & HTTP  Une servlet doit implémenter l’interface javax.servlet.Servlet  soit directement,  soit en dérivant d’une classe implémentant cette interface :  javax.servlet.GenericServlet : une classe abstraite indépendante du protocole  javax.servlet.http.HttpServlet : une classe abstraite spécifique au protocole HTTP
  • 108. HttpServletRequest HttpSession ServletContext En résumé Niveau de la requête client Niveau de la session client Niveau de l’application web
  • 109. 115 Sessions And the server knows that all of these requests are from a different client.