Cours-Gratuit
  • Accueil
  • Blog
  • Cours informatique
home icon Cours gratuits » Cours informatique » Cours développement web

Formation avancée en programmation web java

Formation avancée en programmation web java
Participez au vote ☆☆☆☆☆★★★★★
Serge Rosmorduc
2013-2014
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
1 / 23

Premi `ere partie I
Compl ´ements
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
2 / 23

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
<a href="/supprimer&id=6">detruire</a>
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
3 / 23

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.
Utilisation de request.sendRedirect( )
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
4 / 23

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.
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
5 / 23

Deuxi `eme partie II
Beans
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
6 / 23

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.
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
7 / 23

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 :
1
${monBean}
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
8 / 23

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.
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
9 / 23

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.
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
10 / 23

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
}
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
11 / 23

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>
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
12 / 23

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
}
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
13 / 23

Troisi `eme partie III
Suppression du Java dans les JSP
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
14 / 23

Expression Language
Dans les JSP, ´ecrites entre ${ .}
L’op ´erateur  a.b  a 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 :
1
p r i x TTC : ${ f a c t u r e . montant ? 19.6}
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
15 / 23

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 ${}
paramValues : valeur des param `etres. `
A utiliser pour les param `etres
multi-valu ´es (r ´esultat de s ´elections multiples).
cookie : permet l’acc `es aux cookies.
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
16 / 23

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.
´eventuellement ajouter la biblioth `eque JSTL 1.1 `a votre projet.
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
17 / 23

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>
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
18 / 23

Boucles en JSTL
boucle forEach.
Une variable dont le nom est donn ´e par  var=  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 } ” b e g i n = ” 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 ” b e g i n = ” 0 ” end = ” 1 2 ” s t e p =”3” >
18
${ i }
19
</c : forEach>
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
19 / 23

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 >
6
</c : choose>
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
20 / 23

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).
solution : transformer les < et > en caract `eres normaux.
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
21 / 23

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 ;
Tr `es laid `a l’affichage, mais inoffensif.
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
22 / 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
session.removeAttribute("utilisateur") ;
Serge Rosmorduc ()
Java intensifProgrammation Web
2013-2014
23 / 23

Document Outline

  • Compléments
  • Beans
  • Suppression du Java dans les JSP

Decouvrir ces documents

  • Initiation à a programmation orienté objet avec le langage C++

    Initiation à a programmation orienté objet avec le langage C++

  • Algorithmique avancée formation

    Algorithmique avancée formation

  • La finance islamique formation avancee

    La finance islamique formation avancee

  • Java guide de formation complet pour apprendre les bases de programmation

    Java guide de formation complet pour apprendre les bases de programmation

  • Les bases de la finance comportementale formation avancee

    Les bases de la finance comportementale formation avancee

  • Cours pour commencer le JAVA

    Cours pour commencer le JAVA

  • Cours programmation objet et JAVA avec exemples

    Cours programmation objet et JAVA avec exemples

  • Apprendre les bases de la programmation avec le langage Java

    Apprendre les bases de la programmation avec le langage Java

Articles connexes

  • Série d'exercices Java sur la programmation orienté objet POO
  • Comment coder pour les débutants
  • Formation de conducteur de bus : les bonnes adresses
  • 5 conseils pour devenir un expert en informatique?
  • Exercice java algorithme programme jeu de puissance 4
  • Tutoriel Python : Notions de base
  • Formation en acupuncture : les critères de sélection
  • Exercice liste chainée générique JAVA - Structures de données abstraites
  • Contactez-nous
  • A propos de nous
  • On recrute
  • Rechercher dans le site
  • Politique de confidentialité
  • Droit d'auteur/Copyright
  • Conditions générales d'utilisation
  • Plan du site
  • Accueil
  • Blog
  • Finance et compta.
  • Formations Pro.
  • Logiciels & Apps
  • Organisation
  • Cours informatique
  • Aide à la rédaction
  • Etudes et Metiers
  • Science et Tech
  • Titans de la Tech
id 11354 02