Académique Documents
Professionnel Documents
Culture Documents
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
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
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
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
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
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
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
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{
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);