Vous êtes sur la page 1sur 22

SERVLET

1. Java pour le dveloppementd applications Web : Java EE Servlets Mickal BARON - 200
7 (Rv. Mars 2010) mailto:baron.mickael@gmail.com ou mailto:baron@ensma.fr
2. Licence Creative Commons Contrat Paternit Partage des Conditions Initiales lId
entique 2.0 Francekeulkeul.blogspot.com http://creativecommons.org/licenses/by-s
a/2.0/fr Servlets - M. Baron - Page2
3. Organisation du cours sur les Servlets Servlets et API Traitement des donnes d
e formulaires Architecture de dveloppement Cycle de vie Suivi de session Collabor
ation de Servletskeulkeul.blogspot.com Scurit : authentification Accs aux BD avec J
DBC Servlets - M. Baron - Page 3
4. Qu est ce qu une Servlet Composant logiciel crit en Java fonctionnant du cot serveu
r Au mme titre nous trouvons CGI (Common Gateway Interface) Langages de script co
t serveur PHP, ASP (Active Server Pages) Permet de grer des requtes HTTP et de four
nir au client une rponse HTTP Une Servlet s excute dans un moteur de Servlet ou cont
eneur de Servlet permettant d tablir le lien entre lakeulkeul.blogspot.com Servlet
et le serveur Web Une Servlet s excute par lintermdiaire dune machine virtuelle Serv
lets - M. Baron - Page 4
5. Architecture Servlets Processus principal Rponse HTTP Requte HTTP Conteneur de
Servlets Servlet 1 Servlet 2 Client WEB Servlet 3 Serveur Machine virtuelle Java
Webkeulkeul.blogspot.com Thread Les Servlets peuvent tre toutes gres par des threa
d spars au sein d un mme processus de machine virtuelle Servlets - M. Baron - Page 5
6. Ok, mais quoi a sert ? Crer des pages HTML dynamiques, gnrer des images, ... Effe
ctuer des tches de type CGI qui sont des traitements applicatifs cot serveur WEB M
anipulation d une base de donnes Gestion d un systme de surveillance, ... Respecter le
s principes d une architecture : crire une application en Java dont l interface utili
sateur est dans le clientkeulkeul.blogspot.com Applet (SWING) Tlphone portable (WA
P) Navigateur (HTML) Servlets - M. Baron - Page 6
7. Puissance des Servlets Portabilit Technologie indpendante de la plate-forme et
du serveur Un langage (Java) et plusieurs plate-forme (.NET plusieurs langages e
t une plate-forme) Puissance Disponibilit de l API de Java Manipulation d images, con
nectivit aux bases de donnes (JDBC), Efficacit et endurance Une Servlet est charge u
ne seule fois (CGI charge puis dcharge aprs utilisation)keulkeul.blogspot.com Une Se
rvlet conserve son tat (connexions des bases de donnes) Sret Typage fort de Java Ges
tion des erreurs par exception Servlets - M. Baron - Page 7
8. Premire Servlet : HelloWorld Ne pas oublier dimporter la HelloWorld est un obj
et Redfinition de la mthode bibliothque Java des Servlets de type HttpServlet doGet
(traitement dune requte GET) import java.io.*; import javax.servlet.*; import ja
vax.servlet.http.*; public class HelloWorld extends HttpServlet { public void do
Get(HttpServletRequest req, HttpServletResponse res) throws ServletException, IO
Exception { res.setContentType("text/hrml"); PrintWriter out = res.getWriter();
out.println("<HTML>"); out.println("<HEAD><TITLE>Bonjour tout le monde</TITLE></
HEAD>"); out.println("<BODY>"); out.println("<BIG>Bonjour tout le monde</BIG>");
keulkeul.blogspot.com out.println("</BODY></HTML>"); } } Rponse sous HelloWorld.j
ava du projet format HTML HelloWorldServlet Le rsultat sur le client Servlets - M
. Baron - Page 8
9. LAPI Servlet : du gnrique lHTTP Une Servlet doit implmenter linterface javax.ser
vlet.Servlet et javax.servlet.ServletConfig Servlet << Interface >> ServletConfi
g << Interface >> + init( ) + getInitParameter(String) : String + service( ) + getSe
rvletName() : String + destroy() + ... Plus simplement lAPI Servlet fournit deux
classes qui pro- posent dj une implmentationkeulkeul.blogspot.com GenericServlet :
pour la conception de Servlets indpendantes du protocole HttpServlet : pour la c
onception de Servlets spcifiques au protocole HTTP Servlets - M. Baron - Page 9

10. LAPI Servlet : du gnrique lHTTP Servlet << Interface >> ServletConfig << Inter
face >> + init( ) + getInitParameter(String) : String + service( ) + getServletName(
) : String + destroy() + ... tendre cette classe GenericServlet {abstraite} pour
construire des + service(...) {abstraite} + ... Servlets "gnriques"keulkeul.blogsp
ot.com tendre cette classe HttpServlet pour construire des + service( ) Servlets pr
opre au + doXXX ( ) protocole HTTP Servlets - M. Baron - Page 10
11. LAPI Servlet : la classe GenericServlet Une Servlet qui hrite GenericServlet
{abstraite} de GenericServlet est une Servlet + service( ) {abstraite} + ... indpen
dante du protocole Obligation dimplmenter la mthode service( ) qui reste le principa
l point dentre du client vers le serveur Besoin de vrifier explicitement le type d
e protocole requtekeulkeul.blogspot.com service(...) rponse Serveur Web Conteneur
de Servlets : sous-classe de GenericServlet Servlets - M. Baron - Page 11

JSP
Java pour le dveloppementd applications Web : Java EE Java Server Pages (JSP) Mickal
BARON - 2007 (Rv. Aot 2009) mailto:baron.mickael@gmail.com ou mailto:baron@ensma.
fr
2. Licence Creative Commons Contrat Paternit Partage des Conditions Initiales lId
entique 2.0 Francekeulkeul.blogspot.com http://creativecommons.org/licenses/by-s
a/2.0/fr JSP - M. Baron - Page 2
3. C est quoi JSP ? JSP = Java Server Pages Une JSP est un fichier contenant du co
de HTML et des fragments de code Java excuts sur le moteur de Servlets Comparable
aux langages cts serveur de type PHP, ASP,
Les pages JSP sont converties en Servle
t par le moteur de Servlets lors du premier appel la JSP Lecture Rponse HTTP hell
oJSP.jsp 2 Phase de traduction Requte HTTP 3 HelloServlet.javakeulkeul.blogspot.c
om 1 Compile Gnre 4 6 Phase de traitement 5 de la requte Serveur Web avec HelloServ
let.class Client WEB Excute conteneur JSP JSP - M. Baron - Page 3
4. Ok mais HelloWorld avec une Servlet Exemple : HelloWorld version Servlet Beso
in de modifier le fichier web.xml public class HelloWorldServlet extends HttpSer
vlet { protected void doGet(HttpServletRequest req, HttpServletResponse res) thr
ows ServletException, IOException { res.setContentType("text/html"); PrintWriter
out = res.getWriter(); out.println("<html>"); out.println(" <head>"); out.print
ln(" <title>Bonjour tout le monde</title>"); out.println(" </head>"); out.printl
n(" <body>"); out.println(" <h1>Bonjour tout le monde</h1>"); out.println(" Nous
sommes le " + (new java.util.Date().toString()) + " et tout va bien."); out.pri
ntln(" </body>");keulkeul.blogspot.com out.println("</html>"); } } La partie str
ucture du document HTML doit tre prcise l aide de l affichage de sortie : devient vite
contraignant JSP - M. Baron - Page 4
5. HelloWorld avec une JSP Exemple : HelloWorld version JSP helloworldjsp.jsp do
it tre plac la racine de l application WEB Pas besoin de modifier le fichier web.xml
<html> <head> Ajout de fragment <title>Bonjour tout le monde</title> </head> de
code Java <body> <h1>Bonjour tout le monde</h1> Nous sommes le <%= new java.uti
l.Date().toString() %> et tout va bien. </body> </html>keulkeul.blogspot.com Uti
lisation d un outil d aide la conception de page WEB avec prise en charge de code JS
P JSP - M. Baron - Page 5
6. HelloWorld avec une JSP aprs la gnration Exemple : HelloWorld version Servlet pu
blic final class helloworldjsp_jsp extends org.apache.jasper.runtime.HttpJspBase
implements org.apache.jasper.runtime.JspSourceDependent { public void _jspServi
ce(HttpServletRequest request, HttpServletResponse response) throws java.io.IOEx
ception, ServletException { HttpSession session = null; ... Hrite de javax.servle
t.jsp.HttpJspPage try { implmente la mthode _jspService( ) ... quivalente service( ) _
spx_out = out; out.write("<html>rn");out.write("t<head>rn"); out.write("tt<title
>Bonjour tout le monde</title>rn"); out.write("t</head>rn");out.write("t<body>rn
"); out.write("tt<h1>Bonjour tout le monde</h1>rn"); out.write("ttNous sommes le

");out.print( new java.util.Date().toString() ); out.write(" et tout va bien.rn


");out.write("t</body>rn");out.write("</html>"); } catch (Throwable t) { if (!(t
instanceof SkipPageException)){ out = _jspx_out;keulkeul.blogspot.com ... if (_
jspx_page_context != null) _jspx_page_context.handlePageException(t); } } finall
y { if (_jspxFactory != null) _jspxFactory.releasePageContext(_jspx_page_context
); } } } JSP - M. Baron - Page 6
7. HelloWorld et les fichiers Servlet, JSP et Servlet gnre Arborescence d une applica
tion WEB : le retour Les fichiers JSP sont la racine de l application WEB au mme en
droit que les fichiers HTMLkeulkeul.blogspot.com Les Servlets gnres sont places dans
le rpertoire work JSP - M. Baron - Page 7
8. Les Tags JSP Les Tags permettent de diffrencier le code HTML au code Java Tag
de directive : Attention ne pas se tromper <%@ %> dans la nomination des tags. I
ls ont tous une signification Tag de commentaire : diffrente <%-- blabla --%> Tag
de dclaration : lments de scripts <%!
%> Tag de Scriplet :keulkeul.blogspot.com <%
%> Tag d expression : <%=
%> JSP - M. Baron - Page 8
9. Directives JSP Les directives contrlent comment le serveur WEB doit gnrer la Ser
vlet Elles sont places entre les symboles <%@ et %> Les directives suivantes sont
disponibles include : indique au compilateur d inclure un autre fichier <%@ inclu
de file="unAutreFichier" %> tudi en fin de partie taglib : indique une bibliothque
de balises a utiliserkeulkeul.blogspot.com <%@ taglib prefix="myprefix" uri="tag
lib/mytag.tld" %> page : dfinit les attributs spcifiques une page (voir aprs) JSP M. Baron - Page 9
10. Directives JSP : include Cette inclusion se fait au moment de la conversion
<%@ include file="unAutreFichier" %> Tout le contenu du fichier externe est incl
us comme s il tait saisi directement dans la page JSP Ne concerne que les ressource
s contenues dans le contexte La racine du chemin du fichier inclure est la racin
e du contextekeulkeul.blogspot.com Pas de sparation de la porte des variables Il n y
a pas la possibilit de construire une chane d interrogation JSP - M. Baron - Page 1
0
11. Directives JSP : include Exemple : inclusions par la directive JSP Le fichie
r <HTML> entete.html <HEAD> <TITLE>Page de dmonstration</TITLE> </HEAD> <BODY> <%
@ include file = "/entete.html" %> <%@ include file = "/corps.jsp" %> La variabl
e name Bonjour <%= mon_nom %> est dfinie dans corps.jsp <%! String mon_nom; %> <%
@ include file = "/piedpage.html" %> <% mon_nom = "Baron Mickael"; %> Le fichier
corps.jspkeulkeul.blogspot.com Je suis dans le pied de page. </BODY> </HTML> Le
fichier piedpage.html JSP - M. Baron - Page 11
12. Directives JSP : page La directive page dfinit les attributs spcifiques une pa
ge import : importe un paquetage Java. Cette directive rsulte en une instruction
import dans la Servlet <%@ page import="java.util.*, java.text.*" %> langage : df
init le langage de script utilis dans la page contentType : dfinit le type de cont
enu de la page gnre <%@ page contentType="text/plain" %> errorPage : indique la pag
e afficher si une exception se produit pendant le traitement de la requte HTTPkeu
lkeul.blogspot.com <%@ page errorPage="toto.jsp" %> isErrorPage : vaut true si l
a page est une erreur et false pour une page normale <%@ page isErrorPage=false
%> JSP - M. Baron - Page 12
13. lments de scripts JSP : commentaire Cet lment de script est utilis pour faire un
commentaire dans le code JSP Le texte dans un commentaire JSP ne sera pas envoy a
u client ni compil dans la Servlet Les commentaires sont placs entre les symboles
<%-- et --%> <html> <head> <title>Bonjour tout le monde</title> </head> <body> <
!-- affichage dun message classique --> <h1>Bonjour tout le monde</h1> Nous somm
es le <%= new java.util.Date().toString() %> et tout va bien.keulkeul.blogspot.c
om <%-- Utilisation de la classe Date --%> </body> </html> Les commentaires JSP
n apparaissent pas dans le code HTML du client JSP - M. Baron - Page 13
14. lments de scripts JSP : dclaration Une dclaration permet d insrer du code dans la
lasse de la Servlet Les dclarations sont places entre <%! et %> Elle peut tre utili
se pour Dclarer un attribut de classe Spcifier et implmenter des mthodes <%! private
int count = 0; private int incrementCount() { return count++; } %> Les attributs
et les mthodes dclares dans la page JSP sontkeulkeul.blogspot.com utilisables dans
toute la page JSP Possibilit de redfinir des mthodes jspInit() et jspDestroy() A v
oir plus tard au moment du cycle de vie d une JSP JSP - M. Baron - Page 14

15. lments de scripts JSP : scriplet C est un bloc de code Java qui est plac dans _js
pService( ) de la Servlet gnre (quivalent service(...)) Les scriplets sont places en
les symboles <% et %> Tout code java a accs : aux attributs et mthodes dfinis par
le tag dclaration <%!
%> aux objets implicites ... <% for (int i = 0; i < 5 ; i++
) { %> Code HTML HelloWorld<br> Code JSP : scriplet <% incrementCount(); } En gnra
l leskeulkeul.blogspot.com %> scriplets ne sont ... jamais utilises, prfrez l utilisa
tion Mthode dclare par l lment Ne pas oublier le ; des balises personnalises de scrip
dclaration (Taglib) prcdent JSP - M. Baron - Page 15
16. lments de scripts JSP : expression Sert valuer une expression et renvoyer sa va
leur Les expressions sont places entre les symboles <%= %> Retourne une valeur St
ring de l expression Correspond une scriplet comme <% out.println( ); %> Se transfor
me en out.println(" "); dans la mthode _jspService( ) aprs gnration lments de scripts
: scriplet ... <% String[] noms={"mickey","donald"}; for (int i = 0 ; i < noms.l
ength ; i++) {keulkeul.blogspot.com %> Le <%= i %> me nom est <%= noms[i] %> Ne p
as ajouter de ; <% } %> la fin dun lment ... script expression lments de scripts JSP
: expression JSP - M. Baron - Page 16
17. lments de scripts JSP : bilan lments de scripts et gnration de Servlet public fin
l class example_jsp extends HttpJspBase { String contenu[] = {"raoul","john","ni
colas"}; public void _jspService(HttpServletRequest req, HttpServletResponse res
) throws IOException, ... { Dclaration out.write("tt<title>Bonjour tout le monde<
/title>rn"); Scriplet out.write("t</head>rn"); out.write("t<body>rn"); for (int
i = 0; i <contenu.length; i++) { out.write("tttLe "); out.print( i+1 ); out.writ
e(" me nom est "); out.print( contenu[i] ); out.write(" <p>rn"); out.write("tt");
} <html> out.write("ttrn"); <head> out.write("t</body>rn"); <title>Bonjour tout
</title> } </head>keulkeul.blogspot.com } <body> <%! String contenu[] = {"raoul"
,"john","nicolas"}; %> <% for (int i = 0; i <contenu.length; i++) { %> Le <%= i+
1 %> me nom est <%= contenu[i] %> <p> Expression <% } %> </body> </html> JSP - M.
Baron - Page 17
18. lments de scripts JSP : scriplet et objets implicites Les objets implicites so
nt les objets prsents dans la mthode service( ) qui ont t employs dans la partie Servl
t Ils sont identifis par des noms de variables uniques : request : requte courante
Les objets implicites ne sont utilisables que dans les response : rponse courant
e lments de scripts JSP de type scriplet et expression (dans la session : session
courante mthode service( ) out : flot de sortie permet l criture sur la rponse applicat
ion : contient des mthodes log() permettant dcrire des messages dans le journal du
contenu (ServletContext)keulkeul.blogspot.com pageContext : utilis pour partager
directement des variables entre des pages JSP et supportant les beans et les ba
lises exception : disponible uniquement dans les pages erreurs donnant informati
on sur les erreurs JSP - M. Baron - Page 18
19. lments de scripts JSP : scriplet et objets implicites Exemple : JSP qui rcupre d
es informations du client <%@ page language="java" contentType="text/html" %> <h
tml> <head> <title>Informations du client</title> </head> <body bgcolor="white">
Protocol : <%= request.getProtocol() %><br> Scheme : <%= request.getScheme() %>
<br> ServerName : <%= request.getServerName() %><br> ServerPort : <% out.println
(request.getServerPort()); %><br> RemoteAddr : <% out.println(request.getRemoteA
ddr()); %><br> RemoteHost : <% out.println(request.getRemoteHost()); %><br> Meth
od : <%= request.getMethod() %><br> </body> </html>keulkeul.blogspot.com Objets
implicites uniquement visibles dans une scriplet ou une expression JSP JSP - M.
Baron - Page 19
20. Cycle de vie d une JSP Le cycle de vie dune Java Server Page est identique une
Servlet La mthode jspInit() est appele aprs le chargement de la page La mthode _jsp
Service() est appele chaque requte La mthode jspDestroy() est appel lors du dchargem
nt (fermeture dune base de donnes) Possibilit de redfinir dans le code JSP les mthod
es jspInit() et jspDestroy() en utilisant un lment de scripts dclaration <html> <he
ad> Redfinition de la <title>Bonjour tout </title> </head> mthode jspInit()keulkeu
l.blogspot.com <body> <%! public void jspInit() { compteur = 23; } %> <%! String
compteur; %> La valeur du compteur est <%= compteur %> </body> </html> JSP - M.
Baron - Page 20
21. Cycle de vie d une JSP Exemple : compteur avec une initialisation et une destr
uction <%@ page language="java" contentType="text/html" %> <%@ page import="java

.util.Date" %> <%! int global_counter = 0; Date start_date; Lobjetimplicite appl


ication nest pas disponible ici, ne public void jspInit() { start_date = new Dat
e(); pas lutiliser !!!! } public void jspDestroy() { ServletContext context = ge
tServletConfig().getServletContext(); context.log("test.jsp a t visite " + global_c
ounter + "fois entre le " + start_date + " et le " + (new Date())); } %>keulkeul
.blogspot.com <html> <head><title>Page avec un compteur</title></head> <body bgc
olor="white"> Cette page a t visite : <%= ++global_counter %> fois depuis le <%= st
art_date %>. </body></html> JSP - M. Baron - Page 21
22. Technique de gestion des erreurs Permet de contrler la gestion des erreurs pe
ndant lexcu- tion de lapplication WEB Les erreurs sont dclenches par lintermdiaire d
es exceptions et transmises une page derreur La dfinition de la page derreur se f
ait par la directive page et lattribut errorPage <%@ page errorPage="erreur.jsp"
%> ... code JSP lanant lexception Lancement dune exception possible dans le Poss
ibilit de transmettre deskeulkeul.blogspot.com reste de la page JSP informations
la page derreur par la mthode GET Impossibilit dans une ..."erreur.jsp?debug=log"
%> page JSP de dclarer plus dune page derreur JSP - M. Baron - Page 22
23. Technique de gestion des erreurs Une page JSP est dfinie comme une page erreu
r par la directive page et lattribut isErrorPage <%@ page isErrorPage=true %> Qu
and false il sagit ... code JSP traitant lerreur dune page standard, true une pa
ge erreur Possibilit de manipuler lexception qui a t lance par lobjet implicite exce
ption (Exception) exception.getMessage() : renvoie le message derreur dcrivant le
xception exception.printStackTrace() : retourne la liste des appels de mthodeskeu
lkeul.blogspot.com ayant conduit lexception La rfrence exception Une page erreur d
oit nest utilisable que dans les tre obligatoirement lments de scripts Scriplet une
page JSP et Expression JSP - M. Baron - Page 23
24. Technique de gestion des erreurs Exemple : une division par zro avec gestion
de lerreur <%@ page language="java" contentType="text/html" %> <%@ page errorPag
e="errorpage.jsp" %> <html> <head> <title>Page avec une erreur</title> </head> <
body bgcolor="white"> <% int var = 90; %> Rsultat sans la gestion Division par <%
var = var / 0; %> <%= var %> de lexception </body> </html> <%@ page language="j
ava" contentType="text/html" %> <%@ page isErrorPage="true" %> Division par zro :
<html> exception lance <head> <title>Page grant une erreur</title> </head>keulkeu
l.blogspot.com <body bgcolor="white"> Jai vu passer une erreur qui est <%= excep
tion.getMessage() %> </body> </html> Rsultat avec la gestion de lexception JSP M. Baron - Page 24
25. JSP et Actions Les actions permettent de faire des traitements au moment o la
page est demande par le client utiliser des Java Beans L inclusion et la redirecti
on fonctionnent sur un principe inclure dynamiquement un fichier commun voqu dans
la partie Servlet rediriger vers une autre page Les actions sont ajoutes la page
JSP laide dune syntaxe dlments XML (dfinis par des balises personnalises) Balise ouv
rante <ma:balise ... /> Balise fermantekeulkeul.blogspot.com ou <ma:balise ... >
Deux critures diffrentes, l une ... quand il n y a pas de corps et </ma:balise> corps
l autre quand il y en a un JSP - M. Baron - Page 25
26. Java Beans Permet de coder la logique mtier de lapplication WEB Ltat dun Bean
est dcrit par des attributs appels proprits La spcification des Java Beans dfinit les
Beans comme des classes qui supportent principalement Introspection : permet lan
alyse dun Bean (nombre de proprits)keulkeul.blogspot.com vnements : mtaphore de commu
nication Persistance : pour sauvegarder ltat dun Bean JSP - M. Baron - Page 26
27. Java Beans Les Java Beans sont des classes Java respectant un ensemble de di
rectives Respecter absolument la convention Un constructeur public sans argument
dcriture Les proprits dun Bean sont accessibles au travers de mthodes getXXX (lectu
re) et setXXX (criture) portant le nom de la proprit Lecture et criture des proprits
ype getNomDeLaProprit() : pas de paramtre et son type est celui de la proprit void se
tNomDeLaProprit(type) : un seul argument du type de lakeulkeul.blogspot.com proprit
et son type de retour est void En option, un Java Beans implmente linterface java
.io.Serializable permettant la sauvegarde de ltat du Bean JSP - M. Baron - Page 2
7
28. Java Beans Exemple : le retour de la classe Voiture public class Voiture { U
tilise le constructeur par dfaut private int puissance; ne possdant aucun paramtre
private boolean est_demarree; private double vitesse; public void setDemarree(bo

olean p) { Proprit Demarree visible en est_demarree = p; lecture et en criture } pu


blic boolean getDemarree() { return est_demarree; } public void setVitesse(doubl
e p) { Proprit Vitesse visible en vitesse = p; lecture et en criture } public doubl
e getVitesse() {keulkeul.blogspot.com return vitesse; } public int getPuissance(
) { Proprit Puissance visible en return puissance; lecture uniquement } } JSP - M.
Baron - Page 28
29. Java Beans et JSP Pour dclarer et allouer un Java Beans dans une page JSP il
faut employer laction <jsp:useBean> <jsp:useBean id="Nom" class="Package.class"
scope="atribut" /> id = "nom de linstance" : nom de linstance pour identificatio
n class = "Nom de la classe" : package du Bean scope = "attribut" : champ dexist
ence de lobjet Bean request : Bean valide pour la requte et peut tre transmise (fo
rward)keulkeul.blogspot.com page : idem request sans transmission (le cas de l obj
et pageContext) Contenu dans le ServletContext de session : Bean ayant la dure de
vie de la session l application web application : Bean cre pour lapplication WEB co
urante JSP - M. Baron - Page 29
30. Java Beans et JSP : lecture proprits Pour lire une proprit du Bean deux lments so
t utiliss La rfrence du Bean dfinie par lattribut id Le nom de la proprit Deux manir
existent pour interroger la valeur dune proprit et la convertir en String En utili
sant un tag action <jsp:getProperty> <jsp:getProperty name="rfrence Bean" property
="nom proprit" /> Rfrence du Bean Nom de la proprit en dsigne dans lattribut id min
ekeulkeul.blogspot.com En utilisant llments de scripts JSP : expression <%= nom_in
stance.getNomPropriete() %> Rfrence du Bean Mthode lie la proprit dsigne dans lat
id JSP - M. Baron - Page 30
31. Java Beans et JSP : criture proprits Modification de la valeur dune proprit en ut
ilisant le tag action <jsp:setProperty> <jsp:setProperty name="rfrence" property="
nom proprit" param="param" value="valeur" /> Rfrence du Bean Nom de la Nom dun paramt
re Valeur explicite dsigne dans proprit de requte contenant donner la proprit.
t id modifier crit en la valeur pour la Ne peut pas tre minuscule proprit indique com
bin lattribut param Modification de lensemble de proprits suivant les param- tres fo
urnis par la requtekeulkeul.blogspot.com <jsp:setProperty name="rfrence" property="
*" /> Les noms des paramtres de Efficacit : modification requte doivent tre identiqu
es des proprits aux noms des proprits JSP - M. Baron - Page 31
32. Java Beans et JSP : lecture et criture proprits Exemple : caractristique dune vo
iture (simplifie) <%@ page language="java" contentType="text/html" %> <jsp:useBea
n id="ma_voiture" class="Voiture"></jsp:useBean> <% La classe Voiture ma_voiture
.setDemarree(true); doit tre place ma_voiture.setVitesse(21.2); dans le rpertoire %
> Modification des WEB-INFclasses proprits du Bean <html> Voiture par Scriplet <he
ad> <title>Page pour lecture dinformation</title> </head> <body bgcolor="white">
La voiture a-t-elle dmarr: <%= ma_voiture.getDemarree() %><br> La vitesse de la v
oiture est de : <jsp:getProperty name="ma_voiture" property="vitesse" /> km/h<br
>keulkeul.blogspot.com La puissance de la voiture est de : <jsp:getProperty Inte
rrogation par name="ma_voiture" property="puissance" /> CV tag Expression </body
> </html> Interrogation par tag Action. Le nom de la proprit en minuscule JSP - M.
Baron - Page 32
33. Java Beans et JSP : scope Exemple : affectation et rcupration des valeurs dun
Bean <%@ page language="java" contentType="text/html" %> <jsp:useBean id="mon_be
an1" scope="page" class="SimpleName"></jsp:useBean> <jsp:useBean id="mon_bean2"
scope="session" class="SimpleName"></jsp:useBean> <jsp:useBean id="mon_bean3" sc
ope="application" class="SimpleName"></jsp:useBean> <jsp:setProperty name="mon_b
ean1" property="name" value="page"/> <jsp:setProperty name="mon_bean2" property=
"name" value="session"/> <jsp:setProperty name="mon_bean3" property="name" value
="application"/> <html> Champs dutilisation <head><title>Page pour criture dinfor
mation</title></head> de lobjet Java Bean <body bgcolor="white"> Avant<br> mon_b
ean1 = <%= mon_bean1.getName() %><br> mon_bean2 = <%= mon_bean2.getName() %><br>
keulkeul.blogspot.com mon_bean3 = <%= mon_bean3.getName() %><br> <FORM METHOD=GE
T ACTION="lecture.jsp"> <p align="center"><input type="submit" name="Submit"></p
> </FORM> </body> </html> JSP - M. Baron - Page 33
34. Java Beans et JSP : scope Exemple : affectation et rcupration des valeurs dun
Bean <%@ page language="java" contentType="text/html" %> <jsp:useBean id="mon_be
an1" scope="page" class="SimpleName"></jsp:useBean> <jsp:useBean id="mon_bean2"

scope="session" class="SimpleName"></jsp:useBean> <jsp:useBean id="mon_bean3" sc


ope="application" class="SimpleName"></jsp:useBean> <html> <head> <title>Page po
ur criture dinformation</title> </head> <body bgcolor="white"> Aprs<br> mon_bean1
= <jsp:getProperty name="mon_bean1" property="name" /><br> mon_bean2 = <jsp:getP
roperty name="mon_bean2" property="name" /><br> mon_bean3 = <jsp:getProperty nam
e="mon_bean3" property="name" /><br> </body> </html>keulkeul.blogspot.com JSP M. Baron - Page 34
35. Collaboration de JSP Rappel sur la collaboration (voir partie Servlet) parta
ge d information : un tat ou une ressource partage du contrle : une requte Processus
identique la collaboration de Servlet pour le partage d information et de contrle P
artage d information Utilisation du contexte pour transmettre des attributskeulkeu
l.blogspot.com Mthode getContext( ), setAttribute( ) et getAttribute( ) Partage du cont
rle Utilisation des tags action JSP include et forward JSP - M. Baron - Page 35
36. Partage d information Exemple : transmettre un simple attribut tout un context
e page1.jsp Enregistrement dans le contexte dun attribut <% application.setAttri
bute("attribut1","Bonjour tout le monde"); %> Enregistrement dans le contexte Ob
jet implicite courant d une valeur pour l attribut application est de type ServletCo
ntext attribut1 page2.jsp <% out.println(application.getAttribute("attribut1"));
%> Lecture dans le contexte courant de la valeur de l attribut attribut1 keulkeul.
blogspot.com Rsultat d une requte la page2.jsp sans envoie de requte page1.jsp Peute vue comme une variable Rsultat d une requte la page2.jsp aprs envoie de requte pa
.jsp globale l application WEB JSP - M. Baron - Page 36
37. Partage du contrle : distribuer une inclusion Cette inclusion se fait au mome
nt de la requte La page incluse peut-tre un fichier HTML ou JSP <jsp:include page=
"/page.html" /> La racine du chemin de la page est celle du contexte Le serveur
excute la ressource dynamique indique et inclut sa sortie au contenu envoy au clien
t Ne peut dfinir ni le code d tat ni la valeur des en-ttes Possibilit de transmettre d
es informations lors de l inclusion <jsp:include page="/page.jsp" />keulkeul.blogs
pot.com <jsp:param name="defaultparam" value="nouvelle" /> </jsp:include> La tra
nsmission d informations autre Dfinition d un paramtre appel defaultparam que des simpl
es chanes de caractres ne peut tre ralise directement JSP - M. Baron - Page 37
38. Partage du contrle : distribuer un renvoi Cette redirection se fait galement a
u moment de la requte <jsp:forward page="page.html" /> Le racine du fichier doit t
re ici celle du contexte (quivaut /page.html) Les choses ne pas faire
effectuer d
es modifications sur la rponse avant un renvoi (ignores) placer du code en squence
la suite d un renvoi Possibilit de transmettre des informations lors d un renvoikeulk
eul.blogspot.com <jsp:forward page="/page.jsp" /> <jsp:param name="defaultparam"
value="nouvelle" /> </jsp:forward> Dfinition d un paramtre appel defaultparam JSP M. Baron - Page 38
39. Partage du contrle : remarques ... La partage du contrle et plus prcisment l inclu
sion et le renvoi par des balises actions ne permettent pas le transfert d attribu
ts au sens objet (uniquement des chanes de caractres) Obligation de passer par un
objet RequestDispatcher et l objet implicite request Exemple pour une inclusion (mm
e chose pour un renvoi)keulkeul.blogspot.com <% RequestDispatcher dispatch = req
uest.getRequestDispatcher("/fichier.jsp");%> <% request.setAttribute("attribut1"
,"bonjour"); %> <% dispatch.include(request,response); %> Objet implicite JSP M. Baron - Page 39
40. Collaboration de Servlets et JSP : architecture MVC Un constat : les pages J
SP doivent contenir le moins de Java Besoin de structurer le code plus finement
selon les comptences de chaque technologies (JSP, Servlet, ) Utilisation du modle d a
rchitecture : MVC (Modle Vue Contrleur) Requte Servlet 2 1 Contrle Redirection Vers
les 3 couches mtierskeulkeul.blogspot.com 5 Java Bean et accs aux Client WEB donnes
Serveur Web 4 Modle (SGBD) JSP Rponse Vue JSP - M. Baron - Page 40
41. Collaboration de Servlets et JSP : architecture MVC Architecture MVC (en rgle
gnrale) Le contrle est gr par les Servlets (pas de sortie dans la rponse) Le modle
gr par les Beans (ne connat pas le contrle ni la vue) La vue est gre par les JSP (pa
de contrle) Besoin de savoir communiquer entre des Servlets et des JSP Requte env
oye par le client (1) Communication entre le contrle et le modle (2)keulkeul.blogsp
ot.com Transmission la page JSP des informations du Java Bean (3) La page JSP ut
ilise les informations du Java Bean traduit (4) La vue est envoye en rponse au cli

ent (5) JSP - M. Baron - Page 41


42. Collaboration de Servlets et JSP : architecture MVC Dans la Servlet Instance
du Bean envoye comme attribut Ressource rediriger bean = new MonBean(...); req.s
etAttribute("idbean", bean); RequestDispatcher dispatch = this.getServletContext
().getRequestDispatcher("/page.jsp"); dispatcher.forward(req,res); Dans la JSP Mm
e nom que l attribut donn dans la Servlet <jsp:useBean id="idbean" class="monpackag
e.MonBean" scope="request"/> <%= idbean... %> ou <% monpackage.MonBean idbean =
(monpackage.MonBean)request.getAttribute("idbean"); %>keulkeul.blogspot.com <%=
idbean... %> Pour viter de mettre les <%@ page import="monpackage.MonBean" %> nom
s de package <% MonBean idbean = (MonBean)request.getAttribute("idbean"); %> uti
lisation de la directive page import JSP - M. Baron - Page 42
43. Collaboration de Servlets et JSP : architecture MVC Exemple : application MV
C qui dit Bonjour ... ... import monpackage.MonBean; Cette Servlet gre le contrle.
Il public class Controle extends HttpServlet { dispatche la vue protected void
doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException { MonBean bean = new MonBean(); req.setAttribute("idbean", bean); Re
questDispatcher disp = this.getServletContext().getRequestDispatcher("/page.jsp"
); disp.forward(req,res); } } En gnrale pas de package monpackage; sortie sur la rp
onse de la Servletkeulkeul.blogspot.com public class MonBean { public String get
Message() { return "Message issu du Bean"; } Ce Java Bean gre } le modle de l applic
ation WEB JSP - M. Baron - Page 43
44. Collaboration de Servlets et JSP : architecture MVC Exemple (suite) : applic
ation MVC qui dit Bonjour ... <HTML> <jsp:useBean id="idbean" class="monpackage.
MonBean" scope="request"/> <HEAD><TITLE>Architecture MVC : Java EE</TITLE></HEAD
> <BODY> 1re solution en <%= idbean.getMessage() %> </BODY> utilisant la tag </HT
ML> action useBean Peu de contrle dans les pages JSP ... 2me solution en <%@ page
import="monpackage.MonBean" %> utilisant l objet <HTML> implicite request <HEAD><T
ITLE>Architecture MVC : Java EE</TITLE></HEAD> <BODY>keulkeul.blogspot.com <% Mo
nBean idbean = (MonBean)request.getAttribute("idbean");%> <%= idbean.getMessage(
) %> </BODY> </HTML> Vos Beans doivent tre dfinis obligatoirement dans un package
JSP - M. Baron - Page 44
12. LAPI Servlet : la classe HttpServlet Dans la suite du cours nous allons util
iser uniquement des Servlets qui ragissent au protocole HTTP do lutilisation de la
classe HttpServlet HttpServlet redfinit la mthode service( ) service( ) lit la mthode
(GET, POST, ) partir de la requte Elle transmet la requte une mthode approprie de
pServlet destine traiter le type de requte (GET, POST, ) rponse requte GET doGet(...
keulkeul.blogspot.com service(...) rponse doPost(...) requte POST Serveur Web Cont
eneur de Servlets : sous-classe de HttpServlet Servlets - M. Baron - Page 12
13. HttpServlet : mthodes de traitement de requtes Plusieurs mthodes sont fournies
pour traiter les diffrents types de requtes (GET, POST, ). Elles sont appeles mthodes
de traitement de requtes Elles ont un en-tte identique doXXX( ) o XXX correspond au
type de requte doPost( ) est la mthode pour traiter les requtes de type POST doGet( ) e
st la mthode pour traiter les requtes de type GET doHead( ), doTrace( ),
Selon le type
de requte (GET ou POST) le concepteurkeulkeul.blogspot.com redfinit la mthode conc
erne Pour les besoins du cours nous utiliserons essentiellement les mthodes doPost
( ) et doGet( ) Servlets - M. Baron - Page 13
14. HttpServlet : mthodes de traitement de requtes Limplmentation par dfaut des mthod
es doXXX( ) renvoie une erreur de type HTTP 405 Appel du code doGet( ) Type de requte
non support par lURL de la super-classe import java.io.*; import javax.servlet.*
; import javax.servlet.http.*; public class HelloWorldError extends HttpServlet
{ public void doGet(HttpServletRequest req, HttpServletResponse res) throws Serv
letException, IOException { super.doGet(req, res); } } HelloWorldError.java du p
rojetkeulkeul.blogspot.com HelloWorldServlet Ne vous trompez pas de mthode redfini
r selon le type de requte Servlets - M. Baron - Page 14

15. HttpServlet : requte et rponse La mthode service( ) et par consquent les mthodes d
traitement de requtes (ex : doPost( )) sont appeles un objet requte un objet rponse O
bjet de requte Objet de rponse import java.io.*; import javax.servlet.*; import ja

vax.servlet.http.*; public class SampleServlet extends HttpServlet { public void


doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException { ... }keulkeul.blogspot.com public void doPost(HttpServletRequest
req, HttpServletResponse res) throws ServletException, IOException { ... } } Ser
vlets - M. Baron - Page 15
16. HttpServlet : objet requte HttpServletRequest HttpServletRequest hrite de Serv
letRequest Cet objet encapsule la requte HTTP et fournit des mthodes pour accder au
x informations du client de lenvironnement du serveur Exemples de mthodes String
getMethod() : retourne le type de requte String getServeurName() : retourne le no
m du serveur String getParameter(String name) : retourne la valeur dun paramtre S
tring[] getParameterNames() : retourne le nom des les paramtreskeulkeul.blogspot.
com String getRemoteHost() : retourne lIP du client String getServerPort() : ret
ourne le port sur lequel le serveur coute String getQueryString() : retourne la c
hane d interrogation
(voir lAPI Servlets pour le reste) Servlets - M. Baron - Page
16
17. HttpServlet : objet requte HttpServletRequest Exemple : Servlet qui affiche u
n certains nombre dinforma- tions issues de HttpServletRequest public class Info
sServlet extends HttpServlet { public void doGet(HttpServletRequest req, HttpSer
vletResponse res) throws ServletException, IOException { response.setContentType
("text/plain"); PrintWriter out= response.getWriter(); out.println("Protocol: "
+ request.getProtocol()); out.println("Scheme: " + request.getScheme()); out.pri
ntln("ServerName: " + request.getServerName()); out.println("ServerPort: " + req
uest.getServerPort()); out.println("RemoteAddr: " + request.getRemoteAddr()); ou
t.println("RemoteHost: " + request.getRemoteHost()); out.println("Method: " + re
quest.getMethod()); ... }}keulkeul.blogspot.com InfosServlet.java du projet Info
sServlet Servlets - M. Baron - Page 17
18. HttpServlet : objet rponse HttpServletResponse HttpServletResponse hrite de Se
rvletResponse Cet objet est utilis pour construire un message de rponse HTTP renvo
y au client, il contient les mthodes ncessaires pour dfinir le type de contenu, en-tt
e et code de retour un flot de sortie pour envoyer des donnes (par exemple HTML)
au client Exemples de mthodes void setStatus(int) : dfinit le code de retour de la
rponsekeulkeul.blogspot.com void setContentType(String) : dfinit le type de conte
nu MIME ServletOutputStream getOutputStream() : flot pour envoyer des donnes bina
ires au client void sendRedirect(String) : redirige le navigateur ServletslURL v
ers - M. Baron - Page 18
19. HttpServlet : objet rponse HttpServletResponse Exemple 1 : crit un message de
type TEXT au client Utilisation de la mthode PrintWriter getWriter() public class
HelloWorldPrintWriter extends HttpServlet { public void doGet(HttpServletReques
t req, HttpServletResponse res) throws ServletException, IOException { res.setCo
ntentType("text/plain"); PrintWriter out = res.getWriter(); out.println("Premier
Message"); out.println("Coucou voil comment crire un message"); out.println("Seco
nd Message"); } }keulkeul.blogspot.com HelloWorldPrintWriter.java du projet Hell
oWorld Servlets - M. Baron - Page 19
20. HttpServlet : objet rponse HttpServletResponse Exemple 2 : effectue une re-di
rection vers un site web Utilisation de la mthode sendRedirect(String) public cla
ss SendRedirect extends HttpServlet { public void doGet(HttpServletRequest req,
HttpServletResponse res) throws ServletException, IOException { res.sendRedirect
("http://www.google.fr"); }} SendRedirect.java du projet HelloWorldkeulkeul.blog
spot.com Servlets - M. Baron - Page 20
21. HttpServlet : objet rponse HttpServletResponse Exemple 3 : effectue un tlcharge
ment de fichier sur le client public class DownloadFileServlet extends HttpServl
et { protected void doGet(HttpServletRequest arg0, HttpServletResponse arg1) thr
ows ServletException, IOException { Le fichier tlcharger se try { trouve sur le se
rveur InputStream is = new FileInputStream("c:/dd.txt"); OutputStream os = arg1.

getOutputStream(); Flux de sortie = client arg1.setContentType("text/plain"); ar


g1.setHeader("Content-Disposition","attachment;filename=toto.txt"); int count; b
yte buf[] = new byte[4096]; while ((count = is.read(buf)) > -1) os.write(buf, 0,
count);keulkeul.blogspot.com is.close(); os.close(); En-tte de la rponse } catch
(Exception e) { adapte pour retourner // Y a un problme. un fichier } } DownloadFi
leServlet.java du } projet DownloadFileServlet Servlets - M. Baron - Page 21
22. HttpServlet : objet rponse HttpServletResponse Exemple 4 : effectue un pull c
lient public class PullClientServlet extends HttpServlet { private int count = 1
0; protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws
ServletException, IOException { resp.setContentType("text/plain"); PrintWriter
out = resp.getWriter(); if (count > 0) { resp.setHeader("Refresh","1"); Toutes l
es 1 seconde la count-- page est recharge et out.println(count + "..."); cela 10
fois de suite } else { out.println("Fin"); } }keulkeul.blogspot.com } PullClient
Servlet.java du projet PullClient Servlets - M. Baron - Page 22
23. HttpServlet : objet rponse HttpServletResponse Exemple 5 : effectue un push s
erveur public class PushServerServlet extends HttpServlet { protected void doGet
(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOEx
ception { ServletOutpuStream out = res.getOutputStream(); res.setContentType("mu
ltipart/x-mixed-replace;boundary=End"); out.println(); out.println("--End"); Uti
lisation de for (int i = 10; i > 0; i--) { multipart/mixed out.println("ContentType: text/plain"); out.println(); pour coder le pushing out.println(i + "...");
serveur out.println(); out.println("--End"); out.flush(); try { Connexion non f
erme Thread.sleep(1000); mais rponse envoye } catch (InterruptedException e) { e.pr
intStackTrace(); au client }keulkeul.blogspot.com } out.println("Content-Type: t
ext/plain"); out.println(); Connexion ferme out.println("Fin"); rponse envoye au ou
t.println("--End--"); out.flush(); client } } PushServerServlet.java du projet P
ushServer Servlets - M. Baron - Page 23
24. Servlets et formulaires : du cot HTML Utilisation de la balise <FORM> </FORM>
Option METHOD : type de requte GET ou POST Option ACTION : l URL o envoyer les donne
s Utilisation de composants IHM pour saisir des informations Contenu l intrieur de
la balise FORM Chaque composant est dfini au moyen d une balise particulire SELECT,
INPUT, TEXTAREA, keulkeul.blogspot.com A l intrieur de chaque balise du composant (S
ELECT par exemple) plusieurs options et notamment une (NAME) qui permet d identifi
er le composant : NAME="mon_composant" Les donnes sont envoyes quand l utilisateur c
lique sur un bouton de type SUBMIT Servlets - M. Baron - Page 24
25. Servlets et formulaires : du cot HTML <body> <p>Formulaire de satisfaction du
cours Servlet/JSP </p> Le formulaire appelle <form name="form1" method="get" ac
tion="form.html"> <p> une Servlet avec une Nom : <input type="text" name="nom">
Prnom : <input type="text" name="prenom"> requte de type GET </p> <p> Sexe : <inpu
t type="radio" name="radio1" value="sexe" checked>masculin <input type="radio" n
ame="radio1" value="sexe">fminin </p> <p>Commentaire :<br> <textarea name="textar
ea" cols="50" rows="10"> </textarea><br> <input type="submit" name="Submit" rows
="5" value="Soumettre"> </p> </form> index.html du projet UIFormkeulkeul.blogspo
t.com Il se peut que des composants portent le mme identifiant. Exemple : composa
nt bouton radio Servlets - M. Baron - Page 25

26. Servlets et formulaires : du cot Servlet Pour lire les donnes du formulaire :
traiter la requte Accder par l intermdiaire de l objet HttpServletRequest aux paramtres
String getParameter(String p) : retourne la valeur du paramtre p String[] getPara
mterValues(String p) : retourne les valeurs du paramtre p Cette mthode est utile p
ublic class UIFormServlet extends HttpServlet { protected void doGet(HttpServlet
Request req, HttpServletResponse res) lorsque dans un throws ServletException, I
OException { res.setContentType("text/plain"); formulaire vous avez PrintWriter
out = res.getWriter(); plusieurs composants qui out.println("Nom : " + req.getPa
rameter("nom")); out.println("Prnom : " + req.getParameter("prenom")); portent le
mme nom if (req.getParameterValues("radio1")[0].equals("mas")) { out.print("Cest

un homme. Il");keulkeul.blogspot.com } else { out.print("Cest une femme. Elle")


; } out.print(" a crit sur ce magnifique cours que "); out.println(req.getParamet
er("textarea")); } } UIFormServlet.java du projet UIForm Servlets - M. Baron - P
age 26
27. Architecture de dveloppement dune application WEB Une application WEB peut co
ntenir plusieurs Servlets Pour tester et dployer une Servlet, il faut un systme de
xcution appel conteneur de Servlets ou moteur de Servlets Le conteneur ralise le li
en entre la Servlet et le serveur WEB Transforme code Java (bytecode) en HTML As
socie des URLs virtuels une Servlet /HelloWorldServlet/* Servlet 1 requtekeulkeul
.blogspot.com rponse /*.html Servlet 2 /FormulaireServlet/*.htm Conteneur de Serv
lets Serveur Web Il existe de nombreux conteneurs de Servlets prsents dans la part
ie suivante Servlets - M. Baron - Page 27
28. Architecture de dveloppement dune application WEB Une application WEB est con
tenue dans un rpertoire phy- sique sur le serveur Une application WEB possde une h
irarchie de rpertoires et de fichiers Respecter scrupuleusement la hirarchie des rpe
rtoires et *.html, *.jsp, ... le nom des fichiers Fichiers pour la prsentation WE
B-INF web.xml Fichiers de configuration de lapplication WEB au format XML *.clas
skeulkeul.blogspot.com classes Classes (bytecode) des Servlets lib *.jar, *.clas
s Fichiers bibliothques sous diffrents formats Servlets - M. Baron - Page 28
29. Les contextes ... Un contexte constitue une vue sur le fonctionnement d une mme
application web Possibilit d accder chacune des ressources de l application web corre
spondant au contexte Servlets tudier la fin de cette partie Collaboration de Serv
lets Pages JSP Approfondissement sur la partie JSP ... Collaboration JSP Servlet
s : MVC keulkeul.blogspot.com Utilisation du fichier web.xml pour la description
de dploie- ment du contexte Une application WEB ne contient qu un seul contexte Ser
vlets - M. Baron - Page 29
30. Le fichier web.xml : c est quoi ? Le fichier web.xml regroupe les informations
de fonctionne- ment de lapplication WEB (description de dploiement du contexte)
Utilisation du format XML eXtensible Markup Language Syntaxe universelle pour la
structuration des donnes cre par le World Wide Web Consortium (W3C) en 1996 Langag
e bas sur des balises permettant de donner une signification au document (HTML si
ntresse essentiellement laffichage) Extensible par la possibilit de crer de nouvell
es balises Balises XML sensibles la case et la rigueur (balise ouvrante = obliga
tion dune balise fermante)keulkeul.blogspot.com La structure du document est dfin
i par un fichier XSD (XML Schema Description) Des informations sur le format XML
peuvent tre trouves www.w3.org/XML Servlets - M. Baron - Page 30
31. Le fichier web.xml : c est quoi ? Fichier web.xml typique La prsence du fichier
web.xml est obligatoire En-tte du fichier web.xml pour que vos servlets WEB fonc
tionnent Balise principale <?xml version="1.0" encoding="UTF-8"?> Balise de desc
ription de <web-app xmlns="http://java.sun.com/xml/ns/j2ee" lapplication WEB xml
ns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://ja
va.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd" Balise d
e description version="2.4"> <display-name>Application WEB affichant HelloWorld<
/display-name> dune Servlet <servlet> Nom de la Servlet <servlet-name>HelloWorld
Servlet</servlet-name> "Identification" <servlet-class>HelloWorld</servlet-class
> </servlet> Classe de la Servletkeulkeul.blogspot.com Dfinition dun chemin virtu
el <servlet-mapping> <servlet-name>HelloWorldServlet</servlet-name> Nom de la Se
rvlet considr <url-pattern>/msg.hello</url-pattern> "Identification" </servlet-map
ping> </web-app> Dfinition du chemin virtuel Servlets - M. Baron - Page 31
32. Le fichier web.xml : c est quoi ? Possibilit de dcrire dans le fichier web.xml l
e fonctionne- ment de plusieurs Servlets <?xml version="1.0" encoding="UTF-8"?>
web.xml du projet <web-app ...> HelloWorld <display-name>Servlets affichant diffr
emment le message HelloWorld L application WEB est </display-name> ici compose de d
eux <servlet> <servlet-name>HelloWorldServlet</servlet-name> Servlets <servlet-c
lass>HelloWorld</servlet-class> </servlet> <servlet> <servlet-name>HelloWorldPri

ntWriter</servlet-name> Deux faon diffrentes <servlet-class>HelloWorldPrintWriter<


/servlet-class> </servlet> d appeler la Servlet <servlet-mapping> HelloWorldServle
t <servlet-name>HelloWorldServlet</servlet-name> <url-pattern>*.toutpourservlet<
/url-pattern> </servlet-mapping>keulkeul.blogspot.com <servlet-mapping> <servlet
-name>HelloWorldServlet</servlet-name> <url-pattern>/msg.hello</url-pattern> </s
ervlet-mapping> Une seule faon d appeler <servlet-mapping> <servlet-name>HelloWorld
PrintWriter</servlet-name> la Servlet <url-pattern>/printwriter.html</url-patter
n> HelloWorldPrintWriter </servlet-mapping> </web-app> Servlets - M. Baron - Pag
e 32
33. Le fichier web.xml : c est quoi ? Le fichier web.xml permet la dfinition de che
min virtuel : mais comment sont-ils utiliss pour appeler les Servlets ? ... web.x
ml du projet <servlet-mapping> HelloWorld <servlet-name>HelloWorldServlet</servl
et-name> <url-pattern>/HelloWorldServlet/msg.hello</url-pattern> Trois chemins v
irtuels ont </servlet-mapping> <servlet-mapping> t dfinis pour excuter la <servlet-n
ame>HelloWorldServlet</servlet-name> Servlet HelloWorldServlet <url-pattern>*.to
utpourservlet</url-pattern> </servlet-mapping> <servlet-mapping> Contexte de <se
rvlet-name>HelloWorldServlet</servlet-name> Adresse du <url-pattern>/index.html<
/url-pattern> Port lapplication </servlet-mapping> Serveur WEB ... http://localh
ost:8080/HelloWorldServlet http://localhost:8080/HelloWorldServlet/bonjour.toutp
ourservletkeulkeul.blogspot.com http://localhost:8080/HelloWorldServlet/hello.to
utpourservlet http://localhost:8080/HelloWorldServlet/HelloWorldServlet/msg.hell
o La dfinition du contexte d une application WEB sera prsente dans la partie suivante
Servlets - M. Baron - Page 33

34. Cycle de vie dune Servlet Cration et initialisation de la Servlet Utilisation


de paramtres initiaux Traitement des services demands par les clients (au travers
de la mthode service( ) notamment), le cas chant Persistance d instance Destruction de
la Servlet et passage au ramasse-miettes de la machine virtuellekeulkeul.blogsp
ot.com Dconnexion avec une base de donnes Au contraire les applications serveur de
type CGI sont cres chaque requte et dtruites aprs le traitement des rponses Servle
- M. Baron - Page 34
35. Cycle de vie dune Servlet : persistance d instance Entre chaque requte du clien
t les Servlets persistent sous forme d instances d objet Au moment o le code d une Serv
let est charg, le serveur ne cre qu une seule instance de classe L instance (unique) t
raite chaque requte effectue sur la Servlet Les avantages (rappels) L empreinte mmoir
e reste petitekeulkeul.blogspot.com Le surcot en temps li la cration d un nouvel obje
t pour la Servlet est limin La persistance est possible c est--dire la possibilit de c
onserver l tat de l objet chaque requte (un exemple le compteur) Servlets - M. Baron Page 35
36. Cycle de vie dune Servlet : persistance d instance Exemple : Servlet qui incrme
nte un compteur chaque requte du client public class SimpleCounterServlet extends
HttpServlet { private int count = 0; protected void doGet(HttpServletRequest re
q, HttpServletResponse res) throws ServletException, IOException { res.setConten
tType("text/plain"); PrintWriter out = res.getWriter(); count++; out.println("De
puis son chargement, on a accd cette Servlet " + count " fois."); } }keulkeul.blog
spot.com Pensez prvoir des accs SimpleCounterServlet.java du projet Counter synchr
oniss au cas o plus d une requte est traite en mme temps par le Serveur Servlets - M.
aron - Page 36
37. Cycle de vie dune Servlet : rechargement d une Servlet A chaque rechargement d u
ne Servlet par le conteneur de Servlet, il y a cration d une nouvelle instance et d
onc destruction de l ancienne Le rechargement d une Servlet a lieu quand il y a : Mo
dification d au moins une classe de l application WEB Demande explicite de l administr
ateur du serveur WEB Redmarrage du conteneur de Servletskeulkeul.blogspot.com Le
conteneur de Servlets ne s intresse qu au Servlet et par consquent si vous modifiez au
tre chose que des classes il n y aura aucun rechargement implicite de Servlets Ser
vlets - M. Baron - Page 37

38. Cycle de vie dune Servlet : mthodes init() Un constat : il n y a pas de constru
cteur dans une Servlet L initialisation des attributs se fait par l intermdiaire de l
a mthode init() Elle ne possde pas de paramtre Dfinie et implmente dans la classe abs
raite GenericServlet La mthode init() peut tre appele diffrents moments Lorsque le c
onteneur de Servlets dmarre Lors de la premire requte la Servletkeulkeul.blogspot.c
om Sur demande explicite de l administrateur du serveur WEB N essayez pas de placer
des constructeurs la mode POO a ne sert rien Servlets - M. Baron - Page 38
39. Cycle de vie dune Servlet : mthode init() Exemple : Servlet qui incrmente un c
ompteur chaque requte du client avec une valeur initiale de 6 public class InitCo
unterServlet extends HttpServlet { private int count; public void init() throws
ServletException { count = 6; } protected void doGet(HttpServletRequest req, Htt
pServletResponse res) throws ServletException, IOException { res.setContentType(
"text/plain"); PrintWriter out = res.getWriter(); count++;keulkeul.blogspot.com
out.println("Depuis son chargement, on a accd cette Servlet " + count " fois."); }
} InitCounterServlet.java du projet Counter Servlets - M. Baron - Page 39
40. Cycle de vie dune Servlet : mthode init() Possibilit d utiliser des paramtres d ini
tialisation exploits exclusivement par la mthode init() Les paramtres d initialisatio
n sont dfinis dans le fichier web.xml de l application WEB ... Balise qui dtermine <
web-app ...> le nom du paramtre <display-name>Servlet simulant un compteur</displ
ay-name> <servlet> <servlet-name>InitConfigFileCounterServlet</servlet-name> Bal
ise qui dtermine la <servlet-class>InitConfigFileCounterServlet</servlet-class> v
aleur du paramtre <init-param> <param-name>initial_counter_value</param-name> <pa
ram-value>50</param-value> <description>Valeur initiale du compteur</description
>keulkeul.blogspot.com </init-param> Balise qui explique </servlet> le rle du par
amtre ... (optionnelle) </web-app> Plusieurs paramtres peuvent tre dfinis web.xml du
projet Counter mais attention l ordre des balises !! Servlets - M. Baron - Page 4
0
41. Cycle de vie dune Servlet : mthode init() Exemple : Servlet qui incrmente un c
ompteur et qui est initialise par le fichier web.xml public class InitConfigFileC
ounterServlet extends HttpServlet { private int count; public void init() throws
ServletException { String initial = this.getInitParameter("initial_counter_valu
e"); try { count = Integer.parseInt(initial); } catch(NumberFormatException e) {
count = 0; } } protected void doGet(HttpServletRequest req, HttpServletResponse
res) throws ServletException, IOException { ...keulkeul.blogspot.com count++; o
ut.println("Depuis son chargement, on a accd cette Servlet " + count " fois."); }
} InitConfigFileCounterServlet.java du projet Counter Servlets - M. Baron - Page
41
42. Cycle de vie dune Servlet : mthode destroy() Une Servlet doit librer toutes le
s ressources qu elle a acquises et qui ne pourront tre passes au ramasse-miettes Exe
mples de ressources Connexion une base de donnes Ouverture d un fichier sur le disq
ue serveur La mthode destroy() donne une dernire chance d crire les informations qui
ne sont pas encore sauvegardeskeulkeul.blogspot.com La mthode destroy() est galemen
t utilises pour crire les informations persistantes qui seront lues lors du procha
in appel init() Servlets - M. Baron - Page 42
43. Cycle de vie dune Servlet : mthode destroy() Exemple : Servlet qui incrmente u
n compteur qui sauve- garde l tat avec destroy() et qui recharge avec init() public
class InitDestroyCounterServlet extends HttpServlet { private int count; public
void destroy() { FileWriter fileWriter = null; PrintWriter printWriter = null;
try { fileWriter = new FileWriter("InitCounter.initial"); printWriter = new Prin
tWriter(fileWriter); printWriter.println(count); } catch (IOException e) { ... }
finally { if (printWriter != null) printWriter.close(); }keulkeul.blogspot.com
} protected void doGet(HttpServletRequest req, HttpServletResponse res) throws S
ervletException, IOException { ... } } InitDestoryCounterServlet.java du projet
Counter Servlets - M. Baron - Page 43

44. Cycle de vie dune Servlet : mthode destroy() Exemple (suite) : Servlet qui in
crmente un compteur qui sauvegarde l tat avec destroy() et qui recharge avec init()
... public void destroy() { // Voir transparent prcdent } public void init() throw
s ServletException { FileReader fileReader = null; BufferedReader bufferedReader
= null; try { fileReader = new FileReader("InitCounter.initial"); bufferedReade
r = new BufferedReader(fileReader); String initial = bufferedReader.readLine();
count = Integer.parseInt(initial); } catch (IOException e) {keulkeul.blogspot.co
m ... } finally { if (bufferedReader != null) bufferedReader.close(); } } } Init
DestoryCounterServlet.java du projet Counter Servlets - M. Baron - Page 44

45. Envoyer un contenu multimdia Pour l instant nous avons crit des Servlets qui ret
ournaient des contenus HTML Besoin de retourner des contenus diffrents : Protocol
e WAP et langage WML utiliss par les tlphones portables Gnration de contenus multimdi
s (cration de graphes, manipula- tion d images) L API Java facilite la gestion des co
ntenus multimdias enkeulkeul.blogspot.com proposant des bibliothques Encodage d imag
es sous diffrents formats (GIF, JPEG) Manipulation et traitement d images Servlets
- M. Baron - Page 45
46. Envoyer un contenu multimdia Exemple : Servlet qui gnre et retourne une image J
PEG affichant le message Bonjour tout le monde public class GenerateImageServlet
extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServletR
esponse res) throws ServletException, IOException { ServletOutputStream out = re
s.getOutputStream(); Frame frame = null; Graphics2D g = null; BufferedImage bim;
frame = new Frame(); frame.addNotify(); buffer_image = new BufferedImage(620, 6
0, BufferedImage.TYPE_3BYTE_BGR); g = buffer_image.createGraphics(); g.setFont(n
ew Font("Serif", Font.ITALIC, 48)); g.drawString("Bonjour tout le monde !", 10,5
0); JPEGImageEncoder encode = JPEGCodec.createJPEGEncoder(out);keulkeul.blogspot
.com encode.encode(buffer_image); out.close(); } } GenerateImageServlet.java du
projet Multimedia Servlets - M. Baron - Page 46
47. Suivi de session Le protocole HTTP est un protocole sans tat Impossibilit alor
s de garder des informations d une requ- te l autre (identifier un client d un autre) O
bligation d utiliser diffrentes solutions pour remdier au problme d tat Authentifier l
lisateur Champs de formulaire cachskeulkeul.blogspot.com Rcriture d URL Cookies persi
stants Suivi de session Servlets - M. Baron - Page 47
48. Cookies persistants : Cookie Un cookie est une information envoye au navigate
ur (client) par un serveur WEB qui peut ensuite tre relue par le client Lorsqu un c
lient reoit un cookie, il le sauve et le renvoie ensuite au serveur chaque fois q
u il accde une page sur ce serveur La valeur d un cookie pouvant identifier de faon un
ique un client, ils sont souvent utiliss pour le suivi de sessionkeulkeul.blogspo
t.com Les cookies ont t introduits par la premire fois dans Netscape Navigator home
.netscape.com/newsref/std/cookie_spec.html www.cookie-central.com Servlets - M.
Baron - Page 48
49. Cookies persistants : Cookie L API Servlet fournit la classe javax.servlet.htt
p.Cookie pour travailler avec les Cookies Cookie(String name, String value) : co
nstruit un cookie String getName() : retourne le nom du cookie String getValue()
: retourne la valeur du cookie setValue(String new_value) : donne une nouvelle
valeur au cookie setMaxAge(int expiry) : spcifie l ge maximum du cookie Pour la crati
on d un nouveau cookie, il faut l ajouter la rponse (HttpServletResponse) addCookie(C
ookie mon_cook) : ajoute la rponse un cookiekeulkeul.blogspot.com La Servlet rcupre
les cookies du client en exploitant la rponse (HttpServletRequest) Cookie[] getC
ookies() : rcupre l ensemble des cookies du site Servlets - M. Baron - Page 49
50. Cookies persistants : Cookie Code pour crer un cookie et l ajouter au client Co
okie cookie = new Cookie("Id", "123"); res.addCookie(cookie); Code pour rcuprer le
s cookies Cookie[] cookies = req.getCookies(); if (cookies != null) { for (int i
= 0; i < cookies.length; i++) { String name = cookies[i].getName(); String valu

e = cookies[i].getValue(); } }keulkeul.blogspot.com Il n existe pas dans l API Servl


et de mthode permettant de rcuprer la valeur d un cookie par son nom Servlets - M. Ba
ron - Page 50
51. Cookies persistants : Cookie Exemple : gestion de session (identifier un cli
ent d un autre) par l intermdiaire des cookies persistants public class CookiesServle
t extends HttpServlet { protected void doGet(HttpServletRequest req, HttpServlet
Response res) throws ServletException, IOException { ... String sessionId = null
; Cookie[] cookies = req.getCookies(); if (cookies != null) { for (int i = 0; i
< cookies.length; i++) { if (cookies[i].getName().equals("sessionid")) { session
Id = cookies[i].getValue(); }}} if (sessionId == null) { sessionId = new java.rm
i.server.UID().toString(); Cookie c = new Cookie("sessionid", sessionId);keulkeu
l.blogspot.com res.addCookie(c); out.println("Bonjour le nouveau"); Gnre un identi
fiant } else { out.println("Encore vous"); ... } unique pour chaque client } } C
ookiesServlet.java du projet Cookies Servlets - M. Baron - Page 51
52. Suivi de session : HttpSession Le plus gros problme des cookies est que les n
avigateurs ne les acceptent pas toujours L utilisateur peut configurer son navigat
eur pour qu il refuse ou pas les cookieskeulkeul.blogspot.com Les navigateurs n acce
ptent que 20 cookies par site, 300 par utilisateur et la taille d un cookie peut tr
e limite 4096 octets Servlets - M. Baron - Page 52
53. Suivi de session : HttpSession Solutions : utilisation de l API de suivi de se
ssion HttpSession Mthodes de cration lies la requte (HttpServletRequest) HttpSession
getSession() : retourne la session associe l utilisateur HttpSession getSession(bo
olean p) : cration selon la valeur de p Gestion d association (HttpSession) Enumera
tion getAttributNames() : retourne les noms de tous les attributs Object getAttr
ibut(String name) : retourne l objet associ au nom setAttribut(String na, Object va
) : modifie na par la valeur vakeulkeul.blogspot.com removeAttribut(String na) :
supprime l attribut associ na Destruction (HttpSession) Mcanisme trs puissant permet
tant de stocker des objets et invalidate() : expire la session non de simples ch
anes de caractres comme les cookies logout() : termine la session Servlets - M. Ba
ron - Page 53
54. Suivi de session : HttpSession Exemple : suivi de session pour un compteur p
ublic class HttpSessionServlet extends HttpServlet { protected void doGet(HttpSe
rvletRequest req, HttpServletResponse res) throws ServletException, IOException
{ res.setContentType("text/plain"); PrintWriter out = res.getWriter(); HttpSessi
on session = req.getSession(); Integer count = (Integer)session.getAttribute("co
unt"); if (count == null) count = new Integer(1); else count = new Integer(count
.intValue() + 1); session.setAttribute("count", count); out.println("Vous avez v
isit cette page " + count + " fois."); } } HttpSessionServlet.java du projet Http
Sessionkeulkeul.blogspot.com Client n2 Client n1 Servlets - M. Baron - Page 54

55. Collaboration de Servlets Les Servlets s excutant dans le mme serveur peuvent di
aloguer entre elles Deux principaux styles de collaboration Partage d information
: un tat ou une ressource. Exemple : un magasin en ligne pourrait partager les in
formations sur le stock des produits ou une connexion une base de donnes Partage
du contrle : une requte. Rception d une requte par une Servlet et laisser l autre Servl
t unekeulkeul.blogspot.com partie ou toute la responsabilit du traitement N essayez
pas de communiquer avec des Servlets de serveurs diffrents cette solution ne fon
ctionnera pas Servlets - M. Baron - Page 55
56. Collaboration de Servlets : partage d information La collaboration est obtenue
par l interface ServletContext L utilisation de ServletContext permet aux applicati
ons web de disposer de son propre conteneur d informations unique Une Servlet retr
ouve le ServletContext de son application web par un appel getServletContext() E
xemples de mthodes void setAttribute(String name, Object o) : lie un objet sous l
e nom indiqu Object getAttribute(String name) : retrouve l objet sous le nom indiquk
eulkeul.blogspot.com Enumeration getAttributeNames() : retourne l ensemble des nom

s de tous les attributs lis void removeAttribute(String name) : supprime l objet li


sous le nom indiqu Servlets - M. Baron - Page 56
57. Partage d information Exemple : Servlets qui vendent des pizzas et partagent u
ne spcialit du jour Cration de deux public class PizzasAdmin extends HttpServlet {
attributs protected void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException { res.setContentType("text/plain"); PrintWr
iter out = res.getWriter(); ServletContext context = this.getServletContext(); c
ontext.setAttribute("Specialite", "Jambon Fromage"); context.setAttribute("Date"
, new Date()); out.println("La pizza du jour a t dfinie."); } } PizzasAdmin.java du
projet ServletContext public class PizzasClient extends HttpServlet { protected
void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletExcep
tion, IOException { ... Lecture des attributskeulkeul.blogspot.com ServletContex
t context = this.getServletContext(); String pizza_spec = (String)context.getAtt
ribute("Specialite"); Date day = (Date)context.getAttribute("Date"); DateFormat
df = DateFormat.getDateInstance(DateFormat.MEDIUM); String today = df.format(day
); out.println("Aujourdhui (" + today + "), notre specialite est : " + pizza_spe
c); }} PizzasClient.java du projet ServletContext Servlets - M. Baron - Page 57
58. Partage d information Possibilit de partager des informations entre contextes w
eb Premire solution : utilisation d un conteneur d informations externes (une base de
donnes par exemple) Seconde solution : la Servlet recherche un autre contexte pa
rtir de son propre contexte ServletContext getContext(String uripath) : obtient
le contexte partir d un chemin URI (uripath = chemin absolu) Contextes WEB Contene
ur de Servlets Servlet 1keulkeul.blogspot.com Servlet 2 Servlet 3 Ne fonctionne
que dans le Servlet 4 Communication par le contexte mme serveur Serveur Web WEB S
ervlets - M. Baron - Page 58
59. Partage d information Exemple : permet d afficher la spcialit du jour de l application web prcdente public class ReadSharePizzas extends HttpServlet { protected voi
d doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException
, IOException { res.setContentType("text/html"); Contextes de l application PrintW
riter out = res.getWriter(); web prcdente ServletContext my_context = this.getServ
letContext(); ServletContext pizzas_context = my_context.getContext("/ServletCon
text"); String pizza_spec = (String)pizzas_context.getAttribute("Specialite"); D
ate day = (Date)pizzas_context.getAttribute("Date"); DateFormat df = DateFormat.
getDateInstance(DateFormat.MEDIUM); String today = df.format(day); out.println("
Aujourdhui (" + today + "), notre specialite est : " + pizza_spec); }keulkeul.bl
ogspot.com } ReadSharePizzas.java du projet Pour communiquer entre contextes, Cr
ossServletContext il faut autoriser la communication inter-contextes (voir parti
e suivante) Servlets - M. Baron - Page 59

60. Collaboration de Servlets : partage du contrle Les Servlets peuvent partager


ou distribuer le contrle de la requte Deux types de distribution Distribuer un ren
voi : une Servlet peut renvoyer une requte entire Distribuer une inclusion : une S
ervlet peut inclure du contenu gnr Les avantages sont La dlgation de comptenceskeulke
l.blogspot.com Une meilleure abstraction et une plus grande souplesse Architectu
re logicielle MVC (Servlet = contrle et JSP = prsentation) Collaboration entre Ser
vlets / JSP dans la partie JSP Servlets - M. Baron - Page 60
61. Collaboration de Servlets : partage du contrle Le support de la dlgation de req
ute est obtenu par l inter- face RequestDispatcher Une Servlet obtient une instance
sur la requte RequestDispatcher getRequestDispatcher(String path) : retourne une
instance de type RequestDispatcher par rapport un composant Un composant peut-tr
e de tout type : Servlet, JSP, fichier statique,
path est un chemin relatif ou a
bsolu ne pouvant pas sortir du contexte Pour distribuer en dehors du contexte co
urant il faut : Identifier le contexte extrieur (utilisation de getContext())keul
keul.blogspot.com Utiliser la mthode getRequestDispatcher(String path) Le chemin
est uniquement en absolu De prfrence utilisez la mthode getRequestDispatcher de Ser
vletRequest Servlets - M. Baron - Page 61

62. Partage du contrle : distribuer un renvoi La mthode forward(...) de l interface


RequestDispatcher renvoie une requte d une Servlet une autre ressource sur le serve
ur void forward(ServletRequest req, ServletResponse res) : redirection de requte
RequestDispatcher dispat = req.getRequestDispatcher("/index.html"); dispat.forwa
rd(req,res); Possibilit de transmettre des informations lors du renvoi en attacha
nt une chane d interrogation (au travers de l URL) en utilisant les attributs de requt
e via la mthode setAttribute(...)keulkeul.blogspot.com Les choses ne pas faire ..
. ne pas effectuer de modification sur la rponse avant un renvoi ne rien faire su
r la requte et la rponse aprs une distribution d un renvoi Servlets - M. Baron - Page
62
63. Partage du contrle : distribuer un renvoi Exemple : distribuer un renvoi de E
metteur Recepteur public class SenderServlet extends HttpServlet { protected voi
d doGet(HttpServletRequest req, HttpServletResponse res) Transmission throws Ser
vletException, IOException { d informations par req.setAttribute("seconde", "au re
voir"); attributs RequestDispatcher dispat = req.getRequestDispatcher("/recepteu
r.html?mot=bonjour"); dispat.forward(req,res); // Ne rien faire sur req et res L
e chemin est absolu par Transmission } rapport au contexte de d informations par }
l application web chane d interrogation SenderServlet.java du projet ForwardInclude
public class ReceiverServlet extends HttpServlet { protected void doGet(HttpServ
letRequest req, HttpServletResponse res) throws ServletException, IOException {
res.setContentType("text/plain"); PrintWriter out = res.getWriter();keulkeul.blo
gspot.com out.println(req.getParameter("mot")); Affichage des out.println(req.ge
tAttribute("seconde")); informations stockes } dans la requte } L utilisation des at
tributs la place des ReceiverServlet.java du projet paramtres donne la possibilit
de passer ForwardInclude des objets et non des chanes de caractres Servlets - M. B
aron - Page 63
64. Partage du contrle : distribuer un renvoi Nous avons vu au dbut de cette parti
e qu il existait une mthode de redirection sendRedirect( ) est une redirection effect
ue par le client forward( ) est une redirection effectue par le serveur Est-il prfrabl
e d utiliser forward( ) ou sendRedirect( ) ??? forward( ) est utiliser pour la partage d
e rsultat avec un autre composant sur le mme serveur sendRedirect( ) est utiliser po
ur des redirections externes carkeulkeul.blogspot.com aucune recherche getContex
t(...) n est ncessaire Prfrez forward( ) pour des redirections dans le contexte et send
Redirect( ) pour le reste Servlets - M. Baron - Page 64
65. Partage du contrle : distribuer une inclusion La mthode include( ) de l interface
RequestDispatcher inclut le contenu d une ressource dans la rponse courante Request
Dispatcher dispat = req.getRequestDispatcher("/index.html"); dispat.include(req,
res); La diffrence avec une distribution par renvoi est : la Servlet appelante ga
rde le contrle de la rponse elle peut inclure du contenu avant et aprs le contenu i
nclus Possibilit de transmettre des informations lors de l inclusion en attachant u
ne chane d interrogation (au travers de l URL)keulkeul.blogspot.com en utilisant les
attributs de requte via la mthode setAttribute(...) Les choses ne pas faire ... ne
pas dfinir le code d tat et en-ttes (pas de setContentType( )) supprimer les balises <
HTML> et <BODY> Servlets - M. Baron - Page 65
66. Partage du contrle : distribuer une inclusion Exemple : permet de distribuer
une inclusion public class IncluderServlet extends HttpServlet { protected void
doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException { res.setContentType("text/html"); PrintWriter out = res.getWriter()
; out.println("<HTML><BODY>"); RequestDispatcher dispat = req.getRequestDispatch
er("included.html"); dispat.include(req,res); out.println("<br>"); req.setAttrib
ute("bonjour", "Bonjour"); Cette Servlet ralise trois dispat.include(req,res); in
clusions out.println("<br>"); req.setAttribute("bonsoir", "Bonsoir");keulkeul.bl
ogspot.com dispat.include(req,res); out.println("<br>"); out.println("</BODY></H
TML>"); } } IncluderServlet.java du projet ForwardInclude Servlets - M. Baron Page 66

67. Partage du contrle : distribuer une inclusion Exemple (suite) : permet de dis
tribuer une inclusion public class IncludedServlet extends HttpServlet { protect
ed void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletExc
eption, IOException { PrintWriter out = res.getWriter(); if(req.getAttribute("bo
njour") != null) { out.println(req.getAttribute("bonjour")); if (req.getAttribut
e("bonsoir") != null) { out.println(req.getAttribute("bonsoir")); } else { out.p
rintln("Pas Bonsoir"); } } else { out.println("Rien de rien"); Retour l appelant }
} }keulkeul.blogspot.com IncludedServlet.java du projet ForwardInclude Servlets
- M. Baron - Page 67
68. Scurit : authentification La scurit consiste conserver les informations sensible
s dans les mains des utilisateurs Authentification : capable de vrifier l identit de
s parties impliques Habilitation : limiter l accs aux ressources un ensemble d utilisa
teurs Confidentialit : garantir la communication des parties impliques Nous distin
guons plusieurs types dautorisation : BASIC : fournit par le protocole HTTP bas s
ur un modle simple de demande/rponse (codage Base64)keulkeul.blogspot.com FORM : a
uthentification ne reposant pas celle du protocole HTTP Servlets - M. Baron - Pa
ge 68
69. Scurit : types dautorisation Principe des autorisations de type BASIC GET / HT
TP/1.1 Application HTTP/1.1 401 Unauthorized WWW-Authenticate: BASIC WEB realm="
Users" GET / HTTP/1.1 Autorisation: BASIC RkfddsIRSddO= Client Web Serveur Web Vr
ification si lutilisateur est connu et son mot de Principe des autorisations de
type FORM passe correct GET / HTTP/1.1keulkeul.blogspot.com Application HTTP/1.1
200 OK Content-Type: text/html WEB ... POST / HTTP/1.1 ... Serveur Web Client W
eb Donnes caches et non visible Servlets - M. Baron - Page 69
70. Scurit : deux familles didentification pour les Servlets Gre par le conteneur de
Servlets (Ident 1) : Spcification dun domaine de scurit dans le fichier de configu
ration web.xml Les utilisateurs sont grs (lutilisateur existe-il, le mot de passe
est-il correct, ) uniquement par le conteneur de Servlets Base sur les rles (BASIC)
A base de formulaire (FORM) Effectue l intrieur des Servlets (Ident 2) :keulkeul.bl
ogspot.com Les utilisateurs sont stocks dans une base de donnes, un fichier, La vri
fication est effectue dans les Servlets (besoin dun codage) Personnalise (BASIC) P
ersonnalise base de formulaire (FORM) Servlets - M. Baron - Page 70
71. Authentification base sur les rles : Ident 1 Exemple : Servlet qui aprs identif
ication affiche un ensem- ble dinformations Aucune vrification dans le code de la
Servlet pour public class SecurityRolesServlet extends HttpServlet { lidentific
ation protected void doGet(HttpServletRequest req, HttpServletResponse res) thro
ws ServletException, IOException { res.setContentType("text/plain"); PrintWriter
out = res.getWriter(); out.println("Bonjour : " + req.getRemoteUser()); out.pri
ntln("Information Top-Secrte"); out.println("Type dauthentification : " + req.get
AuthType()); out.println("Est-un administrateur : " + req.isUserInRole("admin"))
; } } Conteneur dekeulkeul.blogspot.com SecurityRolesServlet.java du projet Serv
lets AuthentificationByRoles Servlets - M. Baron - Page 71
72. Authentification base sur les rles : Ident 1 Besoin de modification du fichier
de configuration web.xml web.xml du projet de lapplication WEB considre Authentif
icationByRoles ... <web-app ...> <display-name>Gestion dune authentification par
"Roles"</display-name> Dfinition des Servlets <servlet> contenues dans <servletname>SecuriteRolesServlet</servlet-name> <servlet-class>SecuriteRolesServlet</se
rvlet-class> lapplication WEB et des </servlet> chemins virtuels <servlet-mappin
g> <servlet-name>SecuriteRolesServlet</servlet-name> <url-pattern>/SecuriteRoles
Servlet</url-pattern> Dfinit pour quelles URL la </servlet-mapping> contrainte d id
entification doit tre mise en uvre <security-constraint> <web-resource-collection>
<web-resource-name>SecretProtection</web-resource-name> Protection des <url-pat
tern>/SecuriteRolesServlet</url-pattern> <http-method>GET</http-method> ressourc
es pour la </web-resource-collection> mthode GET <auth-constraint> <role-name>tes

t</role-name> Rle(s) ayant le droitkeulkeul.blogspot.com </auth-constraint> daccde


r aux ressources de </security-constraint> lapplication WEB <login-config> <auth
-method>BASIC</auth-method> <realm-name>Authentification de SecuriteRoleServlet<
/realm-name> Habillage de la </login-config> bote d identification </web-app> La dfi
nition des rles sera prsente dans la partie suivante Servlets - M. Baron - Page 72
73. Authentification personalise base sur les rles : Ident 1 Exemple : Servlet qui
aprs identification personnalise affiche un message de bienvenue Aucune vrification
dans public class SecurityFormRolesServlet extends HttpServlet { de la Servlet
pour le code lidentification protected void doGet(HttpServletRequest req, HttpSe
rvletResponse res) throws ServletException, IOException { res.setContentType("te
xt/html"); PrintWriter out = res.getWriter(); out.println("Bonjour : " + req.get
RemoteUser()); Termine explicitement la req.getSession().invalidate(); session.
Obligation de } s identifier chaque fois } que la Servlet est appele Conteneur de S
ervletsSecurityFormRolesServlet.java du projet AuthentificationFormByRoleskeulke
ul.blogspot.com loginpage.html Deux fichiers au format HTML grent errorpage.html
les pages de connexion et d erreur Servlets - M. Baron - Page 73
74. Authentification personalise base sur les rles : Ident 1 Besoin de modification
du fichier de configuration web.xml de lapplication WEB considre ... <web-app ...
> ... Le dbut du fichier web.xml <servlet> ... </servlet> <servlet-mapping> ... <
/servlet-mapping> est identique au prcdent <security-constraint> ... </security-co
nstraint> modulo le nom de la classe <login-config> SecuriteFormServlet <auth-me
thod> FORM </auth-method> <form-login-config> Balise qui stocke la <form-login-p
age> /loginpage.html page de connexion </form-login-page> <form-error-page> /err
orpage.html </form-error-page> </form-login-config> </login-config> Balise qui s
tocke lakeulkeul.blogspot.com </web-app> page des erreurs de web.xml du projet c
onnexion AuthentificationFormByRoles Les fichiers HTML sont placs la racine de l ap
plication WEB et au mme niveau que le rpertoire WEB-INF Servlets - M. Baron - Page
74
75. Authentification personalise base sur les rles : Ident 1 Le formulaire de la pa
ge loginpage.html doit employer la mthode POST pour la transmission des donnes des
valeurs spciales pour les noms des composants Le moteur de Servlet avec les info
rmations Rend invisible la contenues dans le fichier web.xml se charge transmiss
ion des donnes de traiter l identification <FORM METHOD=POST ACTION="j_security_che
ck"> Valeur pour le nom d utilisateur Nom d utilisateur : <INPUT TYPE=TEXT NAME="j_u
sername"><br> Mot de passe : <INPUT TYPE=PASSWORD NAME="j_password"><br>keulkeul
.blogspot.com <INPUT TYPE=SUBMIT> </FORM> Valeur pour le mot loginpage.html du p
rojet Cest du JSP de passe AuthentificationFormByRoles Servlets - M. Baron - Pag
e 75
76. Authentification personnalise : Ident 2 Exemple : Servlet qui traite les auto
risations de type BASIC public class SecurityServlet extends HttpServlet { Secur
ityServlet.java du projet private Hashtable users = new Hashtable(); Authentific
ationByServlet public void init(ServletConfig config) throws ServletException {
super.init(config); users.put("mickael:baron","allowed"); Rcupre dans la } requte l
e HEADER public void doGet(HttpServletRequest req, HttpServletResponse res) nomm
Authorization throws ServletException, IOException { res.setContentType("text/pl
ain"); PrintWriter out = res.getWriter(); S il s agit du premier essai ou String aut
h = req.getHeader("Authorization"); d une mauvais saisie => envoie d une rponse avec
l en-tte if (!allowUser(auth)) { res.setHeader("WWW-Authenticate", "BASIC realm="u
sers""); WWW-Authenticate et l tat res.sendError(HttpServletResponse.SC_UNAUTHORIZ
ED); SC_UNAUTHORIZED } else out.println("Page Top-Secret"); } protected boolean
allowUser(String auth) throws IOException { if (auth == null) return false; if (
!auth.toUpperCase().startsWith("BASIC "))keulkeul.blogspot.com return false; Str
ing userpassEncoded = auth.substring(6); Mthode qui traite String userpassDecoded
= Base64EnDecoder.decode(userpassEncoded); le rsultat de l en- return ("allowed".e
quals(users.get(userpassDecoded))); tte Authorization } } La vrification de l identi
fication est effectue dans le code de la Servlet Servlets - M. Baron - Page 76

77. Authentification personnalise base de formulaire : Ident 2 Diffrences avec les


autres types d identification Cette identification part d un formulaire basique ave
c une protection minimum des transmissions grce la mthode POST Cette identificatio
n compare l identification personnalise base sur les rles est dmarre directemen
page WEB de connexion (login.html) Au contraire l identification personnalise base s
ur les rles est dmarre au travers de son URL virtuelle Transmission par POSTkeulkeu
l.blogspot.com Servlet de Correcte traitement login.html Errone Servlets - M. Bar
on - Page 77
78. Authentification personnalise base de formulaire : Ident 2 Exemple : Servlet
qui traite les autorisations de type FORM public class SecurityFormServlet exten
ds HttpServlet { Le mot de passe est private Hashtable users = new Hashtable();
cach dans la requte de type POST public void init(ServletConfig config) throws Ser
vletException { users.put("mickael:baron","allowed"); } Rcupre les variables publi
c void doPost(HttpServletRequest req, HttpServletResponse res) throws ServletExc
eption, IOException { qui ont t transmises res.setContentType("text/html"); par le
formulaire de PrintWriter out = res.getWriter(); login.html String account = re
q.getParameter("account"); String password = req.getParameter("password"); Gnre un
e page if (!allowUser(account, password)) { d erreur avec la out.println("<HTML><H
EAD><TITLE>Access Denied</TITLE></HEAD>"); possibilit de out.println("<BODY>Votre
compte et mot de passe sont incorrects.<BR>"); out.println("<A HREF="/SecuriteP
ersoFormServlet/login.html"> s identifier une nouvelle Retenter</A>"); fois out.pr
intln("</BODY></HTML>");keulkeul.blogspot.com } else { req.getSession().setAttri
bute("logon.isDone", account); out.println("Bravo : " + account); L identification
est } } russie et on modifie la ... session en ajoutant le } nom de l utilisateur
SecurityFormServlet.java du projet AuthentificationFormByServlet Servlets - M. B
aron - Page 78

79. Se connecter aux bases de donnes Utilisation de l API JDBC (Java DataBase Conne
ctivity) JDBC est une API du niveau SQL, elle permet d excuter des instructions SQL
et de retrouver les rsultats (s il y en a) L API est un ensemble d interfaces et de cl
asses conues pour effectuer des actions sur toute base de donnes (mySQL, ORACLE, S
YBASE, ODBC, Derby) Utilisation d un gestionnaire de pilotes JDBC Un pilote JDBC s
pcifique une base de donnes implmente l interface java.sql.Driver Peut dialoguer avec
tout pilote conforme l API JDBC o les pilotes sont disponibles java.sun.com/produ
cts/jdbc JDBC en quatre tapeskeulkeul.blogspot.com Charger le pilote Se connecter
la base Crer et excuter une requte SQL Traiter le rsultat si ncessaire Servlets - M
Baron - Page 79
80. Se connecter aux bases de donnes : charger un pilote Le pilote est obligatoir
e, il convertit les appels JDBC en appels natifs. Il est ncessaire de connatre le
nom de la classe du pilote JDBC que l on veut utiliser La librairie Pilote ORACLE
: oracle.JDBC.driver.OracleDriver (gnralement .jar) dsignant le pilote Pilote JDBC/
ODBC : sun.jdbc.odbc.JdbcOdbcDriver doit tre plac dans Pilote mySQL : com.mysql.jd
bc.Driver le rpertoire WEB-INF/lib Pilote Derby : org.apache.derby.jdbc.ClientDri
ver Le chargement du pilote se fait en utilisant la mthode Class.forName(String P
ilote) throws ClassNotFoundException Chargement du pilote Exception leve sur Derb
y la classe pilote n estkeulkeul.blogspot.com pas trouve Class.forName("org.apache.
derby.jdbc.ClientDriver"); Class.forName("sun.jdbc.odbc.JdbcOdbcDriver"); Charge
ment du pilote ODBC Servlets - M. Baron - Page 80
81. Se connecter aux bases de donnes : se connecter la base Pour se connecter une
base de donnes il faut fournir une URL qui indique o se trouve la base URL ORACLE
: jdbc:oracle:thin:host:port:idbase URL ODBC : jdbc:odbc:IDDSN URL mySQL : jdbc
:mysql:host Exception leve si la connexion URL Derby : jdbc:derby:host la base es
t impossible La connexion la base se fait en utilisant la mthode DriverManager.ge
tConnection("URL","user","pass") throws SQLException Connexion une base mySQL no
mme Espoir Connection ma_connexion =keulkeul.blogspot.com DriverManager.getConnec
tion("jdbc:mysql://localhost/Espoir","michael","baro n"); Connection ma_connexio

n = DriverManager.getConnection("jdbc:oracle:thin:@dbhost:1528:ORCL","michael",
"baron"); Connexion une base ORACLE nomme ORCL Servlets - M. Baron - Page 81

82. Se connecter aux bases de donnes : crer et excuter une requte SQL La requte ne pe
ut tre cre et excute que si le pilote et la connexion la base sont valides Il faut a
ant tout crer une instruction SQL sur la base createStatement() throws SQLExcepti
on Exception leve si l instruction SQL ne peut tre cre Statement mon_statement = ma_c
onnexion.createStatement(); La rfrence de la connexion une base de donnes Il faut e
nfin excuter la requte en crivant concrtement la requte SQL executeQuery(String reque
te) throws SQLExceptionkeulkeul.blogspot.com Exception leve si le requte SQL n est p
as correcte ResultSet mon_resultat = mon_statement.executeQuery("SELECT * FROM `
table`"); La requte SQL Rfrence de l instruction SQL Servlets - M. Baron - Page 82
83. Se connecter aux bases de donnes : traiter le rsultat Enfin il faut traiter un
objet de type ResultSet il existe de nombreuses mthodes boolean next() : avancer
d une ligne de la table rsultante String getString(String columName) : interroger
un champ String par son nom String getString(int columnIndex) : interroger un ch
amp String par son index int getInt( ) : interroger un champ Integer par son nom o
u index Accde la prochaine ligne s il y en akeulkeul.blogspot.com while (mon_result
at.next()) { String colonne1 = mon_resultat.getString(1); out.println("Nom:" + c
olonne1); } Affiche le rsultat en ligne Servlets - M. Baron - Page 83
84. Se connecter aux bases de donnes Exemple : Servlet qui interroge une base de
donnes mySQL public class DataBaseServlet extends HttpServlet { protected void do
Get(HttpServletRequest req, HttpServletResponse res) throws ServletException, IO
Exception { res.setContentType("text/html"); DataBaseServlet.java du projet Prin
tWriter out = res.getWriter(); DataBaseConnection try { Class.forName("org.apach
e.derby.jdbc.ClientDriver"); Connection ma_connexion = DriverManager.getConnecti
on("jdbc:derby://localhost:1527/PersonDB"); Statement mon_statement = ma_connexi
on.createStatement(); ResultSet mon_resultat = mon_statement.executeQuery("SELEC
T NAME, FIRSTNAME, OLDYEAR FROM PERSON"); while (mon_resultat.next()) { out.prin
t("Nom : " + mon_resultat.getString(1)); out.print(" Prnom : " + mon_resultat.get
String(2)); out.println(" Age : " + mon_resultat.getInt(3)); out.println("<br>")
; }keulkeul.blogspot.com } catch(SQLException e) { ... } } } N oubliez pas dans la
requte SQL les cotes

Servlet Authentification :
public class securityRoleServlet extends httpServlet{

protected void doGet(HttpServletRequest req, HttpServletResponce rep) throws


ServletException,IOException
{
rep.setContentType("text/plain");
PrintWriter out=rep.getWriter();
out.println("bonjour :" +getRemoteUser());
req.getSession().invalidate();
out.println(" Top Secret");
out.println("type d'autehntification :" +rep.getAuthType());
out.println("admin : " +rep.IsUserInRole("admin"));
}

String account=req.getParameter("account");
String password=req.getParameter("password");
if( !allowUser(account,passord)){
out.println("<html><head><title>access </title></head></html>");
out.println("<body>votre compte ou mot de passe sont incorrecte </body>");
out.println("<a href =\"/class/login.html\"> chemin </a> ");
}
else {
req.getSession().setAttribute("login.isDone");
out.prinln("succes !! "+account);

Vous aimerez peut-être aussi