Escolar Documentos
Profissional Documentos
Cultura Documentos
Huitime partie
Pr Hafidi Imad
Hafidi Imad -ENSA de Khouribga-Cours JAVA
imad.hafidi@gmail.com
Application WEB
Architecture
3 niveaux : niveau 1: prsentation navigateur serveur !eb niveau 2: applicatif s"ri#t ou #rogramme niveau 3: donnes donn$es n$"essaires au niveau %
Droulement
&ne a##'i"ation !eb t(#e :
): re"uei''e 'es donn$es uti'isateur *niveau )+ %: envoie une re,u-te au serveur !eb 3: ex$"ute 'e #rogramme serveur re,uis *niveau %.3+ /: assemb'e0renvoie 'es donn$es vers 'e navigateur *niveau )+
Hafidi Imad -ENSA de Khouribga-Cours JAVA
Collecte des donnes des utilisateurs 1ue',ues so'utions #our 'e "'ient :
sim#'es : formu'aire H234
saisie de "ham#s #uis 5 submit 6 va'idation #ar s"ri#ts *7avaS"ri#t+
re,u-te >E2 :
#our extraire des informations sur 'e serveur int?gre 'es donn$es de formatage < ' ;&94
htt#:00@@@:3onSite:"om0serv'et0he''o?ke 1! value1"#
re,u-te ABS2 :
#our modifier 'es donn$es sur 'e serveur donn$es de 'a #age assemb'$es0envo($es vers 'e serveur
Hafidi Imad -ENSA de Khouribga-Cours JAVA
'er$lets
"istori ue
G$ve'o##ement de #ages en H234 S"ri#ts C>I
Arogrammes C= she'' s"ri#ts= #er'
4angages s#$"ifi,ues
AHA= JSA= ASA *Server Side s"ri#ting+ JavaS"ri#t *C'ient Side S"ri#ting+
Evo'utions de H234
EH234= CSS= JavaS"ri#t
+es 'er$lets
Aermettre 'a #rogrammation dHa##'i"ations "ot$ serveur Aermettre 'Hextension dHun serveur !eb en 7ava Aermettre 'a "onstru"tion dHa##'i !eb d(nami,ue E,uiva'ent des C>I en 7ava
Serveur !eb
Arati,ue
4ibrairie tr?s d$ve'o##$e *moins ,ue AHA mais #'us "onsistante+
Aortab'e
G$#'o(ab'e ,ue',ue soit 'e serveur *ou #res,ue+
S$"uris$
Ion"tionne dans une ma"hine virtue''e *#'us maitrisab'e+
Aas "her
Nombreux serveurs gratuits
+es technologies
4es "ontainers
2om"at *7a8arta:a#a"he:org0tom"at+
Im#'antation de r$f$ren"e
.n premier ser$let
4e serv'et He''o!or'd &n serv'et sur"harge 'a "'asse Htt#Serv'et I' doit im#'anter au moins une des m$thodes
do>et doAost doAut doGe'ete
+e ser$let "elloWorld
+e /ichier de con/iguration
+&application Web
Une archive war Dploye dans le serveur Web Web.xml = description de lapplication
+es param)tres
E%emples param)tres
E%emple P0'#
+a classe "ttp'er$let
StringLM getAarameterVa'ues*+
9etourne un tab'eau "ontenant toutes 'es va'eurs des #aram?tres
StringLM getHeaderVa'ues*+
9etourne un tab'eau de toutes 'es va'eurs du header
+-inter/ace "ttp'er$letResponse
Bb7et fournissant 'es servi"es #our envo(er 'a r$#onse < un "'ient: 4es #rin"i#a'es m$thodes sont:
java.io.PrintWriter getWriter() getWriter
Aour r$"u#$rer un #rint!riter ,ui #ermet dHenvo(er du texte au "'ient
public void setContentLength(int len) setContentLength public void setContentType(java.lang.String type) setContentType
Positionne le Content-Length Header Position le Content-Type header (exemple text/html)
public void sendError(int sc, java.lang.String msg) throws sendError java.io.IOException public void setHeader(java.lang.String name, setHeader java.lang.String value)
Envoi un message d'erreur au client (cf code dans l'API)
web3%ml
4e fi"hier @eb:xm' donne des instru"tions sur 'e d$#'oiement du serv'et dans 'e "ontainer @eb-a##
4a des"ri#tion dHune !eb A##'i"ation
Serv'et
4a re'ation entre 'e nom du serv'et et 'a "'asse ,ui 'Him#'ante
Serv'et-ma##ing
4a re'ation entre 'e nom du serv'et et 'Hur' ,ui #ermet dH( a""$der
N0init-#aramO
E%emple
+e ser$let mapping
Aermet de "onstruire 'a re'ation entre un serv'et et son &94
Nserv'et-ma##ingO
Nserv'et-nameO2estN0serv'et-nameO Nur'-#atternO02est0PN0ur'-#atternO
N0serv'et-ma##ingO
2ous 'es ur's "orres#ondant < htt#:00host:#ort0@eba##0ur'-#attern d$"'en"herons ';ex$"ution du serv'et Exem#'es
0P:do 02est 0"ours0test0P
E%emples
4e serv'et r$#ond aux re,u-tes des "'ients 4e "ontaire d$truit 'e serv'et
4a fon"tion destro(*+ est a##e'$e *fermeture des "onne"tions+
do5et et doPost
Server
HttpServlet subclass
doGet( )
Request
Service( )
Response
doPost( )
Key:
Implemented by subclass
+a $isibilit
*from 7>uru+
Hafidi Imad -ENSA de Khouribga-Cours JAVA
+e 'er$let Conte%t
3aintien des donn$es #our toute ';a##'i"ation Iournit 'e re,uest dis#at"her Gonn$es d;initia'isations #our toute ';a##'i"ation 4og &n Serv'etContext #ar a##'i"ation et #ar JV3
+e 'er$letConte%t
Bb7et #ermettant au serv'et de "ommuni,uer ave" 'e serv'et "ontainer Bbtenu ave"
Serv'et:getServ'etContext*+
+e 'er$let Conte%t
+e Re uestDispatcher
L'objet RequestDispatcher est utilis pour
Transfrer la requte un autre programme Inclure la rponse d'un autre programme
+-utilisation du Re uestDispatcher
4a re,u-te #eut -tre transf$r$e
rd:for@ard*re,uest=res#onse+ 4Huti'isation "'assi,ue "onsiste < avoir un serv'et "ontrD'eur ,ui transmet 'es "ommandes < des serv'ets s#$"ia'is$s 4e "ontrD'e ne revient 7amais au serv'et
E%emple d&utilisation
G$monstration Q
+es 'essions
Comment maintenir ';$tat d;un "'ient au "ours d;une s$rie de re,u-tes d;un m-me uti'isateur #endant un tem#s donn$ R H22A est state'ess Comment identifier 'e "'ient R BC mettre 'es donn$es de 'a session R
'er$let et sessions
4a gestion des sessions uti'ise 'es te"hni,ues "'assi,ues
ur' re@riting Coo8ies Cham#s "a"h$s dans 'es formu'aires
4HAAI Htt#Serv'et fournit des fon"tions #our g$rer 'es sessions 4Him#'antation est trans#arente #our 'Huti'isateur
is9e,uestedSessionIdVa'id*+
Vrai si 'Hid de 'a session est va'ide dans 'e "ontexte "ourant
is9e,uestedSessionIdIromCoo8ie*+
Vrai si 'Hid de 'a session vient dHun "oo8ie
is9e,uestedSessionIdIrom&94*+
Vrai si 'Hid de 'a session vient dHun &94
Cration de la session
+-objet "ttp'ession
4Hob7et Htt#Session #ermet de "onserver des va'eurs entre des a##e's dHun "'ient 4es #rin"i#a'es m$thodes sont
Bb7e"t getAttribute*String name+
9$"u#?re 'a va'eur de 'Hattribut #ar son nom
Enumeration getAttributeNames*+
9etourne 'a 'iste de tous 'es attributs
String getId*+
9etourne 'Hidentifiant de 'a session
Void inva'idate*+
Inva'ide 'a session
N0session-"onfigO
+e conte%te
I' est #ossib'e dHavoir des #aram?tres dHinitia'isation du "ontexte
N"ontext-#aramO
N#aram-nameOdatabaseN0#aram-nameO N#aram-va'ueOtestGUN0#aram-va'ueO Ndes"ri#tionO'e nom de 'a baseN0des"ri#tionO
N0"ontext-#aramO
Ces #aram?tres #euvent -tre uti'is$s dans 'e serv'et ave" 'a m$thode
Javax:serv'et:Serv'etContext getInitAarameter*+ et Javax:serv'et:Serv'etContext:getInitAarameterNames*+
+e 'er$letCon/ig
Bb7et uti'is$ #ar 'e "ontainer de serv'et #our #asser des va'eurs 'ors de 'Hinitia'isation du serv'et Bbtenu ave"
Serv'et:getServ'etConfig*+
Arin"i#a'es m$thodes
String getInitAarameter*String name+
9etourne 'a va'eur dHun #aram?tre dHinitia'isation du serv'et
Serv'etContext getServ'etContext*+
Aermet de r$"u#$rer 'Hob7et serv'et"ontext
String getServ'etName*+
9etourne 'e nom du serv'et "omme s#$"ifi$ dans 'e fi"hier de des"ri#tion:
Gans @eb:xm'
J'P
A'usieurs s#$"ifi"ations
JSA %:T S 'a derni?re
J'P et 'er$lets *
4es deux sont bas$s sur Java 4es Serv'ets sont #eu ada#t$ < 'a g$n$ration de "ontenu 4es JSA sont #eu ada#t$s < 'Hextension de fon"tions du serveur Note : 4e JSA engine ,ui inter#r?te 'es #ages JSA est un Serv'et 4es JSA sont un mo(en de "onstruire des Serv'et de faVon d$"'arative
&n #age JSA est transform$e en un #rogramme 7ava *serv'et+ #uis "om#i'$e et ex$"ut$e
J'P et 'er$lets
Architecture
Js#Gestro(*+
C4cle de $ie
User Request Server File Changed ? Create Source Compile Execute Servlet
Hafidi Imad -ENSA de Khouribga-Cours JAVA
+a s4nta%e de base
4es dire"tives
Instru"tion #our 'e moteur JSA En"adr$es #ar NWX WO
4es d$"'arations
G$"'arations de variab'es ou de m$thodes uti'isab'es dans 'a #age En"adr$es #ar NWQ WO
4es ex#ressions
&n ex#ression est $va'u$e= transform$e en "haine et in"'use dans 'a #age En"adr$es #ar NWS WO
4es s"ri#'ets
3or"eau de "ode 7ava ex$"ut$ dans 'a #age En"adr$s #ar NW WO
+es e%pressions
Une expression est une expression java dont la valeur est calcule, tranforme en String et insre dans la page.
+es dclarations
G$"'arations de variab'es et de fon"tions 'o"a'es < 'a #age *en 7ava+
NWQ int iK WO NWQ int iSTK String textK WO NWQ boo'ean f*int i+ Yreturn *iOT+KZ WO
+es scriplets
Aeuvent "ontenir des fragments de "ode va'ide en 7ava I's sont ex$"ut$s ,uand 'a re,u-te est $va'u$e
NW if *"om#teOT+ Y WO 2u as en"ore des sousF NU9O NW Z e'se Y WO 2u es dans 'e rouge "ette fois NU9O NW Z WO
#age *Sthis+ *#age s"o#e+ : Htt#JSAAage out *#age s"o#e+ : Js#!riter a##'i"ation *a##'i"ation s"o#e+ Serv'etContext "onfig *#age s"o#e+ : Serv'etConfig ex"e#tion *#age s"o#e+ : 2hro@ab'e
G$finit dans 'es #ages de traitement des erreurs
E%emple
+-inter/ace de PageConte%t
Iournit des m$thodes #our retrouver des attributs en suivant 'a visibi'it$
Bb7e"t findAttribute*String name+
9e"her"he un attribut en uti'isant 'Hordre suivant : #age= re,uest= session= a##'i"ation
Iournit aussi des m$thodes #our retrouver toutes 'es informations du "ontexte dHex$"ution de 'a #age *session= 7s#!riter=re,uest= res#onse=F+
Cf AageContext AAI #our 'es d$tai's
'4nta%e 87+
Ge#uis JSA ):%
N7s#:ex#ressionOEx#ressionN07s#:ex#ressionO N7s#:s"ri#t'etO N7s#:de"'arationO
Aermet
4a va'idation 4es transformations 4;$dition
E%emple
jsp9/orward
Js#:for@ard #ermet de "hainer 'es re,u-tes #our invo,uer
&ne autre #age 7s# &n serv'et
Irom 7>uru
Jsp9include
9edirige 'a re,u-te et in"'ut 'e r$su'tat < 'Hendroit oC se trouve 'Ha"tion
N7s#:in"'ude #ageSJ"he"8Uean:7s#J0O Cette a"tion est ex$"ut$e < "ha,ue fois
4Ha"tion ex$"ut$e ne #eut #as modifier 'e Header de 'a #age *#as de "oo8ie ni de t(#e de "ontenu+
.n Ja$aBean
Composant simple. Respecte des conventions dcriture
E%emple .seBean
Autre e%emple
Ja$aBean et J'P
4es a"tion useUean= setAro#ert( et getAro#ert( #ermettent de mani#u'er des JavaUean sans #rogrammation
7s#:usebean #our nommer= "r$er ou d$signer un bean 7s#:getAro#ert( #our r$"u#$rer une #ro#ri$t$ dHun bean 7s#:setAro#ert( #our "hanger 'a va'eur dHune #ro#ri$t$:
+es directi$es
NWX dire"tive YattrSJva'ueJZP WO
3essages #ass$s au moteur de JSA
importSJ7avax:7ms:P="our:test:uti'J
im#ort des t(#es ou des #a"8ages 4es #a"8ages 'ang= serv'et et 7s# sont im#ort$s #ar d$faut
is*+read,afe bufferS)\8
2ai''e du buffer #ar d$faut #our 'e Arint!riter:
auto-lus+SJtrueJ ou Jfa'seJ
Vide 'e buffer automati,uement ,uand 'e buffer est #'ein
In"'ude
Ii'eSJre'ative &94J Ins?re 'e fi"hier "orres#ondant dans 'e fi"hier JSA 4e fi"hier est $va'u$ et "om#i'$ #ageSJtest:htm'^ In"'ut 'a ressour"e sans 'Hinter#r$ter
Hafidi Imad -ENSA de Khouribga-Cours JAVA
+a J'#+
Uut : Sim#'ifier 'H$"riture des #ages 4angage #our 'es auteurs de #ages In"'ut un 'angage dHex#ression #our $viter 'e "ode 7ava :
4angage dHex#ression #our "a'"u'er des va'eurs ContrD'e du f'ot dHex$"ution Va'idateur de 'ibrairie de tags
Aermet des "ontrD'er 'e st('e et 'es 'ibrairies uti'isab'es dans une #age
+a J'#+
JS24S Java Standard 2ag 4ibrar(
Core tags
Sortie= gestion des variab'es= 'ogi,ue= bou"'es= im#ortation de texte
E34 tags
Aarsing= s$'e"tion= ES42= f'ot de "ontrD'e
Gatabase tags
Conne"tion= a""?s= re,u-tes= mises < 7our et transa"tions
Iormattage
4o"a'isation= internationa'isation
+e langage d-e%pression
4e 'angage dHex#ression est invo,u$ #ar
${expr}
page/onte)t donne a""?s aux va'eurs asso"i$es au "ontexte initParams donne a""?s aux #aram?tres dHinitia'isation +eaderValues donne a""?s aux #ro#ri$t$s du header
Beans et Collection
4Ha""?s aux #ro#ri$t$s dHun bean se fait #ar un notation #oint$e
_Y"d:titreZ _Y#ersonne:adresse:vi''eZ
Aour 'es "o''e"tions *3a#= 4ist= Arra(+ on #eut uti'iser 'a notation
mesCGLiM si mesCG est un tab'eau mesCGL"d:titreM si "Hest une 3a# ave" 'e titre "omme "'$
+es oprateurs
Bn dis#ose de tous 'es o#$rateurs "'assi,ues
=-=P=0= mod= SS ou e,= QS ou ne= N ou 't= O ou gt *#our $viter 'es sou"is ave" E34 em#t( #our v$rifier si une variab'e est nu''e ou vide
4es "onversions de t(#es sont automati,ues dans 'es ex#ressions en fon"tion des besoins
":set affe"te 'a va'eur dHune variab'e dans 'e "ontexte "ourant
N":set varSJtestJ va'ueSJ"a mar"he RJ s"o#eSJre,uestJ0O 4a va'eur #eut -tre aussi "a'"u'$e dans 'e bod( N":set varSJtest%O
Nex:"a'" #aram)SJ#ouetJ0O
N0":setO Aeut -tre aussi uti'is$ #our "hanger 'a va'eur dHune #ro#ri$t$ dHun bean N":set targetS_Y"dZ #ro#ert(SJtitreJ va'ueSJ3e``anineJ0O Aeut -tre aussi uti'is$ #our a7outer un $'$ment dans une "o''e"tion N":set targetS_Ym(CGZ #ro#ert(S_Y"d:titreZ va'ueS_Y"dZ0O
N0":"at"hO N":if testS^_Yex"e#tion QS nu''Z^O I' ( a eu un sou"i N0":ifO Attention Va ne rem#'a"e #as 'e traitement norma' des erreurs
+es conditionnelles
4es "onditions sim#'es
N":if testSJ_Y"d:anneeN)aaTZJO CHest un vieux dis,ue N0":ifO
N0":@henO F N":other@iseO
Ueuh R
N0":other@iseO
N0":"hooseO
+es ;terateurs
":forEa"h r$#$te une a"tion #our tous 'es $'$ments dHune "o''e"tion
Ntab'eO N":forEa"h varS^"d^ itemsS^_Ym(CGZ^O NtrONtdON":out va'ueS^_Y"d:titreZ^0ON0tdON0trO N0":forEa"hO N0tab'eO
N0":for2o8ensO
7VC
3ode'
' ;a##'i"ation m$tier= 'es donn$esF "e ,ui est mani#u'$ #ar ' ;a##'i"ation:
Vie@
#r$sentation de ' ;$tat du mod?'e *g$n$ra'ement < un uti'isateur+
Contro''er
interfa"e d ;a"tion sur 'e mod?'e
*#ar exem#'e= #our 'es mises < 7our+
(Controller) Servlet
te tia an st In
BROWSER
5
Res pons e
Redirect
(View) JSP
Servlet Container
(EIS)
7odel
4e "ontro'eur #rend en "harge 'a re,u-te I' effe"tue 'es "ontrD'es et 'es a"tions I' s$'e"tionne 'a vue 4e serv'et sert de
Ii'tre *erreur= s$"urit$+ Contro'eur *dis#at"hing= a"tions= redire"tion+
E%emple simple
E%emple suite