Vous êtes sur la page 1sur 24

SERVLETS

heithem.abbes@gmail.com 2013/2014
Servlet - Dfinition
! Servlet : Server-side applet
! Applet est une classe sexcutant chez le client alors que la
servlet sexcute chez server.
! Une classe java sexcutant cot serveur
! reoit et rpond aux requtes de clients web,
! gnralement via HTTP " servlet web ou servlet (pour simplifier)
! Permettre la programmation d'applications web en Java

Navigateur Web
requte
requte
rponse
rponse

Servlet
Serveur
Web
Environnement dexcution de servlets
! Les servlets s'excutent 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
requte
requte
rponse
rponse

Servlet
Serveur
Web
! Exemples de conteneur de servlets
! Tomcat (Implantation de rfrence)
! 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 dune servlet
! Le conteneur gre le cycle de vie :
! charge la classe de servlet et initialise une instance de cette classe
! chaque requte du client est traite par une instance de servlet
dans un thread spar
! peut supprimer la servlet
! peut garder la servlet pour traiter dautres requtes
Browser
Browser
Browser
Server
Servlet
Instance
Cycle de vie dune servlet
! Lorsque la servlet est instanci, le conteneur appelle la mthode init() pour
initialiser la servlet
! Sur demande du client, le conteneur appelle la mthode service()
! Avant la suppression de la servlet, le conteneur appelle la mthode destroy()
6
Classe Servlet
Appel de la methode
init
Instance de
Servlet
Traitement de requtes:
appel de la mthode
service
Dtruire la Servlet:
appel de la mthode
destroy
Garbage
Collection
ServletConfig
Modle de programmation
! Une servlet doit implmenter
linterface javax.servlet.Servlet
! soit directement,
! soit en drivant dune classe
implmentant cette interface :
# javax.servlet.GenericServlet : une classe
abstraite indpendante du protocole
# javax.servlet.http.HttpServlet : une
classe abstraite spcifique au protocole
HTTP
! linterface javax.servlet.Servlet
possde les mthodes pour
! initialiser la servlet : init()
! recevoir et rpondre aux requtes des
clients : service()
! dtruire la servlet et ses ressources :
destroy()
Servlet web
! Pour faciliter le traitement particulier des requtes web, la classe
Servlet est affine en javax.servlet.http.HttpServlet
! des mthodes remplacent la mthode service() de la classe mre
# doGet() pour les requtes http de type GET
# doPost() pour les requtes http de type POST
# ....
! La classe servlet doit OBLIGATOIREMENT implmenter lune des mthodes
redfinies, choisies selon le mode denvoi du formulaire html qui lexcute
! service() de HttpServlet appelle automatiquement la bonne mthode
en fonction du type de requtes http
HTTP
! HTTP dcrit les changes entre navigateur web (client) et serveur
web : le navigateur effectue une requte HTTP; le serveur la traite
et envoie une rponse HTTP.
! Une requte HTTP a le format suivant :
Ligne de commande (Commande, URL, Version de protocole)
En-tte de requte
[Ligne vide]
Corps de requte
! Une rponse HTTP a le format suivant :
Ligne de statut (Version, Code-rponse, Texte-rponse)
En-tte de rponse
[Ligne vide]
Corps de rponse
! Les commandes essentielles sont GET (obtenir un document) et POST
(envoyer du contenu).
! Les donnes de la requte sont passes dans lURL pour un GET et
dans le corps pour un POST.
Dveloppement de Servlet
! Une Servlet web
! tend la classe
javax.servlet.http.HttpServlet
! implmente des mthodes spcifiques au
protocole HTTP remplacent la mthode
service() : doGet(), doPost()
! La servlet reoit les requtes et renvoie les
rponses via 2 objets :
! Objet requte : javax.servlet.ServletRequest
# contient les informations ncessaires pour une
communication du client vers le serveur
! Objet rponse : javax.servlet.ServletResponse
# contient les informations ncessaires pour une
communication du serveur vers le client
Dveloppement de Servlet
! Si la mthode utilise est GET, il suffit de redfinir la mthode :
public void doGet( HttpServletRequest request,
HttpServletResponse response )
! Si la mthode utilise est POST, il suffit de redfinir la
mthode :
public void doPost( HttpServletRequest request,
HttpServletResponse response)
Dveloppement 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 requte
// traitements
// envoi de la rponse
}
public void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletException {
// lecture de la requte
// traitements
// envoi de la rponse
}
}
Principe de fonctionnement
! Les fichiers de bytecode (.class) sont stocks sur le serveur
(comme des docs)
! Ils sont dsigns par une URL
! http://depinfo-fst.rnu.tn/MaServlet
! Le chargement de l'URL provoque l'excution de la servlet
Exemple - HelloServlet
Exemple - HelloServlet Exemple - HelloServlet
Paramtres des mthodes doGet() et doPost()
! Utiliser les objets HttpServletRequest et
HttpServletResponse passs en paramtres de ces
mthodes pour implanter le service
! HttpServletRequest contient les informations sur le formulaire
html initial (utile pour doPost())
! La mthode getParameter() rcupre les paramtres
dentre
! HttpServletResponse contient le flux de sortie pour la
gnration de la page html rsultat (getWriter())
Aperu de lAPI servlet
! Mthodes importantes dun objet HttpServletRequest
! String getParameter(String param)
# Retourne la valeur du champ param transmis dans les donnes du formulaire
! java.util.Enumeration getParameterNames()
# retourne l'ensemble des noms de paramtres transmis la servlet
! String getMethod()
# retourne la mthode HTTP (GET ou POST) utilise pour invoquer la servlet
! Mthodes importantes dun objet HttpServletResponse
! void setContentType(String type)
# dfinit le type MIME du document retourn par la servlet
! PrintWriter getWriter()
# retourne un flux de sortie permettant la servlet de produire son rsultat
# la servlet crit le code HTML sur ce flux de sortie
! void sendRedirect(String location)
# permet de rediriger vers lurl location
Aperu de lAPI servlet
Autres mthodes 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'entre permettant une servlet chane de rcuprer
le rsultat produit par la servlet prcdente
! permet la servlet chane de modifier le rsultat
Dploiement dune Servlet
! Pour dployer une application dans
un conteneur, il faut lui fournir deux
lments :
! Tous les composants (classes
compiles, ressources ...) regroupe
dans une archive ou module
! Descripteur de dploiement contenu
dans le module qui prcise au
conteneur des options pour excuter
l'application
! Une servlet doit faire partie dun module web pour tre dploye
! Un module Web est un ensemble de librairies, de fichiers de
configurations, de code Java (bytecode des servlets...), ...
Dploiement dune application web
! Web Application Archive : une application web (*.html, *.jsp,
servlets, ...) package dans un archive (.war) et est paramtre dans
le fichier WEB-INF/web.xml
! Structure
! Fichiers web de lapplication (HTML, JSP, js, css...)
! Rpertoire META-INF : fichiers de configuration
# MANIFEST.MF : informations sur le zip
! Rpertoire WEB-INF : contenu de lapplication
# WEB-INF/web.xml
# Descripteur de dploiement
# WEB-INF/classes/
# class des servlets et des classes (JavaBean, ...) associes
# WEB-INF/lib/
# .jar additionnels provenant de tierce parties (comme des drivers JDBC, TagLib (JSF, ...),
# WEB-INF/tlds/
# .tld dcrivant les TagLibs
Descripteur de dploiement 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 paramtre dinitialisation </param-name>
< param-value> valeur du paramtre dinitialisation </param-value>
</init-param>
</servlet>

<servlet-mapping>
<servlet-name> nom de servlet </servlet-name>
<url-pattern> url dinvocation de servlet </url-pattern>
</servlet-mapping>
</web-app>
Descripteur de dploiement 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 mthode est invoque pour initialiser la servlet
! Les paramtres dinitiation sont dfinis dans web.xml
! peuvent tre changs sans avoir recompiler l'application
! La mthode, getInitParameter() de linterface ServletConfig permet de
rcuprer ces paramtres dinitialisation
<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>
Chanage de servlets
! Agrgation des rsultats fournis par plusieurs servlets
! Meilleure modularit
! Meilleure rutilisation
! Utilisation d'un RequestDispatcher
! obtenu via un objet request de type HttpServletRequest
RequestDispatcher rd = request.getRequestDispatcher( "servlet2" );
! Inclusion du rsultat d'une autre servlet
rd.include(request, response);
! Dlgation du traitement une autre servlet
rd.forward(request, response);
Cookies
! Cookie = donne stocke par un serveur web chez un client
! Moyen pour rcuprer des informations sur le client
# nom, adresse email,
! Eviter lutilisateur de taper ces informations chaque fois quil est
ncessaire
! L'utilisateur a la possibilit d'interdire leur dpt dans son navigateur
! Dfinis 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 );
! Rcupr via un objet request
Cookie[] desCookies = request.getCookies();
! Quelques mthodes : String getName() / String getValue()
Sessions
! HTTP protocole non connect (sans tat), ne gre pas les
sessions
! Deux requtes successives d'un mme client sont
indpendantes pour le serveur
! Notion de session : suivi de l'activit du client sur
plusieurs pages
! un objet Session associ toutes les requtes dun utilisateur
! Les sessions expirent au bout d'un dlai fix (pas de requte
pendant n secondes ! expiration de la session)
! La gestion des sessions utilise les techniques classiques
! url rewriting, cookies, champs cachs dans les formulaires
API de HttpServlet
! Les servlets offrent une API simplifiant la gestion de sessions
! Lobjet request de HttpServletRequest maintient les informations sur
la session
! Accessibles via les mthodes:
! HttpSession session = request.getSession(boolean flag)
# flag=true: retourne l'objet session courant ou en cre 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,
quimaintient un identifiant unique pour chaque session
Configuration de session
! Initialisation de la dure d'une session
! dans le web.xml (en minutes)
<session-config>
<session-timeout>30</session-timeout>
</session-config>
! avec la mthode void setMaxInactiveInterval( int seconds ); de
HttpSession qui spcifie le temps avant la fermeture dune session

! Terminaison de session
! aprs expiration du timeout
! avec la mthode void setMaxInactiveInterval( int seconds );
! avec la mthode void invalidate() de l'objet HttpSession,
HttpSession session = request.getSession(true);

session.invalidate(); ou setMaxInactiveInterval(0);
Mthodes de session
! Mthodes 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 );
# enlve le couple de cl name
! java.util.Enumeration getAttributeNames();
# retourne tous les noms d'attributs associs la session
! long getCreationTime(); /long getLastAccessedTime();
# retourne la date de cration / de dernier accs de la session en
ms
Partage de donnes entre servlets
! Contexte d'excution = ensemble de couples (name, value) partages par toutes les
servlets instancies
ServletContext ctx = getServletContext()
! Mthodes 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 )
# enlve le couple de cl name
! java.util.Enumeration getAttributeNames()
# retourne tous les noms d'attributs associs au contexte
Les listeners
! Les listeners sont des objets dont les mthodes sont invoques en fonction
du cycle de vie d'une servlet
! A la cration et la destruction d'un contexte (une application)
Javax.servlet.ServletContextListener
! Quand on modifie les attributs du contexte
Javax.servlet.ServletContextAttributeListener
! A la cration, la suppression, d'une session
Javax.servlet.HttpSessionListener
! A la cration, 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(HttpSessionEventse)
Notification that a session was created.
void sessionDestroyed(HttpSessionEventse)
Notification that a session was invalidated.
HttpSessionListener
void attributeAdded(HttpSessionBindingEventse)
Notification that an attribute has been added to a
session.
void attributeRemoved(HttpSessionBindingEventse)
Notification that an attribute has been removed from
a session.
void attributeReplaced(HttpSessionBindingEventse)
Notification that an attribute has been replaced in a
session.
HttpSessionAttributeListener
La dclaration dun listener
! Il faut informer le conteneur de la classe de listener, dans le
descripteur de dploiement web.xml
<listener>
<listener-class>
cours.exemple1.SessionCounter
</listener-class>
</listener>


Exemple de classe de listener
Filtres
! Un filtre est un code excut entre la requte et le endpoint
! Permettent de faire du pre et post-processing sur une requte
! Lire la requte, modifier la requte, modifier la rponse, retourner des erreurs
au client
! Ajouter des fonctions aux applications
# Log, Compression, Cache
! Mme cycle de vie quune servlet
! Init/doFilter/destroy
! Implanter la mthode doFilter()
! Dclarer 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 sexcute 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 dfinir 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 dfaut les servlets sont excutes de faon multi-threade
! Si une servlet doit tre excute en exclusion mutuelle (ex. :
accs des ressources partages 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-mme */
}
}

! Autre solution : dfinir 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)
! Dfinition du code, du paquetage, du dploiement
! Excute en // avec des processus lgers (threads)

! Limites
! Difficile dcrire du code HTML dans du code Java
# Introduction de la technologie Java Server Pages (JSP)
! Pas de mcanisme intgr 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 mmes fonctionnalits que HttpServlet
! Implmentation du mcanisme requte/rponse
! Accder aux mmes donnes/objets quune servlet
! Inclure ou rediriger la requte vers une autre servlet/
JSP
! Gnration de diffrents types de contenus : HTML,
XML, SVG..
! Gestion des mthodes, headers, cookies, sessions...
Servlet & JSP
! Traitement dune JSP par le serveur
! Une JSP est compile en servlet la premire utilisation
! Se transforme en classe implmentant:
javax.servlet.jsp.HttpJspPage
! Lors du premier chargement dune jsp
! Gnration dune servlet partir de la jsp
! Compilation de la servlet
! Instanciation de la servlet
! Dlai dattente lors de la premire consultation
! En cas derreur de syntaxe, message envoy au
navigateur (erreurs dtectes lexcution)
! Lors des chargements suivants
! Excution 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 <% %>
! Dclarations <%! %>
! Expressions <%= %>
! Directives <%@directive %>
Scriptlets <% %>
! contient du code Java
! insrer 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 orients objets : </h3>");
for (int i=0; i < langages.length; i++) {
out.println("<p>" + langages[i] + "</p>"); }
%>
</body> </html>
Expressions <%= ... %>
! <%= expr %> gnre 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); %>
Dclarations <%! %>
! Mthodes et variables d'instance
! Des mthodes et des variables d'instance peuvent tre
associes une JSP entre les directives <%! et %>
! Mthodes et variables dinstance de la servlet gnre
Dclarations <%! %>
! Mthodes et variables dinstance
! Mthode dinstance de la servlet gnre partir de la jsp
! Pas daccs aux objets implicites (out, request, page...) : ce
sont des objets dfinis dans la mthode principale de la
servlet (_jspService())
Attention!
<%! ... %> : dfinie une variable dinstance (persiste entre deux invocations)
<% ... %> : dfinie une variable locale la jsp (rinitialise chaque invocation)

Directive <%@directive... %>
! Fournit des informations globales relatives la page
<%@ directive attribut="valeur" %>
! Trois types de directives:
! page : modifier les donnes de la page (import de packages, spcification
dun type de contenu, gestion des sessions)
# Forme gnrale :
<%@ page import="java.io.*, java.sql.*">
<%@ page isErrorPage="false" %>
<%@ page contentType="text/html" %>
! include : inclure des fichiers ou autres servlets/JSP, Cest comme si le
contenu du fichier inclure tait directement copi dans le fichier courant.
<%@ include page="/monJSP.jsp" %>
! taglib : utiliser des bibliothques de balises personnalises
<%@ taglib uri="..." prefix="..." %>

Objets implicites
! Objets pr-dclars utilisables dans le code Java des
JSPs
! out : le flux de sortie pour gnrer le code HTML
! request : la requte qui a provoqu le chargement de la JSP
! response : la rponse la requte de chargement de la JSP
! page : l'instance de servlet associe la JSP courante ( this)
! exception : l'exception gnre en cas d'erreur sur une page
! session : suivi de session pour un mme client
! application : espace de donnes partag entre toutes les JSP
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 excution du code Java (ex. : NullPointerException)
! Dans tous les cas, erreur rcupre dans le navigateur client
! Conserver la page par dfaut construite par le moteur
! En concevoir une adapte aux besoins particuliers de l'application
! Utilisation des directives :
# <%@ page errorPage="..." %> : URL du gestionnaire derreurs
# <%@ page isErrorPage="..." %> : vrai si page est un gestionnaire
derreurs
Gestion des erreurs Gestion des erreurs
Balises de commentaires
! 2 manires de placer des commentaires dans une page JSP

<!-- mon commentaire -->
! dans ce cas les commentaires sont transmis la rponse. 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 intrt 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 cration de la servlet correspondante.
! Le contenu du fichier externe est inclus comme sil 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 associe une classe Java.
! A la compilation d'une page JSP, ces tags sont remplacs par l'utilisation de
ces classes Java qui implmentent une interface particulire.
<prefixe:nomDuTag attribut="valeur">
Corps du tag
</prefix:nomDuTag>
# Un prfixe, qui permet de distinguer les diffrentes taglibs utilises.
# 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 prdfinies destine tre utilise
dans une page JSP sous forme de tags.
! Elle se compose:
! d'un descripteur de taglib (Tag Librarie Descriptor)
! d'un ensemble de classes Java implmentant l'interface JspTag
TagLib usuels
! jsp:useBean associe une instance dobjet Java Bean
! jsp:setProperty positionne la valeur dune proprit dun bean
! jsp:getProperty rcupre la valeur de la proprit dun bean
! jsp:include inclut le contenu du page statique ou dynamique
! jsp:invoke invoque lexcution dun fragment (JSP, ...)
! jsp:forward redirige le traitement de la requte un autre script
! jsp:element insre un lment (XML) dans le document
! jsp:attribute attribut dun lment
! jsp:output configure le prlude du document XML
! jsp:param paramtre (key/value) pour jsp:forward et jsp:include
! jsp:text ajoute le texte la sortie
! jsp:plugin insre un objet externe
! jsp:fallback alternative en cas dchec du jsp:plugin
! jsp:params liste les jsp:param dans un jsp:plugin
Le tag <jsp:include>
! permet d'inclure le contenu gnr par une JSP ou une servlet
dynamiquement au moment ou la JSP est excute.
! Contrairement la directive <@include page= > avec laquelle le fichier
est insr dans la JSP avant la gnration de la servlet.
! Syntaxe <jsp:include page= "URL" flush="true" />



! L'attribut page permet de prciser l'URL relative de l'lment insrer.
! L'attribut permet d'indiquer si le tampon doit tre envoy au client est vid
avant de linclure.
! Par dfaut : flush = false
! Si flush = true : le serveur envoie le tampon de sortie de la page en cours (la
partie de la page qui a dj t traite) dans le navigateur avant de traiter le
fichier inclus.
Le tag <jsp:include>
! Agrgation des rsultats fournis par plusieurs JSP
! Inclusion dynamique (dlgation de servlets : deux servlets, lune appelle
lautre)
Fichierinc.jsp
Le modle de composants Java
! Le modle de composants Java (Java beans) permet
de construire une application en assemblant des entits
logicielles par programme (ou visuellement)
! Ce modle de composants est dcrit par un ensemble
d'APIs
! Pour fonctionner, ce modle repose sur un ensemble
d'outils formant un environnement dans lequel les
composants interagissent
! Ce modle utilise des conteneurs qui fixe un cadre
pour la coopration des composants
! Dans l'architecture des applications web (3-tiers), les
composants mtiers sont implants par des Java beans
Persistance - JavaBean
! Un bean est un objet Java
! Comme tout objet, il possde un tat
! Cet tat doit tre mmoris pour toute utilisation
ultrieure du bean
! Tout bean doit donc utiliser un mcanisme de
persistance universel dfini par leur conteneur
! Ils doivent d'implmenter l'interface java.io.Serializable
JavaBean
! Les JavaBeans sont des classes Java qui respectent les directives
suivantes :
! un constructeur public sans argument
! les proprits d'un Bean sont accessibles au travers de mthodes
getXXX (lecture) et setXXX (criture) portant le nom de la proprit
! Mthodes de lecture des proprits :
! type getNomDeLaProprit()
! boolean isNomProprit()
! Mthodes d'criture des proprits :
! void setNomDeLaProprit(type) : un seul argument du type de la
proprit et son type de retour est void
! Un JavaBean implmente 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 rutilisable
par d'autre JSP ou composants
! Aprs excution, un bean rend son rsultat la page JSP ou la
servlet
! L'utilisation de beans vite l'emploi de la mthode
getRequestParameter(...)
! La valeur du paramtre d'une requte peut tre utilise directement
pour renseigner la proprit d'un bean
! Un serveur peut grer la porte (scope) d'un bean en le liant soit
une page, une requte, 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 porte du bean.
JSP et Java Beans
JSP et Java Beans
! Rcupration des proprits du bean:
! Par appel de mthode getXXX() ou par la balise<jsp:getProperty>
JSP et Java Beans
! Positionner les proprits du bean dans une JSP
! Par appel de mthode setXXX(...) ou par la balise <jsp:setProperty>
Exemple
! La page JSP qui suit affiche le texte : Bonjour suivi de la valeur du
paramtre nom de la requte.
! La classe HelloBean est stocke dans le rpertoire entites.
! La proprit nom du bean HelloBean est alimente par le
paramtre de la requte pass dans son en-tte si celui-ci est
renseign
! Sinon c'est sa valeur par dfaut qui est utilise
! L'excution de la page JSP provoque l'affichage du texte bonjour
suivi du contenu de la proprit nom du bean HelloBean
! Intrt :
! 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 lapplication est dans
les pages JSP
! Mixit de la prsentation et la logique
mtier

! Lenchainement des pages est cod
dans les pages JSP
! Contrle de flux pris en charge par les
JSP
memu.jsp catalog.jsp checkout.jsp
dataBase
pagecentric catalog application
Modle MVC
! Le modle Model-View-Controller a pour objectif
d organiser une application interactive en sparant :
! les donnes
! la reprsentation des donnes
! le comportement de lapplication
! Le Model reprsente la structure des donnes dans
l application et les oprations spcifiques sur ces donnes
! Une Vue prsente les donnes sous une certaine forme
l utilisateur, suivant un contexte d exploitation.
! Un Controller traduit les interactions utilisateur par des appels
de mthodes (comportement) sur le modle et slectionne la
vue approprie base sur ltat du modle.
Modle MVC en JAVA
! Controlleur : Servlet
! View : JSP
! Model : JavaBean
Exemple - MVC : tape 1
! Le client rcupre un formulaire (index.html)
! pour passer une requte avec paramtres (1, 2, puis 3)
index.html
MVC : tape 2
1. Le client envoie son formulaire (GET/POST avec paramtres)
2. Le conteneur transmet au servlet correspondant (le controller)
Controller : SelectPromo.java
Configuration : web.xml MVC : tape 3
3. La servlet controller interroge le model sur ing2
4. Le model retourne au controller le rsultat correspondant
Model : Promo.java MVC : tape 4
5. Le controller utilise les donnes du model pour sa rponse
6. Le controller transmet sa rponse la view (JSP)

Controller : SelectPromo.java MVC : tape 5
7. La JSP (view) traite la rponse transmise par le controller
8. La page HTML rsultante est reue par le client
View : result.jsp Ex : AREL V6 - liste des promos