• Aucun résultat trouvé

[PDF] Formation avancée en programmation web java pdf | Cours Informatique

N/A
N/A
Protected

Academic year: 2021

Partager "[PDF] Formation avancée en programmation web java pdf | Cours Informatique"

Copied!
23
0
0

Texte intégral

(1)

Java intensif

Programmation Web

Serge Rosmorduc

(2)

Premi `ere partie I

(3)

Retour sur GET et POST

Usage correct de GET et POST :

GET :bookmarkable, r ´ep ´etable, plus ou moins public :

particuli `erement adapt ´e pour la r ´ecup ´eration d’information ; POST : a priori non r ´ep ´etable, non bookmarkable : adapt ´e pour la modification d’information.

attention aux robots d’indexation : que ferait un robot sur une lien comme

(4)

Post et redirection

Probl `eme de r ´ep ´etition d’un POST lors d’un rechargement de page : modification effectu ´ee deux fois ?

Produit command ´e deux fois au lieu d’une, par exemple...

Solution : la page qui affiche le r ´esultat de l’ex ´ecution du POST ne doit pas ˆetre celle qui l’a trait ´e.

(5)

Exemple

1 @WebServlet ( name = ” Supprimer ” , u r l P a t t e r n s = { ” / s u p p r i m e r ” } ) 2 p ub li c class S u p p r i m e r P r o d u i t extends H t t p S e r v l e t {

3 @Override

4 protected void doPost ( . . . ) {

5 i n t i d = I n t e g e r . p a r s e I n t ( req . getParameter ( ” i d ” ) ) ; 6 BaseDeDonnee . g e t I n s t a n c e ( ) . s u p p r i m e r ( i d ) ; 7 resp . s e n d R e d i r e c t ( ” messageSuppression& i d = ” + i d ) ; 8 } 9 10 }

On charge la page /supprimer, en passant en mode POST l’id de l’ ´el ´ement `a supprimer (par exemple 144) ;

on supprime l’ ´el ´ement 144 ;

la servlet envoie une redirection : elle demande au navigateur client de charger (en mode GET) une nouvelle page,

/messageSuppression&id=144, qui affichera un message confirmant la suppression.

recharger cette page l `a se contentera d’afficher `a nouveau le message.

(6)

Deuxi `eme partie II

(7)

Beans

Un bean est un objet d’une classe qui :

I dispose d’un constructeur par d ´efaut (on peut parfois s’en passer) ; I utilise des accesseurs ;

I est s ´erialisable (utile pour les beans sessions et application) ;

un bean a un nom et une port ´ee ;

les beans permettent de partager de l’information entre servlets (et jsps) ;

la port ´ee d ´ecrit la dur ´ee de vie du bean :

I request: le bean est oubli ´e `a la fin de l’ex ´ecution de la requ ˆete (communication entre servlet et jsp) ;

I session: le bean est li ´e `a une session utilisateur avec un

navigateur particulier. Il est oubli ´e au bout d’un certain temps, ou `a la fermeture du navigateur.

I application: le bean a une dur ´ee de vie qui est celle de l’application elle-m ˆeme en m ´emoire.

(8)

Beans Request

Permettent `a une Servlet d’envoyer des donn ´ees `a une JSP.

C ˆot ´e Servlet

1 S t r i n g nomBean= . . . ; 2 O b j e c t valeurBean = . . . ;

3 r e q u e s t . s e t A t t r i b u t e ( nomBean , valeurBean ) ;

C ˆot ´e JSP

D ´eclaration optionnelle :

1 <j s p : useBean i d = ” monBean ” class= ” S t r i n g ” scope= ” r e q u e s t ” />

Accessible comme variable monBean dans le code java ou par l’expression language :

(9)

Beans Sessions

Permet de conserver des donn ´ees durant toute la dur ´ee de la connexion de l’utilisateur au site (termine lorsque le navigateur est ferm ´e).

les donn ´ees de sessions sont typiquement conserv ´ees en m ´emoire ;

utilisation : login d’utilisateur, panier `a provisions, etc...

conservation de l’ ´etat de l’application pour l’utilisateur courant. n ´ecessite la cr ´eation d’une session.

(10)

Beans Session, c ˆot ´e Servlet...

1 @WebServlet ( name = ” DemoCompteur ” , u r l P a t t e r n s = { ” / compteur ” } ) 2 p ub li c class DemoCompteur extends H t t p S e r v l e t {

3

4 @Override

5 protected void doGet ( . . . ) {

6 H t t p S e s s i o n s e s s i o n = req . g e t S e s s i o n ( ) ;

7 Compteur c p t = ( Compteur ) s e s s i o n . g e t A t t r i b u t e ( ” compteur ” ) ; 8 i f ( c p t == n u l l ) {

9 c p t = new Compteur ( ) ;

10 s e s s i o n . s e t A t t r i b u t e ( ” compteur ” , c p t ) ;

11 }

12 c p t . i n c r e m e n t e r ( ) ;

13 req . g e t R e q u e s t D i s p a t c h e r ( ” /WEB−INF / j s p / compteur . j s p ” )

14 . f o r w a r d ( req , resp ) ;

15 }

16 }

getSession()cr ´ee la session si elle n’existe pas ;

Variante de getSession avec un bool ´een comme argument : cr ´ee la session uniquement si l’argument est `a true.

(11)

Beans Session, le bean lui-m ˆeme

1 p ub li c class Compteur implements S e r i a l i z a b l e {

2 3 p r i v a t e i n t v a l e u r = 0 ; 4 5 p ub li c void i n c r e m e n t e r ( ) { 6 v a l e u r ++; 7 } 8 9 p ub li c i n t g e t V a l e u r ( ) { 10 r e t u r n v a l e u r ; 11 } 12 }

(12)

Beans Session, JSP

1 <!DOCTYPE html> 2 <html> 3 <head> 4 <t i t l e >JSP Page</ t i t l e > 5 </head> 6 <body> 7 <h1>Compteur ${ compteur . v a l e u r } </h1> 8 </body> 9 </ html>

(13)

Beans Application

Dur ´ee de vie : l’application ;

Usage : pour ´eviter de charger des donn ´ees trop fr ´equemment (catalogue de produits....) ;

Utilisation a priori en multit ˆache : d ´elicate ; utiliser avec pr ´ecaution.

1 @WebServlet ( name = ” CApp ” , u r l P a t t e r n s = { ” / c o m p t e u r A p p l i c a t i o n ” } ) 2 p ub li c class C o m p t e u r A p p l i c a t i o n extends H t t p S e r v l e t {

3

4 @Override

5 protected void doGet ( . . . ) {

6 Compteur c p t = ( Compteur )

7 req . g e t S e r v l e t C o n t e x t ( ) . g e t A t t r i b u t e ( ” cptApp ” ) ; 8 i f ( c p t == n u l l ) {

9 req . g e t S e r v l e t C o n t e x t ( )

10 . s e t A t t r i b u t e ( ” cptApp ” , new Compteur ( ) ) ;

11 }

12 . . .

13 }

(14)

Troisi `eme partie III

(15)

Expression Language

Dans les JSP, ´ecrites entre ${....}

L’op ´erateura.ba des effets vari ´es selon le type de a.

I si a est une Map, a.b ⇔ a.get(b) I si a est un objet, a.b ⇔ a.getB()

I si a est un tableau a.b ⇔ a[b] (ex. ${tab.3}

On peut utiliser.en cascade :

1 <p> rue ${ f a c t u r e . adresse . rue } . . . .

Le langage d’expression est aussi utilisable pour des calculs :

(16)

Expression Language (suite)

Op ´erateurs

empty: savoir si un bean est d ´efini ou non. ${empty facture}

Leftrightarrow y-a-t-il un bean facture ? op ´erateurs arithm ´etiques :+, -, *, /, % ; op ´erateurs logiques : and, or, not ;

comparaisons : eq (equal), ne (not equal), lt (less than), gt (greater than), ge (greater or equal), le (lesser or equal)

variables pr ´ed ´efinies

param : valeur des param `etres. `A utiliser pour les param `etres mono-valu ´es ; par exemple ${param.nom}

paramValues : valeur des param `etres. `A utiliser pour les param `etres multi-valu ´es (r ´esultat de s ´elections multiples).

(17)

JSTL

Java Standard Tags Library ;

jeu de tags pour remplacer la plupart des constructions java dans les JSP ;

travaille de tr `es pr `es avec l’expression language. Utilisation : mettre la ligne

1 <%@ t a g l i b p r e f i x = ” c ” u r i = ” h t t p : / / j a v a . sun . com / j s p / j s t l / core ” %>

vers le d ´ebut du fichier jsp.

(18)

Comparez

Sans JSTL

1 <% f o r ( i n t i = 0 ; i < f a c t u r e . g e t L i g n e s ( ) . s i z e ( ) ; i ++) { 2 sit eMarch and . d t o . L i g n e F a c t u r e l i g n e =

3 ( si teMarc hand . d t o . L i g n e F a c t u r e ) f a c t u r e . g e t L i g n e s ( ) . g e t ( i ) ; 4 %> 5 <l i > <%= l i g n e . g e t A r t i c l e ( ) . g e t D e s i g n a t i o n ( ) %>, 6 q t ´e : <%= l i g n e . g e t Q u a n t i t e ( ) %> 7 <% 8 } 9 %> Avec JSTL 1 <c : f o r E a c h v a r = ” l i g n e ” i t e m s = ” ${ f a c t u r e . l i g n e s } ”> 2 <l i > ${ l i g n e . a r t i c l e . d e s i g n a t i o n } , q t ´e : ${ l i g n e . q u a n t i t e }</ l i > 3 </c : forEach>

(19)

Boucles en JSTL

boucle forEach.

Une variable dont le nom est donn ´e parvar=prend une s ´erie

de valeurs.

1 Parcours d ’ une l i s t e `a p a r t i r de l ’ ´el ´ement num ´ero 4 : 2 3 <u l > 4 <c : f o r E a c h v a r = ” e ” i t e m s = ” ${ p r o m o t i o n } ” beg in = ” 4 ”> 5 <l i > ${e} </ l i > 6 </c : forEach> 7 </ u l > 8

9 Parcours d ’ une map : 10 <u l >

11 <c : f o r E a c h v a r = ” a ” i t e m s = ” ${param}”> 12 <l i > ${a . key } : ${a . v a l u e }</ l i > 13 </c : forEach> 14 </ u l > 15 16 Num ´erique : a f f i c h e 0 3 6 9 12 17 <c : f o r E a c h v a r = ” i ” be gin = ” 0 ” end = ” 1 2 ” s t e p =”3” > 18 ${ i } 19 </c : forEach>

(20)

Test en JSTL

If (sans else) 1 <!−− A f f i c h e r s i l e bean ” c a t a l o g u e ” e s t p r ´e s e n t −−> 2 <c :i f t e s t = ” ${ n o t empty c a t a l o g u e } ”> 3 V o i c i l e c a t a l o g u e : 4 . . . 5 </c :i f > choose/when/otherwise Test complet : 1 <c : choose> 2 <c : when t e s t = ” ${ s e c u r i t e eq ’ a d m i n i s t r a t e u r ’ } ”> . . . </c : when> 3 <c : when t e s t = ” ${ s e c u r i t e eq ’ u t i l i s a t e u r ’ } ”> . . . </c : when> 4 <c : when t e s t = ” ${ s e c u r i t e eq ’ i n v i t e ’ } ”> . . . </c : when> 5 <c : o t h e r w i s e> D ´esol ´e </c : o t h e r w i s e>

(21)

Protection contre le XSS

Pourquoi : ´eviter les injections de Javascript. le code

1 <h1> Message </h1> <p> ${message}</p>

est dangereux :

un utilisateur a entr ´e comme message :

1 <SCRIPT language= ” J a v a s c r i p t ”>

2 document . l o c a t i o n . h r e f = ” h t t p : / / s i t e P i r a t e . com ” 3 </SCRIPT>

le javascript est charg ´e, ex ´ecut ´e, et le lecteur envoy ´e du le site pirate : XSS (Cross Site Scripting).

(22)

Protection contre le XSS

Solution : la balise <c:out value="..."> le code devient

1 <h1> Message </h1> <p> <c : o u t v a l u e = ” ${message} ” /></p>

sortie :

1 <h1> Message </h1>

2 & l t ; SCRIPT language =&#034; J a v a s c r i p t &#034;& g t ;

3 document . l o c a t i o n . h r e f =&#034; h t t p : / / www. cnam . f r &#034; ; 4 & l t ; / SCRIPT&g t ;

(23)

Gestion d’utilisateur et identification

si l’utilisateur essaie de r ´ealiser une t ˆache interdite, on l’envoie sur le formulaire de login ;

lors du login, si le couple login/password est correct, on place l’objet utilisateur en session ;

pour v ´erifier la connexion, on regarde s’il y a un objet utilisateur dans la session ;

d ´econnexion : on peut utiliser

Références

Documents relatifs

Mean a nd standar d deviation are presen ted for BB (as there is one p assw ord p er user), “Y” stands for “y es” and “N” stands for “no”.. Table 6: Comparison and ranking

The authors in [16] analyzed the ergodic MIMO capacity taking into account the presence of spatial fading correlation, double scattering, and keyhole effects in the

Elles favorisent notamment le rapprochement entre universités et grandes écoles : sept des neuf PRES constitués (UniverSud Paris, Université de Lyon, Université de Toulouse,

Pour l'alimenter, certaines représentations sociales entrent indéniablement en consonance avec des pratiques de déplacement moins énergivores et allant dans le sens d'une

Figure 2: Experimental time traces when external optical feedback is applied to the QCL and with a sine periodic forcing of the bias DC current of : 2 MHz (b), 2.7 MHz (c); trace

Abstract: This work shows that p-doped quantum dot lasers grown on silicon exhibit a low linewidth enhancement factor and hence a high resistance against optical feedback which

Si on se limite aux jeunes non incorporés qui ont répondu à la fois au premier et au deuxième questionnaire, la différence de taux d’emploi avec les jeunes incorporés

On remarque pour finir que des noms comme calme ou tranquillité, qui n’acceptent ni être en ni avoir, et dont il n’a encore rien été dit, affectent tout de même à leur sujet