Vous êtes sur la page 1sur 35

Part4-1

SERVLETS

Dfinition dun Servlet

Un des composants de larchitecture Java EE sexcutant du


cot serveur gnrant dynamiquement des pages web.

Comparable :

Traite des requtes HTTP et fournit aux clients des rponses


HTTP.
CGI ( Common Gateway Interface ),
Langages de script cot serveur PHP, ASP

Un Servlet sexcute dans un conteneur de Servlet )


permettant dtablir le lien entre le Servlet, la machine
virtuelle java et le serveur Web.

Ex : Glassfish, Tomcat, Weblogic,

Prof. Asmaa El Hannani

ISIC/S3

302

Utilit des servlets

Crer des pages dynamiques (HTML/XML) la vole.

Effectuer des traitements applicatifs cot serveur Web et


bnficier de leur puissance de calcul et de laccs aux bases
de donnes.

crire une application Web en Java dont linterface utilisateur


est dans le client :

navigateur,

applet,

tlphone portable

Prof. Asmaa El Hannani

ISIC/S3

303

Avantages des servlets

Portabilit

Puissance

Utilisent des threads (processus lgers) plutt que des processus systme

Sret

Disponibilit des API de Java.


Manipulation dimages, connectivit aux bases de donnes (JDBC)

Efficacit

Technologie indpendante de la plate-forme et du serveur.

Typage fort de Java et gestion des erreurs par exceptions.


Fonctionnement dans une machine virtuelle.

Faible cot

Nombreux serveurs gratuits.

Prof. Asmaa El Hannani

ISIC/S3

304

Les technologies

Prof. Asmaa El Hannani

ISIC/S3

305

Servlet: Fonctionnement

Le serveur Web associe une ou plusieurs URLs chaque


servlet

Un servlet lit les donnes envoyes par un client (requte


HTTP)

donnes explicites (formulaire)


donnes implicites (Request Header)

Le conteneur de servlet dclenche le servlet qui sexcute ct


serveur

Le servlet gnre et envoie la rponse au client

donnes explicites (HTML/XML)


donnes implicites (Response Header, Status Code)

Prof. Asmaa El Hannani

ISIC/S3

306

Servlet: Fonctionnement

Prof. Asmaa El Hannani

ISIC/S3

L'API Servlet

307

Servlet: Modle de programmation

Un servlet est un objet qui peut tre manipul par le conteneur


via linterface javax.servlet.Servlet suivante:

Tout servlet (que vous crivez) doit implmenter cette interface

soit directement,
soit en drivant dune classe implmentant dj cette interface
comme (GenericServlet ou HttpServlet )

Prof. Asmaa El Hannani

ISIC/S3

309

LAPI Servlet

L'API Servlet fournit deux classes qui proposent dj une


implmentation:

GenericServlet : pour la conception de Servlets indpendantes


du protocole
HttpServlet : pour la conception de Servlets spcifiques au
protocole HTTP

Prof. Asmaa El Hannani

ISIC/S3

310

LAPI Servlet

Your Servlet

Prof. Asmaa El Hannani

ISIC/S3

311

La classe GenericServlet

javax.servlet.GenericServlet

dfinit un servlet indpendant des protocoles rseaux


est une classe abstraite qui fournit une implmentation de base
de linterface Servlet

Mthodes

init()
service()
Dj implmentes
destroy()
service() est le principal point dentre cest une mthode
abstraite qui doit tre implmente par la classe drive

Prof. Asmaa El Hannani

ISIC/S3

312

La classe HttpServlet

javax.servlet.http.HttpServlet

2 mthodes remplacent service() de la classe mre :

hrite de GenericServlet et fournit une implmentation spcifique


HTTP de linterface Servlet
doGet() : pour les requtes Http de type GET
doPost() : pour les requtes Http de type POST
Votre servlet doit obligatoirement contenir lune ou lautre de
ces 2 mthodes redfinie, choisie selon le mode denvoi du
formulaire HTML qui l'excute.

service() de HttpServlet appelle automatiquement la bonne


mthode (doGet ou doPost) en fonction du type des requtes
http.

Prof. Asmaa El Hannani

ISIC/S3

313

ISIC/S3

314

Exemple

Prof. Asmaa El Hannani

Cycle de vie dun servlet

Cycle de vie dun servlet


nexiste pas

Destruction (shutdown du serveur, )


destroy()

Instanciation puis initialisation


constructeur
init()
Traitement de 1 N requtes,
chacune dans un thread spar
service()

Prof. Asmaa El Hannani

initialis

ISIC/S3

316

Cycle de vie dun servlet: Initialisation

Initialisation: init()

une fois cre, le servlet est initialis avec cette mthode

elle nest appele quune seule fois par le serveur

on peut y placer
les connexions rseaux
les connexions BD
la rcupration des paramtres dinitialisation
la
rcupration des paramtres de contexte
lapplication

Prof. Asmaa El Hannani

ISIC/S3

de

317

Cycle de vie dun servlet: Traitement

Traitement: service()
Lors de la rception dune requte, le conteneur cre:

un objet ServletRequest (la requte), et


un objet ServletResponse (la rponse)

Le conteneur appelle ensuite la mthode service() avec ces


deux objets en paramtres pour permettre au servlet de
rpondre la requte du client.
service() de HttpServlet appelle automatiquement la bonne
mthode (doGet ou doPost) en fonction du type des requtes
http.

Prof. Asmaa El Hannani

ISIC/S3

318

Cycle de vie dun servlet: Destruction

Destruction: destroy ()

destruction du servlet
appele quune seule fois quand le servlet est dcharg par
le serveur, ou quand le serveur est arrt
on y place la fermeture des connexions rseaux, BD

Prof. Asmaa El Hannani

ISIC/S3

Premier servlet

10

319

Un premier servlet: HelloServlet


API importer
Servlet de type
HttpServlet

Redfinition
de doGet

Rsultat

Prof. Asmaa El Hannani

ISIC/S3

322

Un premier servlet

Toute servlet doit au moins importer trois packages :

java.io pour la gestion des flux et


deux packages de l'API servlet ;
javax.servlet.*
javax.servlet.http.*

Il faut dclarer une nouvelle classe qui hrite de HttpServlet.

Il faut redfinir la mthode doGet() ou doPost pour y insrer


le code qui va envoyer dans un flux le code HTML de la page
gnre.

Prof. Asmaa El Hannani

11

ISIC/S3

323

Structure de base dun servlet http

Optionnelle

Obligatoire

Optionnelle
Prof. Asmaa El Hannani

ISIC/S3

324

Structure des mthodes doGet/doPost

Dtail des mthodes doGet() et doPost()

Prof. Asmaa El Hannani

12

ISIC/S3

325

Lire la requte et rpondre

Requtes et Rponses HTTP

Prof. Asmaa El Hannani

13

ISIC/S3

327

Lire la requte du client

HttpServletRequest hrite de ServletRequest

encapsule la requte HTTP et fournit des mthodes pour accder


toutes les informations
contient les informations sur lenvironnement du serveur

Mthodes de HttpServletRequest
String getMethod()

String getHeader(String name)

retourne le paramtre name de lentte HTTP de la requte

String getRemoteHost()

retourne la mthode HTTP

retourne le nom dhte du client

String getRemoteAddr()

retourne ladresse IP du client

Prof. Asmaa El Hannani

ISIC/S3

328

Lire la requte du client (2)

Mthodes de HttpServletRequest (suite)


String getParameter(String name)

Enumeration getParameterNames()

retourne tous les noms des paramtres

String getServerName()

retourne la valeur dun champ de formulaire

retourne le nom du serveur

String getServerPort()

retourne le port sur lequel le serveur coute

Prof. Asmaa El Hannani

14

ISIC/S3

329

Lire la requte du client


Exemple : AffichInfo

Prof. Asmaa El Hannani

ISIC/S3

330

Lire la requte du client


Exemple : AffichInfo

Exemple

http://localhost/exemples/servlets/TraceServlet/tutu?toto=titi

getMethod() GET

getPathInfo() /tutu

getQueryString() toto=titi

getRequestURI() /exemples/servlets/TraceServlet/tutu

getServletPath() /servlets/TraceServlet

getContextPath() /exemples

Prof. Asmaa El Hannani

15

ISIC/S3

331

Rpondre au serveur

HttpServletResponse hrite de ServletResponse

utilis pour construire un message de rponse HTTP renvoy au


client
contient les mthodes ncessaires pour dfinir: le type de
contenu, lentte, et le code de retour
contient un flux de sortie pour envoyer des donnes (HTML ou
XML ou autre) au client

Mthodes de HttpServletResponse
void setStatus(int statusCode)

dfinit le code de retour de la rponse

void setHeader(String name, String value)

dfinit la valeur de lentte name

Prof. Asmaa El Hannani

ISIC/S3

332

Rpondre au serveur (2)

Mthodes (suite)
void setContentType(String type)

flux pour envoyer des donnes binaires

void sendRedirect(String url)

pour envoyer des donnes texte au client

ServletOutputStream getoutputStream()

dfinit le type MIME du contenu

PrintWriter getWriter()

redirige le client vers lURL

On peut

renvoyer du HTML
rediriger vers une page donne
faire une action (upload/download,)

Prof. Asmaa El Hannani

16

ISIC/S3

333

setContentType

Prof. Asmaa El Hannani

ISIC/S3

334

Renvoie dune feuille Excel


Exemple : ExcelServlet

Prof. Asmaa El Hannani

17

ISIC/S3

335

Traitement des donnes

Traitement des donnes

Un formulaire HTML

permet de saisir les donnes


mcanisme pour envoyer les donnes au serveur Web

Rappel: les balises

FORM: pour dfinir un formulaire


INPUT: pour dfinir un lment dinterface

text,
password,
checkbox,
radio,
submit, reset

TEXTAREA: zone de texte sur plusieurs lignes


SELECT: liste droulante

Prof. Asmaa El Hannani

18

ISIC/S3

337

Traitement des donnes (2)

Attributs de <FORM>

action: URL o envoyer les donnes


method: mthode utiliser pour lenvoi (GET/POST)

Les donnes sont envoyes lorsque lon clique sur un bouton


de type submit
<form action="MaServlet" method="post">
Nom: <input type=text id=nom />
<br>
<input type=submit value =Envoyer />
</form>

Prof. Asmaa El Hannani

ISIC/S3

338

Traitement des donnes (3)

Les mthodes GET et POST


GET

les champs du formulaire sont ajouts lURL de lattribut ACTION


forme nom=valeur

URL?nom1=val1&nom2=val2&

POST

les donnes sont passes dans le corps du message HTTP


envoi de donnes confidentielles ou binaires par exemple

Prof. Asmaa El Hannani

19

ISIC/S3

339

Traitement des donnes (4)

Les paramtres d'une requte sont accessibles dans l'objet


(HttpServletRequest) request

request.getParameter("paramname")

Il est possible de rcuprer tous les noms des paramtres

request.getParameterNames()

Exemple de lecture des paramtres

dans le formulaire
<INPUT type=text name=nom />

dans la mthode doXXX()


String n = request.getParameter(nom);

Prof. Asmaa El Hannani

ISIC/S3

340

Donnes passes dans lURL


Exemple : AffichParam

Prof. Asmaa El Hannani

20

ISIC/S3

341

Donnes passes dans lURL


Exemple : AffichParam

Prof. Asmaa El Hannani

ISIC/S3

342

Traitement des donnes dun formulaire


Exemple : AffichForm

Chemin relatif
vers le servlet

Prof. Asmaa El Hannani

21

ISIC/S3

343

Traitement des donnes dun formulaire


Exemple : AffichForm

Prof. Asmaa El Hannani

ISIC/S3

344

Traitement des donnes dun formulaire


Exemple : AffichForm

Prof. Asmaa El Hannani

22

ISIC/S3

345

Traitement des donnes dun formulaire


Exemple : AffichForm

Prof. Asmaa El Hannani

ISIC/S3

tat dun servlet

23

346

HTTP: protocole sans tats

HTTP gre les paires requte/rponse

ouverture
requte
rponse
fermeture

HTTP: protocole sans tats

aucun historique des diffrentes requtes nest conserv


les requtes sont totalement indpendantes les unes des autres

Prof. Asmaa El Hannani

ISIC/S3

348

La gestion des tats

Une application Web a besoin de savoir

quel utilisateur a mis la requte


les requtes dj mises par cet utilisateur
ltat gnral actuel de lapplication

nombre de visites, nombre de produits vendus, consults,

Il faut rajouter HTTP un mcanisme de gestion des tats

Prof. Asmaa El Hannani

24

ISIC/S3

349

Techniques de mmorisation

Diffrentes techniques pour changer les


didentification de la session dans chaque requte:

cookies

rcriture dURL

champ de formulaire cach (hidden)

utilisation des sessions grce HttpSession

Prof. Asmaa El Hannani

Les cookies

25

ISIC/S3

donnes

350

Quest-ce quun cookie ?

Fragment dinformation textuelle chang entre le client et le


serveur Web

collection de paires nom/valeur


chargs dans la mmoire du client
un cookie permanent est sauvegard dans un fichier texte sur le
client
partie de lentte HTTP

Utilis pour mmoriser les prfrences de lutilisateur, ou


mme lidentifier.

Dsactivable

Prof. Asmaa El Hannani

ISIC/S3

353

ISIC/S3

354

Anatomie

Prof. Asmaa El Hannani

26

Cookie et scurit ?

Jamais interprt ou excut: pas de virus

Un cookie est limit 4KB et les navigateurs se limitent 300


cookies (20 par site): pas de surcharge de disque

Bien pour rendre prives des donnes non sensibles

nom, adresse, mais pas numro CB

Ne constitue pas un traitement srieux de la scurit

Prof. Asmaa El Hannani

ISIC/S3

355

Utiliser des cookies

Pris en charge par javax.servlet.http.Cookie


Cette classe construit des cookies avec des paires nom/valeur
public Cookie (String name, String value)

On peut fixer des attributs supplmentaires


void setValue(String val):

dfinit la valeur du cookie

void setMaxAge(int expSec):

nombre de secondes depuis le 01/01/1970,


par dfaut -1 (expire quand on ferme le client),
0 supprime le cookie

Prof. Asmaa El Hannani

27

ISIC/S3

356

Mthodes supplmentaires

void setPath(String path)

void setSecure(boolean flag)

dfinit le chemin

true si SSL, false par dfaut

void setDomain(String domain)

dfinit le domaine

Prof. Asmaa El Hannani

ISIC/S3

357

Envoi de cookie

Mthode addCookie() de la classe HttpServletResponse


public void doGet(HttpServletRequest req,
HttpServletResponse rep) {
Cookie c = new Cookie(nom, toto);
c.setMaxAge(365*24*3600); !// 1an
rep.addCookie(c);
rep.setContentType(text/html);
...
}

Prof. Asmaa El Hannani

28

ISIC/S3

358

Lecture de cookie

Le navigateur envoie automatiquement


correspondant domain et path

Un servlet peut rcuprer les cookies envoys prcdemment


au navigateur

les

cookies

mthode getCookies() de HttpServletRequest


public Cookie[] getCookies()

Prof. Asmaa El Hannani

ISIC/S3

359

Lecture de cookie (2)

Pour rechercher un cookie particulier, il faut parcourir le


tableau et rechercher le cookie partir de son nom grce la
mthode getName() de l'objet Cookie.
...
Cookie[] cookies = request.getCookies();
String valeur = "";
for(int i=0;i<cookies.length;i++) {
if(cookies[i].getName().equals("nom")) {
valeur=cookies[i].getValue();
}
}
...

Prof. Asmaa El Hannani

29

ISIC/S3

360

Rcriture dURL et
Champs de formulaires cachs

Rcriture dURL

Principe

Avantage

ajouter dans la chane de requte du servlet des informations permettant


didentifier la session
http://host/path/file?sessionid=1234&uid=elhannani
il est accd par chaque servlet mentionn qui rcupre les informations
persistantes (SGBD, fichiers) partir de cet ID
fonctionne mme si les cookies sont dsactivs

Inconvnients

encodage des URLs (donnes visibles, caractres autoriss, longueur)


toutes les pages sont dynamiquement gnres
pas de bookmarks possibles

Prof. Asmaa El Hannani

30

ISIC/S3

362

Champs de formulaires cachs

Principe

On cache les donnes de session dans les champs hidden


<INPUT TYPE=HIDDEN NAME=uid VALUE=elhannani

Avantage

fonctionne mme si les cookies sont dsactivs

Inconvnients

beaucoup de travail
toutes les pages doivent tre le rsultat de soumission de
formulaires

Prof. Asmaa El Hannani

Les sessions

31

ISIC/S3

363

Les sessions

Dfinition dune session

une srie dinteractions lies entre un client et un serveur Web


englobe plusieurs requtes HTTP sur une priode donne

Utilises pour mmoriser les actions (requtes HTTP) dun


utilisateur unique au cours du temps

exemple: oprations bancaires, caddie,

Prof. Asmaa El Hannani

ISIC/S3

365

Linterface HttpSession

Les objets HttpSession mmorisent les donnes de chaque


utilisateur.

Fonctionnement similaire une table de hachage stocke sur le


serveur.

A chaque ID de session est associ, via la table de hachage,


lensemble des informations de la session.

Les objets session rsident sur le serveur, et cest lobjet


request qui maintient les informations

Les sessions sont automatiquement associes au client via les


cookies ou la rcriture dURL.

Prof. Asmaa El Hannani

32

ISIC/S3

366

Comportement de base des sessions

Accs lobjet session

Extraire les informations associes une session

appel getAttribute sur lobjet HttpSession, rcuprer la valeur,


vrifier si le rsultat est nul

Mmoriser les informations de la session

appel request.getSession pour recevoir un objet HttpSession


(table de hachage associe lutilisateur)

utiliser setAttribute avec une cl et une valeur

Supprimer les donnes de la session

removeAttribute supprime une valeur


invalidate pour annuler une session
logout pour dloguer le client de lapplication Web

Prof. Asmaa El Hannani

ISIC/S3

367

Obtenir lobjet session

Deux mthodes de HttpServletRequest


HttpSession getSession()

retourne la session courante, si elle nexiste pas, elle est cre

HttpSession getSession(boolean create)

idem sauf que la session nest cre que si create=true, sinonretourne


null

Prof. Asmaa El Hannani

33

ISIC/S3

368

Mmoriser et extraire les donnes

Une fois la session obtenue, on peut mmoriser et extraire les


donnes grce aux mthodes de HttpSession.
void setAttribute(String name, Object val)
Object getAttribute(String name)

Prof. Asmaa El Hannani

ISIC/S3

369

Mmoriser et extraire les donnes


Exemple: HttpSessionServlet

Exemple

Prof. Asmaa El Hannani

34

ISIC/S3

370

Mthodes de HttpServletRequest

isRequestedSessionIdValid()

isRequestedSessionIdFromCookie()

vrai si lID de la session provient dun cookie

isRequestedSessionIdFromURL()

vrai si lID de la session est valide dans le contexte courant

vrai si lID de la session provient dun URL

getRequestedSessionId()

retourne lID de la session

Prof. Asmaa El Hannani

ISIC/S3

371

Mthodes de HttpSession

isNew()

invalidate()

retourne lintervalle maximal dinactivit en secondes

setMaxInactiveInterval()

invalide la session et supprime les associations nom/valeur

getMaxInactiveInterval()

vrai si nouvelle session

dfinit lintervalle maximal dinactivit en secondes

getId

retourne lidentifiant de la session

Prof. Asmaa El Hannani

35

ISIC/S3

372

Vous aimerez peut-être aussi