Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Plan du cours
Conception d'un
d'un s ite WEB
1
u Historique
u HyperDocuments
u Site Web
u Atelier de développement
u Pages statiques : langage HTML
u Programmation C G I :
: langage Perl
u Pages dynamiques : J avas
avascc ri pt
Historique
Conception d'un
d'un s ite WEB
2
HyperDocuments
Conception d'un
d'un s ite WEB
3
Navigateurs célèbres
Conception d'un
d'un s ite WEB
4
u Un roman se lit :
:
l les pages se suivent,
l quelques notes de bas de page,
l une table des matière très sommaire.
u Un rappo
rapport
rt te
techni
chni que se consulte :
l les pages se suivent,
l des notes de bas de page,
l des renvois dans le document (texte, figures...),
l des renvois en annexe,
l une table des matières fournie,
l un index,
l une bibliographie (renvois hors du texte).
Documents interactifs
Conception d'un
d'un s ite WEB
7
u Quelques constatations :
l un écran est petit (en général),
l lire un écran est pénible,
l changer d'écran est rapide.
u Certains documents gagnent à être interactifs :
l notices techniques,
l documents de présentation,
l documentations commerciales.
u Certains documents ne peuvent pas être interactifs :
l documents de réflexion.
Structure d'un
Conception d'un
d'un s ite WEB
hyperdocument
9
u Un docu
document
ment Web est repéré par son UR L (Unique
Ressource Location).
u URL la plus simple :
protocole://serveur/
u URL courante :
protocole://serveur/repert/.../document
protocole://serveur/repert/.../document
u Quelques exemples :
http://www.inria.fr/
http://www.ti.com/
http://www.yahoo.com/
http://verdon.unice.fr/~jdem/
racine de l'hôte
/
local ...
... etc
racine du serveur
... htdocs
espace du serveur
Serveur
de pages
domaine
domaine
Serveur
"proxy"
Serveur
Client de noms
(DNS)
HTTP
HTTP : protoc
protocol
ole
e d'é
d'éch
chan
ange
ge de do
docu
cume
ment
nts
s HTM
HTML
L
(HyperText Transfert Protocol)
FTP
FTP: proto
pro toco
cole
le d'
d'éc
écha
han
nge de fi
fich
chie
iers
rs que
uelc
lco
onq
nque
ues
s
(File Transfert Protocol).
SMTP
SMTP : prot
protoc
ocol
ole
e d'é
d'éch
chan
ange
ge de co
cour
urri
rier
er él
élec
ectr
tron
oniq
ique
ue..
TELNET
TELNET : proto
protocole
cole de
de connexion
connexion à distance.
distance.
Atelier de développement
Conception d'un
d'un s ite WEB
16
Outils HTML
Conception d'un
d'un s ite WEB
17
Outils de dessin
Conception d'un
d'un s ite WEB
18
Outils de validation
Conception d'un
d'un s ite WEB
19
Outil de connexion à
Conception d'un
d'un s ite WEB
distance
21
Le langage HTML
Conception d'un
d'un s ite WEB
22
En-tête de document
Conception d'un
d'un s ite WEB
24
<HTML>
<HTML>
<HEAD>
<HEAD>
<TITLE>Ma
<TITLE>Ma premiè
première
re page</TITLE>
première page</TITLE>
</HEAD>
</HEAD>
<BODY>
<BODY>
Ma
Ma premiè
premi ère
re page
première page Web.
Web.
</BODY>
</BODY>
</HTML>
</HTML>
Et pour la voir ?
Conception d'un
d'un s ite WEB
26
textes) : un éditeur de
utilisant de textes (pas un traitement de
l EDIT de DOS
l NOTEPAD de Windows 3.x
l WORDPAD de Windows 95 (en mode texte).
u Cette page est, par exemple, la page d'accueil de
votre futur service :
l la sauvegarder sous le nom index.html dans le répertoire qui
servira de racine à la maquette de votre service.
u Utiliser un navigateur, hors connexion, en simple
consultation de fichier local.
La voici !
Conception d'un
d'un s ite WEB
27
Son titre
Quelques précisions
Conception d'un
d'un s ite WEB
28
Caractères spéciaux
Conception d'un
d'un s ite WEB
29
Paragraphes...
Conception d'un
d'un s ite WEB
30
paragraphe par
navigateur nonpure g enti
entilles
signalé. Illless
s e carla
faudrait elle contient
décrire par un
:
<!DOCTYPE
<!DOCTYPE HTML
HTML PUBLIC
PUBLIC "-//W3C//DTD
"-//W3C//DTD HTML
HTML 3.2
3.2
Final//EN">
Final//EN">
<HTML>
<HTML>
<HEAD>
<HEAD>
<TITLE>Ma
<TITLE>Ma première
première page</TITLE>
</HEAD>
</HEAD>
<BODY>
<BODY>
<P>Ma
<P> Ma première
<P>Ma première page
page Web.</P>
Web.</P>
Web.</P>
</BODY>
</BODY>
</HTML>
</HTML>
J ean DE MAR TIN I © 14.02.00
...Paragraphes
Conception d'un
d'un s ite WEB
31
<HTML>
<HTML>
<HEAD>
<HEAD>
<TITLE>Ma
<TITLE>Ma première
première page</TITLE>
</HEAD>
</HEAD>
<BODY>
<BODY>
<P>Ma
<P>Ma première
première page
page Web.</P>
Web.</P>
<P>Un
<P>Un deuxième
deuxième paragraphe
paragraphe permet
permet
de
de la
la meubler
meubler un
un peu.</P>
peu.</P>
</BODY>
</BODY>
</HTML>
</HTML>
Que voici
Conception d'un
d'un s ite WEB
33
Les paragraphes
Titres de paragraphes...
Conception d'un
d'un s ite WEB
35
<BODY>
<BODY>
<H1
<H1 ALIGN="LEFT">Niveau
ALIGN="LEFT">Niveau 1</H1>
1</H1>
<H2
<H2 ALIGN="CENTER">Niveau
ALIGN="CENTER">Niveau 2</H2>
2</H2>
<H3
<H3 ALIGN="RIGHT">Niveau
ALIGN="RIGHT">Niveau 3</H3>
3</H3>
<H4
<H4 ALIGN="JUSTIFY">Niveau 44 :: Ce
ALIGN="JUSTIFY">Niveau Ce titre
titre est
est
censé être
censé être
justifié.</H4>
justifié.</H4>
</BODY>
</BODY>
...Titres de paragraphes
Conception d'un
d'un s ite WEB
36
Styles de paragraphes...
Conception d'un
d'un s ite WEB
37
<BODY>
<BODY>
<P
<P ALIGN="LEFT"
ALIGN="LEFT">On
>On the night of 3rd December
ALIGN="LEFT">On
the
the
<P
<P ALIGN="CENTER"
ALIGN="CENTER">On
>On the night of 3rd December
ALIGN="CENTER">On
<P
<P ALIGN="RIGHT"
ALIGN="RIGHT">On
>On the night of 3rd December
ALIGN="RIGHT">On
th
th
</BODY>
</BODY>
...Styles de paragraphes
Conception d'un
d'un s ite WEB
38
Quelques décorations
Conception d'un
d'un s ite WEB
39
Ou bien cela !
Conception d'un
d'un s ite WEB
41
Multicolonnage
Conception d'un
d'un s ite WEB
42
<BODY>
<BODY>
<MULTICOL
<MULTICOL COLS="2"
COLS="2" WIDTH="100%"
WIDTH="100%" GUTTER="10">
GUTTER="10">
<P ALIGN="JUSTIFY">Sans
<P ALIGN="JUSTIFY">Sans doute les
les notes
notes que
que nous
nous entendons
entendons
<P
<P ALIGN="RIGHT"><I>Du
ALIGN="RIGHT"><I>Du côté
côté de
de chez
chez Swann
Swann -- M
M
</MULTICOL>
</MULTICOL>
</BODY>
</BODY>
Ou bien cela
Conception d'un
d'un s ite WEB
44
Styles physiques
Conception d'un
d'un s ite WEB
45
Ce qui donne
Conception d'un
d'un s ite WEB
46
Styles logiques
Conception d'un
d'un s ite WEB
47
<P>Cette
<P>Cette portion
portion de
de texte, <STRONG>j'insiste</STRONG>
<STRONG>j'insiste</STRONG>,
<STRONG>j'insiste</STRONG>,, ne
<EM>doit
<EM>doit pas
pas être
être négligée</EM>.
négligée</EM>
négligée</EM>.. SunSun Tse
Tse dit
:</P>
:</P>
<P><BLOCKQUOTE>Prenez
<P> <BLOCKQUOTE>Prenez
<P><BLOCKQUOTE>Prenez
<P><BLOCKQUOTE> Prenez le nom de tous
tous vos officiers, inscrivez-
les
les sur
sur un
un répertoire spécial avec l'indication de de leurs
capacités
capacités et et de
de leurs
leurs aptitudes,
aptitudes, afin
afin que
que chacun
chacun soit
soit
employé
employé suivant
suivant ses
ses qualités.</BLOCKQUOTE
qualités.</BLOCKQUOTE>
></P>
qualités.</BLOCKQUOTE></P>
qualités.</BLOCKQUOTE> </P>
J ean DE MAR TIN I © 14.02.00
Les listes
Conception d'un
d'un s ite WEB
49
Listes à puces
Conception d'un
d'un s ite WEB
50
<MULTICOL
<MULTICOL COLS="2"
COLS="2" WIDTH="100%"
WIDTH="100%" GUTTER="10">
GUTTER="10">
<P>Un
<P>Un bon pot-au-feu nécessite :</P>
bon pot-au-feu nécessite :</P>
<UL
<UL TYPE="DISC">
TYPE="DISC">
<LI>des
<LI>des poireaux,
poireaux,
<LI>des carottes,
<LI>des carottes,
<LI>des
<LI>des navets.
navets.
</UL>
</UL>
<BR>
<BR>
<P>Un
<P>Un bon
bon pot-au-feu
pot-au-feu nécessite
nécessite :</P>
:</P>
<UL
<UL TYPE="SQUARE">
TYPE="SQUARE">
<LI>des
<LI>des poireaux,
poireaux,
<LI>des
<LI>des carottes,
carottes,
<LI>des
<LI>des navets.
navets.
</UL>
</UL>
</MULTICOL>
</MULTICOL>
Présentées ainsi
Conception d'un
d'un s ite WEB
51
<MULTICOL
<MULTICOL COLS="2"
COLS="2" WIDTH="100%"
WIDTH="100%" GUTTER="10">
GUTTER="10">
<P>Un
<P>Un
<OL bon
bon pot-au-feu
pot-au-feu nécessite
nécessite :</P>
:</P>
<OL TYPE="1">
TYPE="1">
<LI>des
<LI>des poireaux,
poireaux,
<LI>des
<LI>des carottes,
carottes,
<LI>des
<LI>des navets.
navets.
</OL>
</OL>
<BR>
<BR>
<P>Un
<P>Un bon
bon pot-au-feu
pot-au-feu nécessite
nécessite :</P>
:</P>
<OL TYPE="I">
<OL TYPE="I">
<LI>des
<LI>des poireaux,
poireaux,
<LI>des
<LI>des carottes,
carottes,
<LI>des
<LI>des navets.
navets.
</OL>
</OL>
</MULTICOL>
</MULTICOL>
Présentées ainsi
Conception d'un
d'un s ite WEB
53
Présentées ainsi
Conception d'un
d'un s ite WEB
55
Ou ainsi
Conception d'un
d'un s ite WEB
56
Listes imbriquées
Conception d'un
d'un s ite WEB
57
<P>Un
<P>Un bon
bon pot-au-feu
pot-au-feu nécessite
nécessite :</P>
:</P>
<UL
<UL TYPE="DISC">
TYPE="DISC">
<LI>des
<LI>des poireaux
poireaux ::
<UL
<UL TYPE="SQUARE">
TYPE="SQUARE">
<LI>des
<LI>des petits,
petits,
<LI>des moyens,
<LI>des moyens,
<LI>des
<LI>des gros.
gros.
</UL>
</UL>
<LI>des
<LI>des carottes,
carottes,
<LI>des
<LI>des navets.
navets.
</UL>
</UL>
Ce qui donne
Conception d'un
d'un s ite WEB
58
Les images
Conception d'un
d'un s ite WEB
59
Aspect visuel
Conception d'un
d'un s ite WEB
61
Paramètres d'inclusion
Conception d'un
d'un s ite WEB
62
vspace
height
width hspace
J ean DE MAR TIN I © 14.02.00
Paramètres d'alignement
Conception d'un
d'un s ite WEB
63
<P
<P ALIGN="CENTER">
ALIGN="CENTER">
<IMG
<IMG SRC="Image17a.gif"></P>
SRC="Image17a.gif"></P>
<P>Cette image
<P>Cette image
<IMG
<IMG SRC="Image17b.gif"
SRC="Image17b.gif" ALIGN="TOP"
ALIGN="TOP">
>
ALIGN="TOP">
est
est alignée
alignée
<IMG
<IMG SRC="Image17b.gif"
SRC="Image17b.gif" ALIGN="MIDDLE"
ALIGN="MIDDLE">
>
ALIGN="MIDDLE">
de
de différentes
différentes
<IMG
<IMG SRC="Image17b.gif"
SRC="Image17b.gif" ALIGN="BOTTOM"
ALIGN="BOTTOM">
ALIGN="BOTTOM">>
façons.</P>
façons.</P>
<P>On
<P>On remarque
remarque que
que son
son fond
fond à
à
été
été rendu
rendu transparent.</P>
transparent.</P>
Effets de présentation
Conception d'un
d'un s ite WEB
64
Fond d'écran
Conception d'un
d'un s ite WEB
65
<BODY
<BODY BACKGROUND="Image18.gif"
BACKGROUND="Image18.gif">
BACKGROUND="Image18.gif"> >
<P
<P ALIGN="CENTER"><IMG
ALIGN="CENTER"><IMG SRC="Image17a.gif"
SRC="Image17a.gif"
<P><B>Cette
<P><B>Cette image
image <IMG
<IMG SRC="Image17b.gif"
SRC="Image17b.gif"
<P><B>On
<P><B>On remarque
remarque que
que son
son fond
fond à
à &eacu
&eacu
</BODY>
</BODY>
Image de fond et
Conception d'un
d'un s ite WEB
transparence
66
Les ancres
Conception d'un
d'un s ite WEB
67
<BODY>
<BODY> index.html
<P>...<A
<P>...
<P>...<A
<A HREF="p1.html">Page
HREF="p1.html">Page 1</A>...</P>
1</A>...</P>
<P>...<A
<P>...<A HREF="p2.html">Page
<P>...<A HREF="p2.html">Page 2</A>...</P>
2</A>...</P>
<P>...<A
<P>...<A HREF="p3.html">Page
<P>...<A HREF="p3.html">Page 3</A>...</P>
3</A>...</P>
...
...
</BODY>
</BODY>
<HTML>
<HTML> p1.html
...
...
<HTML>
<HTML> p2.html
</HTML>
</HTML> ...
...
<HTML> p3.html
<HTML>
</HTML>
</HTML>... ...
</HTML>
</HTML>
<BODY>
<BODY>
<P>...<A
<P>...<A HREF="#p1">Page
<P>...<A HREF="#p1">Page 1</A>...</P>
1</A> ...</P>
1</A>...</P>
...
...
<P>...<A
<P>...<A HREF="#p2">Page
<P>...<A HREF="#p2">Page 2</A>...</P>
2</A> ...</P>
2</A>...</P>
...
...
<P>...<A
<P>...<A HREF="#p3">Page
<P>...<A HREF="#p3">Page 3</A>...</P>
3</A> ...</P>
3</A>...</P>
...
...
<P><A
<P> <A NAME="p1"></A>...</P>
<P><A NAME="p1"></A> ...</P>
NAME="p1"></A>...</P>
...
...
<P><A
<P> <A NAME="p2"></A>...</P>
<P><A NAME="p2"></A> ...</P>
NAME="p2"></A>...</P>
...
...
<P><A
<P> <A NAME="p3"></A>...</P>
<P><A NAME="p3"></A> ...</P>
NAME="p3"></A>...</P>
...
...
</BODY>
</BODY>
Liens doubles
Conception d'un
d'un s ite WEB
70
<BODY>
<BODY>
<P>...<A
<P>...<A HREF="#p1"
<P>...<A HREF="#p1" NAME="r1">Page
NAME="r1">Page 1</A>...</P>
1</A> ...</P>
1</A>...</P>
...
...
...
...
<P><A
<P> <A HREF="#r1"
<P><A HREF="#r1" NAME="p1">Retour</A>...</P>
NAME="p1">Retour</A> ...</P>>
NAME="p1">Retour</A>...</P>
NAME="p1">Retour</A>...</P
...
...
...
...
</BODY>
</BODY>
Qui s'affiche
Conception d'un
d'un s ite WEB
72
Les Tableaux
Conception d'un
d'un s ite WEB
73
Un tableau élémentaire
Conception d'un
d'un s ite WEB
74
CAPTION
HEADING CELLS
CELLS
<TABLE
<TABLE paramètres>>
paramètres
<CAPTION paramètres
<CAPTION paramètres>…</CAPTION>
>…</CAPTION>
<TR>
<TR>
<TD>...</TD><TH>...</TH><TH>...</TH><TH>…</TH>
<TD>...</TD><TH>...</TH><TH>...</TH><TH>…</TH>
</TR>
</TR>
<TR>
<TR>
<TH>...</TH><TD>...</TD><TD>...</TD><TD>...</TD>
<TH>...</TH><TD>...</TD><TD>...</TD><TD>...</TD>
</TR>
</TR>
<TR>
<TR>
<TH>...</TH><TD>...</TD><TD>...</TD><TD>...</TD>
<TH>...</TH><TD>...</TD><TD>...</TD><TD>...</TD>
</TR>
</TR>
<TR>
<TR>
<TH>...</TH><TD>...</TD><TD>...</TD><TD>…</TD>
<TH>...</TH><TD>...</TD><TD>...</TD><TD>…</TD>
</TR>
</TR>
</TABLE>
</TABLE>
Principaux paramètres
Conception d'un
d'un s ite WEB
77
Paramètres de <CAPTION
Conception d'un
d'un s ite WEB
...>
79
ALIGN = L E F T |
| CENTER | RI GH T
Superposition de cellules
Conception d'un
d'un s ite WEB
80
Paramètres de superposition
Conception d'un
d'un s ite WEB
81
ROWSPAN=2 COLSPAN=2
lignes 3
5
1 2 3 4
colonnes
J ean DE MAR TIN I © 14.02.00
Images cliquables
Conception d'un
d'un s ite WEB
84
<IMG
<IMG SRC="Image16.gif"
SRC="Image16.gif" WIDTH="200"
WIDTH="200" HEIGHT="145"
HEIGHT="145"
ISMAP
ISMAP
USEMAP="#Image16"
USEMAP="#Ima ge16"
USEMAP="#Image 16" BORDER="0">
USEMAP="#Image16" BORDER="0">
<MAP
<MAP NAME="Image16">
NAME="Image16">
<AREA
<AREA SHAPE="CIRCLE"
SHAPE="CIRCLE" HREF=
HREF= "chap-1.html"
"chap-1.html"
COORDS="86,64,20">
COORDS="86,64,20">
<AREA
<AREA SHAPE="RECT"
SHAPE="RECT" HREF="chap-2.html"
HREF="chap-2.html"
COORDS="61,101,92,138">
COORDS="61,101,92,138">
</MAP>
</MAP>
Les formulaires
Conception d'un
d'un s ite WEB
86
Dialogue Client-Serveur
Conception d'un
d'un s ite WEB
87
u Le côté client est
est représenté par le navigateur qui
interprète la page HTML qui comporte des balises
pouvant se traduire en requêtes.
u Le côté serveur est
est représenté par le serveur Web qui
interprète les requêtes provenant du navigateur et qui
lui transmet des pages HTML.
u Nous avons rencontré deux balises se traduisant en
requête :
l <A … >…</A> : requête pour une page externe,
l <IMG … > : requête pour une image externe.
http://…../xxx.html#yyy
http://…../xxx.html#yyy
Serveur
Navigateur Web
Content-type:
Content-type: text/html
text/html <HTML>
<HTML> …
… </HTML>
</HTML>
<HTML>
<HTML> …
… </HTML>
</HTML>
QUERY_STRING
QUERY_STRING == ...
...
http://…../xxx.cgi...
http://…../xxx.cgi...
Serveur Programme
Navigateur Web CGI
Content-type:
Content-type: text/html
text/html Content-type:
Content-type: text/html
text/html
<HTML>
<HTML> …
… </HTML>
</HTML> <HTML>
<HTML> …
… </HTML>
</HTML>
Formulaire
Conception d'un
d'un s ite WEB
90
Exemple 1
Conception d'un
d'un s ite WEB
91
<FORM
<FORM ACTION="query.cgi"
ACTION="query.cgi" … …
METHOD=
METHOD= "GET"
"GET" || "POST">
"POST">
<P><BIG><BIG>P</BIG></BIG>our
<P><BIG><BIG>P</BIG></BIG>
<P><BIG><BIG>P</BIG></BIG>our
<P><BIG><BIG>P</BIG></BIG>o our
ur faire
faire une
une bonne
bonne mayonnai
mayonnai
<INPUT
<INPUT TYPE=
TYPE="radio"
"radio"
TYPE="r adio" NAME="liquide"
TYPE="radio" NAME="liquide" VALUE="eau">
VALUE="eau">eau,eau,
VALUE="eau">eau,
<INPUT
<INPUT TYPE="radio"
TYPE="ra dio" NAME="liquide"
TYPE="radio" NAME="liquide" VA VALUE="huile">
LUE="huile">huile,
VALUE= huile,
VALUE="huile">huile,
"huile">huile,
<INPUT
<INPUT TYPE="radio"
TYPE="radio"
TYPE="ra dio" NAME="liquide"
TYPE="radio" NAME="liquide" V VALUE="lait">
VALUE="lait">lait
lait
VALUE="lait">lait
ALUE="lait">lait
</FORM>
</FORM>
Exemple 2
Conception d'un
d'un s ite WEB
92
<FORM
<FORM ACTION="query.cgi"
ACTION="query.cgi" … …
METHOD=
METHOD= "GET"
"GET" || "POST">
"POST">
...
...
<P><BIG><BIG>I</BIG></BIG>l
<P><BIG><BIG>I</BIG></BIG>l
<P><BIG><BIG>I<
<P><BIG><BIG>I</BIG></BIG>l
/BIG></BIG>l faut
fautaussi
aussi :</P>
:</P>
<INPUT
<INPUT TYPE="che
TYPE="checkbox"
ckbox"
TYPE="checkb ox" NAME="oeufs"
NAME= "oeufs" VALUE="on">oeufs,
NAME="oeufs" VALUE="on"> oeufs,
VALUE="on">oeufs,
VALUE="on">oeufs,
<INPUT
<INPUT TYPE="che
TYPE="checkbox"
TYPE="checkbox"
ckbox" NAME="sel"
TYPE="checkbox" NAME="
NAME="s sel"
el" VALUE="on">sel,
NAME="sel" VALUE="on"> sel,
VALUE="on">sel,
<INPUT
<INPUT TYPE="che
TYPE="checkbox"
TYPE="checkbox"
ckbox" NAME="mouta"
TYPE="checkbox" NAME=
NAME="mouta"
"mouta" VALUE="on">moutarde,
NAME="mouta" VALUE="on"> moutarde,
VALUE="on">moutarde,
<INPUT
<INPUT TYPE="che
TYPE="checkbox"
TYPE="checkbox"
ckbox" NAME="confit"
TYPE="checkbox" NAME="confit" VALUE="on">
V
VALUE="on">confiture
confiture
VALUE="on">confiture
ALUE="on">confiture
</FORM>
</FORM>
Exemple 3
Conception d'un
d'un s ite WEB
93
<FORM
<FORM ACTION="query.cgi"
ACTION="query.cgi"
METHOD=
METHOD= "GET"
"GET" || "POST">
"POST">
...
...
<P><BIG><BIG>O</BIG></BIG>n
<P><BIG><BIG>O</BIG></BIG>
<P><BIG><BIG>O</BIG></BIG>n n utilise
utilise ::
<SELECT NAME="recipient"
<SELECT NAME="recipient" SIZE="3">
NAME="recipient" SIZE="3">
<OPTION
<OPTION SELECTED>assiette
SELECTED>assiette
<OPTION>bol
<OPTION>bol
<OPTION>bouteille
<OPTION>bouteille
<OPTION>casserole
<OPTION>casserole
<OPTION>marmite</SELECT> </P>
<OPTION>marmite</SELECT> </P>
<OPTION>marmite</SELECT> </P>
</FORM>
</FORM>
Exemple 4
Conception d'un
d'un s ite WEB
94
<FORM
<FORM ACTION="query.cgi"
ACTION="query.cgi" METHOD=
METHOD= "GET"
"GET" || "POST">
"POST">
...
...
<P><BIG><BIG>D</BIG></BIG>écrivez,
<P><BIG><BIG>D</BIG>< /BIG>écrivez, en
<P><BIG><BIG>D</BIG></BIG>écrivez,
<P><BIG><BIG>D</B IG></BIG>écrivez, enquelques
quelques lignes
quelques lignes
les
les principales
principales qualités
qualités diététiques
diét&ea
diététiques
cute;tiques de
diététiques de
la
la mayonnaise
mayonnaise :<BR>
:<BR>
<TEXTAREA
<TEXTAREA NAM NAME="dissertation"
NAME E="dissertation"
="dissertation" ROWS="5"
NAME="dissertation" ROWS=
ROWS="5"
ROWS="5""5" COLS=20>
COLS=20>
</TEXTAREA>
</TEXTAREA>
</FORM>
</FORM>
Exemple 5
Conception d'un
d'un s ite WEB
95
<FORM
<FORM ACTION="query.cgi"
ACTION="query.cgi" METHOD=
METHOD= "GET"
"GET" || "POST">
"POST">
...
...
<P>
<P>
Donnez
Donnez votre
votre nom
nom et
et on
et on vous
on vous écrira<BR>
écrira<BR
écrira<BR>
écrira<BR> >
<INPUT
<INPUT TYPE
TYPE="text"
="text" NAME="nom">
TYPE="text"
TYPE="text" NAM E="nom">
NAME="nom">
</FORM>
</FORM>
Et pour finir
Conception d'un
d'un s ite WEB
96
<FORM
<FORM ACTION="query.cgi"
ACTION="query.cgi"
METHOD= "GET" | "POST">
...
... METHOD= "GET" | "POST">
<P>
<P>
<INPUT
<INPUT TYPE=
TYPE=reset
reset
TYPE=reset VALUE="Corriger">
VALUE= "Corriger">
VALUE="Corriger">
<INPUT TYP
TYPE=submit
E=submit
<INPUT TYPE=submit VALUE="OK">
VALUE="OK"></P>
</P>
TYPE=submit VALUE="OK"></P>
VALUE="OK"></P>
</FORM>
</FORM>
Conclusion provisoire
Conception d'un
d'un s ite WEB
97
Programmes CGI
Conception d'un
d'un s ite WEB
98
Programmation CGI
Conception d'un
d'un s ite WEB
99
"stdin" Programme
Programme CGI
CGI stdout
Message MIME
Content-type:
Content-type: text/html
text/html
<HTML>…</HTML>
<HTML>…</HTML>
J ean DE MAR TIN I © 14.02.00
Extension de l'URL
Conception d'un
d'un s ite WEB
102
Entrée standard
Conception d'un
d'un s ite WEB
103
En résumé
Conception d'un
d'un s ite WEB
105
Le langage Perl
Conception d'un
d'un s ite WEB
106
Un programme Perl
Conception d'un
d'un s ite WEB
simplissime
107
#!/usr/local/bin/perl
#!/usr/local/bin/perl
print
print "Content-type:
"Content-type: text/html
<HTML>
<HTML>
<HEAD>
<HEAD>
<TITLE>Première
<TITLE>Première page
page
scriptées</TITLE>
scriptées</TITLE>
</HEAD>
</HEAD>
<BODY>
<BODY>
<P>Bonjour
<P>Bonjour à
à tous.</P>
tous.</P>
</BODY>
</BODY>
</HTML>
</HTML>
";
";
Les commentaires
Conception d'un
d'un s ite WEB
108
Localisation de l'interprète
Conception d'un
d'un s ite WEB
109
Les instructions
Conception d'un
d'un s ite WEB
110
111
Formats MIME
Conception d'un
d'un s ite WEB
112
Variables
Conception d'un
d'un s ite WEB
113
Contextes d'interprétation
Conception d'un
d'un s ite WEB
114
Petite généralisation
Conception d'un
d'un s ite WEB
115
#!/usr/local/bin/perl
#!/usr/local/bin/perl
$title
$title == …;
…;
$body
$body == …;…;
print
print "Content-type:
"Content-type: text/html
text/html
<HTML>
<HTML>
<HEAD><TITLE>$title</TITLE></HEAD>
<HEAD><TITLE>$title</TITLE></HEAD>
<BODY>$body</BODY>
<BODY>$body</BODY>
</HTML>
</HTML>
";
";
J ean DE MAR TIN I © 14.02.00
Les constantes
Conception d'un
d'un s ite WEB
116
Affectation
Conception d'un
d'un s ite WEB
117
Quelques opérations
Conception d'un
d'un s ite WEB
scalaires
118
$a = 1 + 2; addition
$a = 2 - 4; soustraction
$a = 5 * 6; multiplication
$a = 7 / 2; division
$ a = 9 * * 3. 2; puissance (pas forcément entière)
$ a = 5 % 2; reste euclidien
++$a; pré-incrémentation
$a++; post-incrémentation
$a = 'bonjo
'bonjour
ur '.'tou
'.'toutt le monde
monde';
'; concat
concaténa
énatio
tion
n
$a = 'je bégaie ' x 8; répétition
$ a += 3; équivalent à $a = $a + 3
119
pop(@fruits);
Fonctions
Conception d'un
d'un s ite WEB
120
121
op
open
en(
en((( FICH
open
op FI
FICHIE
FICH IER,
CHIER,
R, 'fo
IER, ''fo
'foo.
o.tx
foo.txt'
o.tx t');
txt');
t');
); ## ou
ouve
ouvert
ouve rtur
verture*
rture*
e* d
ure* du
du
duu fi
fich
fichie
fich ier
chierr et
ier et
## création de son descripteur
création de son descripteur
@
@lliig
gnneess == <<F
FIIC
CHHIIE
ERR>>;; ## lleeccttu
urree d
du hiieerr ligne
u ffiicch ligne
# par
par lig ne et et construction
construction
## d'un
d'un tableau
tableau de de ces
ces lignes
lignes
ccllo
ossee((F
FIIC
CHHIIEERR));; ## ffeerrm
meettu urree d
duu ffiicch
hiieerr
pprriin
ntt @
@lliig
gnneess;; ## eett aaffffiicch
haag gee
Variables d'environnement
Conception d'un
d'un s ite WEB
122
$ENV{'REQUEST_METHOD'}
$ENV{'SCRIPT_NAME'}
$ENV{'PATH_INFO'}
$ENV{'QUERY_STRING'}
$ENV{'CONTENT_LENGTH'}
123
...
...
if
if ($ENV{'REQUEST_METHOD'}
($ENV{'REQUEST_METHOD'} eq eq "POST")
"POST") {{
read(STDIN,
read(STDIN, $buffer,
$buffer, $ENV{'CONTENT_LENGTH'));
$ENV{'CONTENT_LENGTH'));
}
} else
else {{
$buffer
$buffer == $ENV{'QUERY_STRING'};
$ENV{'QUERY_STRING'};
}
}
...
...
u On note 3 nouveautés :
l la structure de contrôle :
if <prédicat> {<conséquence>}
else {<alternative>}
l l'opérateur de comparaison : eq
l la fonction de lecture d'un bloc de caractères dans un fichier :
read().
J ean DE MAR TIN I © 14.02.00
Expressions régulières
Conception d'un
d'un s ite WEB
125
Classes de caractères
Conception d'un
d'un s ite WEB
126
Caractères spéciaux
Conception d'un
d'un s ite WEB
127
Concaténation, option et
Conception d'un
d'un s ite WEB
répétition
128
Parenthèsage et
Conception d'un
d'un s ite WEB
échappement
129
Appariement
Conception d'un
d'un s ite WEB
130
Contexte de l'appariement
Conception d'un
d'un s ite WEB
131
Substitution
Conception d'un
d'un s ite WEB
132
u Une expres
expresss ion de
de s ubs
ubsttitut
itution
ion permet de remplacer,
dans un texte, un motif par un autre, elle vaut le
nombre des substitutions effectuées.
u Une expression de substitution est de la forme :
s/<reg-exp> /<expression> /<paramètres>
u Exemples :
s/saucisse/banane/
remplace la première occurrence du mot "saucisse" par le mot
"banane".
s/saucisse/saucisson/g
remplace toutes les occurrences du mot "saucisse" par le mot
"banane".
Utilisations de la substitution
Conception d'un
d'un s ite WEB
(1)
133
$texte
$texte == ""
une
une bonne
bonne saucisse
saucisse sèche
sèche est
est
une
une saucisse
saucisse qui
qui aa bien
bien séché.";
séché.";
$texte
$texte =~ s/saucisse/banane/;
Utilisations de la substitution
Conception d'un
d'un s ite WEB
(2)
134
$texte = "
une bonne saucisse sèche est
une saucisse qui a bien séché.";
$texte =~ s/saucisse/banane/g;
Utilisations de la substitution
Conception d'un
d'un s ite WEB
(3)
135
$_
$_ = "
une
une bonne
bonne saucisse
saucisse sèche
sèche est
est
une saucisse qui a bien séché.";
une saucisse qui a bien séché.";
$ns
$ns = s/saucisse/banane/g;
Traduction
Conception d'un
d'un s ite WEB
136
u Une expres
expresss ion de traduct
traduction
ion permet de remplacer,
dans un texte, des caractères par d'autres caractères
; elle vaut le
l e nombre des traductions effectuées.
u Une expression de traduction est de la forme :
tr/<cla
<class s e de caractères> /<cla
<class s e de caractères> /<paramètres>
u Exemples :
tr/a-z/A-Z/
remplace toutes les lettres minuscules par les majuscules
correspondantes. Toutes ?
tr/a-z/b-za/
utilise le code de César pour crypter un message.
Utilisations de la traduction
Conception d'un
d'un s ite WEB
(1)
137
$texte
$texte == ""
une
une bonne
bonne saucisse
saucisse sèche
sèche est
est
une saucisse qui a bien séché.";
une saucisse qui a bien séché.";
$texte
$texte =~ s/a-zèé/b-zaïâ/;
Utilisations de la traduction
Conception d'un
d'un s ite WEB
(2)
138
$_ = "
une bonne saucisse sèche est
une saucisse qui a bien séché.";
$ntr = tr/a/a/;
Mémoire de l'appariement
Conception d'un
d'un s ite WEB
(1)
139
Mémoire de l'appariement
Conception d'un
d'un s ite WEB
(2)
140
u Exemple :
/^(.)(.*)(.)$/ confronté au texte "bonne nuit
nuit les petits" conduit à :
\1 = $1 = "b"
\2 = $2 = "onne nuit les petit"
\3 = $3 = "s"
u Que fait donc la portion de programme suivante ?
$_
$_ == "bonne
"bonne nuit
nuit les
les petits";
petits";
s/^(.)(.*)(.)$/\3\2\1/;
s/^(.)(.*)(.)$/\3\2\1/;
print
print "$1
"$1 $2
$2 $3";
$3";
$ENV{'REQUEST_METHOD'}
$ENV{'REQUEST_METHOD'} =~
=~ tr/a-z/A-Z/;
tr/a-z/A-Z/;
if
if ($ENV{'REQUEST_METHOD'}
($ENV{'REQUEST_METHOD'} eq eq "POST")
"POST") {{
read(STDIN,
read(STDIN, $buffer,
$buffer, $ENV{'CONTENT_LENGTH'));
$ENV{'CONTENT_LENGTH'));
} else
} else {{
$buffer
$buffer == $ENV{'QUERY_STRING'};
$ENV{'QUERY_STRING'};
}
}
...
...
Un tronçonnage utile
Conception d'un
d'un s ite WEB
143
$buffer
$buffer == "" liquide=eau&œufs=on&...&nom=Mickey+M
liquide=eau&œufs=on&...&nom=Mickey+Mouse"
liquide=eau&œufs=on&...&nom=Mickey ouse"
liquide=eau&œufs=on&...&nom=Mickey+Mouse"
+Mouse"
@paires
@paires == split(/&/,$buffer);
split(/&/,$buffer);
...
...
foreach $paire
foreach $paire (@paires)
(@paires) {{
($nom,
($nom, $valeur)
$valeur) == split(/=/,
split(/=/, $paire);
$paire);
$valeur
$valeur =~
=~ tr/+/
tr/+/ /;
/;
$valeur
$valeur =~
=~ s/%(..)/pack("C",
s/%(..)/pack("C", hex($1))/eg;
hex($1))/eg;
......
} }
u Quatre nouveautés :
l la structure d'itération
foreach <scalaire> (<tableau>) {…}
l la fonction hex()
l la fonction pack()
l l'option "e" dans "s/…/…/ge"
Expressions logiques
Conception d'un
d'un s ite WEB
146
u Fonction hex :
hex ($te
($texte
xte)) rend la valeu
rend valeurr entière
entière corre
correspo
sponda
ndant
nt à la
la chaîne
chaîne $tex
$texte
te
supposée représenter un nombre exprimé en notation
hexadécimale.
h ex comme ci-dessus sur la variable $_.
u Fonction pack :
pack(" C " ,<e
<expr
xpr ess ion à valeur
valeur entière>)
rend la chaîne contenant le caractères dont le code
ASCII est la valeur de l'expression.
u La fonction pack() présente de très nombreuses
options toutes plus obscures les unes que les autres ;
donc consultez la documentation.
L'option "e" de la
Conception d'un
d'un s ite WEB
substitution
148
Option d'évaluation
s/%(..)/pack("C", hex($1))/eg
Quelques considérations
Conception d'un
d'un s ite WEB
150
$message = 'liquide=lait&recipi
'liquide =lait&recipient=bol&...'
ent=bol&...';
'liquide=lait&recipien
'liquide=l t=bol&...';;
ait&recipient=bol&...';
$ENV
$ENV{'
{'RE
REQU
{'RE QUES
REQUEST_T_ME
EST_ METH
T_ME THOD
OD'}
'} = 'GET
'GET';
'GET ';
ET';
$ENV{ 'Q
V 'QU UERY _S T
_S RRING'} = $mmesssaag
e
mes gee;;
system('perl script.pl');
Script à tester
$message == 'liquide=lait&recipie
'liquide= lait&recipient=bol&...'
'liquide=lait&recipi nt=bol&...';;
'liquide =lait&recipient=bol&...'
ent=bol&...';
$longueur == length($message);
length($message);
$ENV
$ENV{'
$ENV {'RE
NV{'REQU
QUES
EST_
T_ME
METH
THOD
OD'}
'} = 'POST
'PO
'POST';
'POST ';
$ENV
$ENV{'
$ENV {'CO
NV{'CONT
{'CO NTEN
CONT ENT_
NTENT_LE
ENT_ LENG
NGTH
TH'}
'}
T_LE TH'}'} = $lo
$long
ngue
ueur
ngue ur;;
ueur
open(CGI,'|perl
perl script.pl');
open(CGI,'|perl
open(CGI,'| script.pl');
print CGI $message;
close CGI;
On utilise l'ouverture d'un pip
pipee qui
permet au script testé d'hériter à la fois Script à tester
des variables d'environnements et de
recevoir le message via STDIN.
Sub
Sub read_input
read_input {{
…
…
}}
%formulaire
%formulaire == &read_input();
&read_input();
print
print ""
lliiqquuiiddee :: $f
$$f
$ffoorrm
muullaaiirree{{''lliiqquuiiddee''}}
re
reci
reci
re cipi
pien
cipi ent
pienenttt :: $for
$f ormu
$for
$f mula
ormu lair
mula ire{
lair e{'r
ire{ 'rec
e{'r'rececipipie
ecipipieient
nt'}
ient
nt'}'}
'}
nnoom m :: $$ffoorrmu l a i r e {
mulaire{'nom'} ' n o m '}
";
";
Un enregistrement
Conception d'un
d'un s ite WEB
158
u
Un enregistrement est
champs-information constitué
séparés parde champs-clé
le signe "|" ; ilsetsont
de
séparés entre eux par le signe ":".
u Champs clé (dans cet ordre) :
l ville,
l spécialité : locales, asiatiques, viandes, poissons,
l catégorie de prix : 50-100, 100-200, 200-300, >300.
u Champs information (dans cet ordre) :
l photo (fichier JPEG),
l nom, sous titre,
l adresse,
l prix1, menu1, prix2, menu2.
Pages associées
Conception d'un
d'un s ite WEB
159
Formulaire d'interrogation
Conception d'un
d'un s ite WEB
160
Formulaire de référencement
Conception d'un
d'un s ite WEB
161
u
Un modèle de page est nécessaire :
l modèle de présentation pour afficher le résultat d'une recherche,
Modèle de présentation
Conception d'un
d'un s ite WEB
163
Format de l'enregistrement
Conception d'un
d'un s ite WEB
164
u
L'enregistrement est sur une seule ligne telle que :
ville:specialite:categorie|
ville:specialite:categorie|
photo:nom:soustitre:adresse:prix1:menu1:prix2:menu2
photo:nom:soustitre:adresse:prix1:menu1:prix2:menu2
Le champ pho
photo
to correspond au nom du fichier
JPEG, la photo sera parvenue par un autre canal
que celui du formulaire (La poste par exemple).
u
Les différentest aux
corresponden
correspondent champs de de
entités l'enregistrement
présentation suivantes :
l v ille : $ville
l spec
sp ecia
iali
lite
te : $sp
$spec
ecia
iali
lite
te
l cate
ca teggor
orie
ie : $c
$cat
ateg
egor
orie
ie
l photo : $photo
l nom : $nom
l soustitre : $s
$soustitre
l ad r esse : $adresse
l p r i x1 : $prix1
l menu1 : @menu1
l p r i x2 : $prix2
l menu2 : @menu2
Script d'interrogation :
Conception d'un
d'un s ite WEB
structure
167
Script d'interrogation :
Conception d'un
d'un s ite WEB
source
168
#!/usr/local/bin/perl
#!/usr/local/bin/perl
sub
sub read_input
read_input {...}
{...}
sub
sub interrogation
interrogation {...}
{...}
sub page {...}
sub page {...}
sub
sub compose_motif
compose_motif {...} {...}
sub
sub compose_menu
compose_menu {...} {...}
%formulaire
%formulaire == &read_input();
&read_input();
$cle1 = $formulaire{'ville'};
$cle1 = $formulaire{'ville'};
$cle2
$cle2 == $formulaire{'specialite'};
$formulaire{'specialite'};
$cle3
$cle3 == $formulaire{'categorie'};
$formulaire{'categorie'};
@resultats
@resultats == &interrogation($cle1,
&interrogation($cle1, $cle2,
$cle2, $cle3);
$cle3);
do page(@resultats);
do page(@resultats);
J ean DE MAR TIN I © 14.02.00
Fonction d'interrogation
Conception d'un
d'un s ite WEB
169
sub interrogation {
local
local ($cle1, $cle2,
$cle2, $cle3) == @_;@_;
open(BASE,"<base.rst") || die 'fichier
'fichier inconnu';
foreach $enregistrement (<BASE>) {
($cles,
($cles, $info) = split(/\|/,$enregistrement);
split(/\|/,$ enregistrement);
split(/\|/, $enregistrement);
($lc1, $lc2, $lc3) == split(/:/,$cles);
split(/:/, $cles);
if (($cle1
(($cle1 eq $lc1)&&
($cle2 eq $lc2)&&($cle3 eq $lc3)) {
push(@RESULTATS,$info);
}}
}
close
close BASE;
@RESULTATS;
@RESULTATS;
}
J ean DE MAR TIN I © 14.02.00
Composition de la page
Conception d'un
d'un s ite WEB
170
$photo $soustitre
$menu1 $menu2
$adresse
Fonction de composition de
Conception d'un
d'un s ite WEB
la page
171
sub
sub page
page {{
print
print ""
Content-type:
Content-type: text/html
text/html
<HTML>
<HTML>
<HEAD><TITLE>Résultats</TITLE></HEAD>
<HEAD><TITLE>Résultats</TITLE></HEAD>
<BODY
<BODY BGCOLOR=\"White\">";
BGCOLOR=\"White\">";
foreach
foreach $resultat
$resultat (@_)
(@_) {{
print
print ""
<TABLE
<TABLE WIDTH=\"100%\"
WIDTH=\"100%\" BORDER=\"2\"
BORDER=\"2\"
CELLSPACING=\"2\"
CELLSPACING=\"2\" CELLPADDING=\"2\">";
CELLPADDING=\"2\">";
do
do compose_motif($resultat);
compose_motif($resultat);
print
print "</TABLE>";
"</TABLE>";
}}
}} print
print "</BODY></HTM
"</BODY></HTML>
L>
"</BODY></HTML
"</BODY> > ";
</HTML> ";
J ean DE MAR TIN I © 14.02.00
Fonction de composition du
Conception d'un
d'un s ite WEB
motif
172
sub compose_motif
sublocal
compose_motif
local {{
($photo,$nom,$soustitre,$adresse,
($photo,$nom,$soustitre,$adresse,
$prix1,$menu1,$prix2,$menu2)
$prix1,$menu1,$prix2,$menu2)
== split(/:/,
split(/:/, @_[0]);
@_[0]);
print "<TR>
print "<TR>
<TD><IMG
<TD><IMG SRC=\"$photo\"></TD>
SRC=\"$photo\"></TD>
<TD
<TD ALIGN=\"CENTER\">
ALIGN=\"CENTER\">
<FONT
<FONT SIZE=\"+3\"><B>$nom</B></FONT><BR>
SIZE=\"+3\"><B>$nom</B></FONT><BR>
<B>$soustitre</B><HR>$adresse</TD>
<B>$soustitre</B><HR>$adresse</TD>
<TD
<TD ALIGN=\"CENTER\"
ALIGN=\"CENTER\" VALIGN=\"TOP\">
VALIGN=\"TOP\">
<B>Menu
<B>Men
<B>Menu
<B>Men u 1 : $prix1 F</B
F</B><HR>
><HR>
<HR>";
u 1 : $prix1 F</B><HR>
F</B> ";
do compose_menu(split(/\./,$menu1));
compose_menu(split(/\./,$men
do compose_menu(split(/\./,$menu
compose_menu(split(/\./,$menu1));u1));
1));
print
print "</TD>";
"</TD>";
…..
…..
print
print "</TR>";
"</TR>";
}}
J ean DE MAR TIN I © 14.02.00
sub
sub compose_menu
compose_menu {{
print
print "<TABLE>";
"<TABLE>";
foreach
foreach $item
$item (@_)
(@_) {{
pr
prinint
inttt "" <T
prin
pr <TR>
R>
<TR>
<T R>
<TD
<TD VALIGN=\"TOP\">
VALIGN=\"TOP\">
<IMG
<IMG SRC=\"blueball.gif\"></TD>
SRC=\"blueball.gif\"></TD>
<TD VALIGN=\"TOP\">$item</TD>
<TD VALIGN=\"TOP\">$item</TD>
</TR>
</TR>
";
";
}}
print
print "</TABLE>";
"</TABLE>";
}
Script de référencement :
Conception d'un
d'un s ite WEB
source
174
#!/usr/local/bin/perl
#!/usr/local/bin/perl
sub
sub read_input
read_input {...}
{...}
sub
sub referencement {...}
referencement {...}
do
do referencement(%formulaire);
referencement(%formulaire);
Fonction de référencement
Conception d'un
d'un s ite WEB
175
sub referencement {
local ($ville, $specialite, $categorie, ...) ==
(@_[0]){'ville'},
(@_[0]){'ville'}, @_[0]){'specialite'},
@_[0]){'specialite'}, …);
…);
open(BASE,">>base.rst") || die 'fichier inconnu';
print BASE "$ville:$specialite:
"$ville:$speci alite: …
… |$photo:
|$photo: … \n";
close
close BASE;
}
Le "panier de la ménagère"
Conception d'un
d'un s ite WEB
176
u
Lorsqu'on navigue
formulaires sur reprises,
à diverses un site, en
lesoumettant des
serveur ne peut
pas conserver chez lui la trace de ce qui a été saisi ; il
n' a aucun moyen d'identif
n'a d' identifier
ier qui
qu i l'appelle
l'appelle car les
adress es IP s ont pres
pres que toujours
toujours flflot
otttant
ntes
es .
u Pour ce faire, le serveur peut :
l Provoquer l'écriture d'une information de son choix dans un fichier
de la machine client.
l Relire l'information qu'il a fait écrire.
u Ces portions d'informations s'appellent des "magic
cookies".
Maintenir un "état"
Conception d'un
d'un s ite WEB
177
u
Un cookie
renvoyé est
par leune portion
serveur de l'en-tête
(scriptl CGI)
'en-tête du document
et reçu par le
navigateur.
u Le cookie est rangé dans un fichier cookies.txt par le
navigateur Netscape, dans un répertoire Cookies par
Internet Explorer.
Content-type:
Content-type: text/html
text/html
Set-Cookie: <Nom>==<Valeur>;; expires=
Set-Cookie: expires=<Date>
<Date>;;
path= <Chemin> <Domaine>
path=<Chemin>; domain=<Domaine>;;
; domain=
secure
secure
<HTML>
<HTML> …
… </HTML>
</HTML>
u <Nom>=<Valeur>
obligatoire — chaînes de caractères (sans point-virgule, virgule ou
espace qui peuvent être URL-encodés : %..) définissant le nom et la
valeur du cookie.
compte=1
u expires=<Date>
facultatif — indique la date à partir de laquelle le cookie doit être
détruit.
Si ce paramètre n'est pas fourni, le cookie est détruit au moment où
on quitte le
le navi
navi g ate
ateur
ur .
u
domain= <Domaine>
facultatif — nom du domaine de la machine vers lequel le cookie peut
être renvoyé. Ce nom doit comporter au moins 2 points ".", La
comparaison est effectuée par la fin.
domain=.unice.fr
u path=<Chemin>
facultatif — tête du chemin qui doit être indiqué dans l'URL requise
pour déclencher l'envoi du cookie.
path=/~jdem
u
Lorsqu'une URL est
tous les cookies requise,etlerenvoi
concernés navigateur recherche
vers le serveur
un message de la forme :
Cookie: <Nom1>=<Valeur1>; <Nom2>=<Valeur2>; …
u Cette chaîne de caractères (sans "Cookie:") est
accessible dans la variable d'environnement
HTTP_COOKIE
u Le traitement de HTTP_COOKIE est analogue à celui
de QUERY_STRING (cf. diapo 149).
De plus ...
Conception d'un
d'un s ite WEB
183
Exemple de transaction
Conception d'un
d'un s ite WEB
184
Client Serveur
Set-cookie: client=Donald; path=/; expires=Monday,25-May-1998 23:59:59 GMT
Client Serveur
Cookie: client=Donald
Client Serveur
Set-cookie: legumes=carottes; path=/
Client Serveur
Cookie: client=Donald; legumes=carottes
Client Serveur
Set-cookie: laitages=yaourts; path=/
Client Serveur
Cookie: client=Donald; legumes=carottes; laitages=yaourts
Quelques références
Conception d'un
d'un s ite WEB
185
http://www.illuminatus.com/cookie.fcgi
bonne réflexion sur les risques encourus (très peu) et l'utilisation
des cookies.
http://www.gh-interactive.com/WEBMASTERREPORT2.HTML
magazine à parution (relativement) périodique traitant de
différents sujets concernant l'administration d'un serveur Web.
u
Faisons le point :
Côté cl
client Côté se
serveur
Javascript
Conception d'un
d'un s ite WEB
187
u J avas
avascc r ip
ipt
t est
est une extension de HTML qui permet
d'inclure, dans une page HTML, des fragments de
programmes interprétés par le navigateur.
u J avas
avascc r ip
ipt
t n'est
n'est pas du J ava simplifié. C'est un
langage de programmation à part entière, possédant
des possibilités très modernes, normalisé sous la
référence ECMA-262.
u Quelques références :
http://www.ecma.ch/
http://www.dpunkt.de/javascript/
http://developer.netscape.com/
http://www.imaginet.fr/ime/javascri.htm
<HTML>
<HTML>
<HEAD><TITLE>JavaScript
<HEAD><TITLE>Java
<HEAD><TITLE>Java Script
Script -- leçon
<HEAD><TITLE>JavaScript leçon
1</TITLE></HEAD>
1</TITLE></HEAD>
<BODY
<BODY BGCOLOR="White">
BGCOLOR="White">
<P>Texte
<P>Texte HTML
HTML normal.<BR>
normal.<BR>
<SCRIPT LANGUAGE="JavaScript">
<SCRIPT LANGUAGE="JavaScript">
document.write("Ceci
document.write("Ceci provient
provient d'un
d'un script
script JavaScript.")
JavaScript.")
</SCRIPT><BR>
</SCRIPT> <BR>
</SCRIPT><BR>
Et
Et voici,
voici, à
à nouveau,
à nouveau, du du texte
texte HTML.</P>
HTML.</P>
</BODY></HTML>
</BODY></HTML>
…
…
<SCRIPT
<SCRIPT LANGUAGE="JavaScr
LANGUAGE="JavaScript">
LANGUAGE="JavaScript">
LANGUAGE="JavaS ipt">
cript">
<!-- caché aux vieux navigateurs.
<!-- caché aux vieux navigateurs.
document.write("Ceci
document.write("Ceci provient
provient d'un
d'un script
script JavaScript.")
JavaScript.")
//-->
//-->
</SCRIPT>
</SCRIPT>
...
...
Les événements
Conception d'un
d'un s ite WEB
190
u
Evénements
mamelles la gprogrammation
de et es tion
tionnair
naires
es d'
d'événemen
Jévénements
avascc ri pt ts
avas . sont les 2
u La programmation J avas
avascr
cr i pt est
est donc
essentiellement réactive.
u Un événement est une situation fugitive qui est
apparaît dans certaines conditions :
onLoad on vient de charger unune nouvelle page,
onClick on vient de cliquer sur un bouton,
onMous
onM ouseOv
eOver
er la souri
souris
s vient
vient d'entrer
d'entrer dans
dans la
la zone
zone d'un
d'un lien,
lien,
onMo
on Mous
useO
eOut
ut la sou
souri
ris
s vien
vientt de sor
sorti
tirr d'une
d'une zon
zone
e de lie
lien,
n,
...
"Objets" J
Jav
avas
ascr
cr i pt
Conception d'un
d'un s ite WEB
192
u Le langage J avas
modèle-objet avascr
cr ipt est
simple. est construit autour d'un
u Toutes les entités que permettent de manipuler les
instructions de ce langage sont des atomes ou des
objets caractérisés par des attributs :
l certains définissent ses pr
propr
opriétés
iétés — qui sont d'autres objets ou
atomes,
l d'autres définissent ce que l'on peut lui faire : ce sont ses
méthodes .
u Nous verrons que les objets peuvent être définis et
créés, par contre, il n'existe aucun mécanisme
d'héritage.
Entités prédéfinies
Conception d'un
d'un s ite WEB
193
u Un objet étant
(propriétés ou un dictionnaire,
méthodes) peut l'accès aux attributs
donc naturellement
être :
l Math["sin"] fonction
Math["sin"] fonction sinus
l Math["
Math["PI"]
PI"] val
valeur
eur du nom
nombre
bre Pi
u Cette écriture étant assez lourde, on lui a associé un
sucre syntaxique (opérateur "." qui s'associe à
gauche) :
l Math.PI Math.sin
u Exemple :
l Math
Math.s
.sin
in(1
(1.5
.5)) calc
calcul
ule
e le si
sinu
nus
s d'
d'un
un an
angl
gle
e de 1.
1.5
5 ra
radi
dian
ans
s
window
mi
mim
meT
eTyp
ypes
es[.
[..]
.] an
anch
chor
ors[
s[..
..]] / li
lin
nks
ks[.
[..]
.]
images[..]
location
u La
esthiérarchie
plus faciledes objets associés
à parcourir à l'objetses
si on a nommé document
éléments.
u Ainsi :
l L' image définie par :
– <IMG SRC="../Image1.gif" NAME="Chiche" ...>
sera repérée par : document.Chiche
l Le lien défini par :
– <A HREF="lesson_1.html" NAME="lesson_1">…
sera repéré par : document.lesson_1
l etc...
<FORM
<FORM NAME="somme">
NAME="somme">
<INPUT
<INPUT TYPE="Text"
TYPE="Text" NAME="x"
NAME="x" VALUE="0"><BR>
VALUE="0"><BR> ++
<INPUT
<INPUT TYPE="Text"
TYPE="Text" NAME="y"
NAME="y" VALUE="0"><BR>
VALUE="0"><BR>
<INPUT
<INPUT TYPE="Button"
TYPE="Button"
VALUE="
VALUE=" == ""
onClick=
onClick=
"document.somme.z.value
"document.somme.z.value ==
String(parseInt(document.somme.x.value)
String(parseInt(document.somme.x.value) ++
parseInt(document.somme.y.value))">
parseInt(document.somme.y.value))">
<INPUT
<INPUT TYPE="Text"
TYPE="Text" NAME="z"
NAME="z" VALUE="0">
VALUE="0">
</FORM>
</FORM>
u
A
et la base,
des . atomes , des objets , des variables
on a des
opérateurs
u Une variable est, a priori, un nom utilisé pour
désigner la valeur d'un atome ou d'un objet.
u Les atomes, les objets, les variables, les opérateurs et
les expressions peuvent être regroupés pour former
des expressions .
u Un pr
prog
og r amme est une expression.
Et c'est tout !
u Nous avons déjà vus certains atomes et certains
objets, voyons les opérateurs.
Nom de variable
Conception d'un
d'un s ite WEB
201
Opérateurs
Conception d'un
d'un s ite WEB
202
Expressions : sémantique
Conception d'un
d'un s ite WEB
203
Evaluation
Conception d'un
d'un s ite WEB
204
u Comme
fonction,un opérateur de
l'évaluation estl'expression
la représentation
qui led'une
contient
revient à remplacer, dans sa formule de définition, ses
paramètres par ses arguments.
paramètre argument
Soit f(x)
Soit f(x) = 1 + x.
x.(2
(2 + 3.x)
3.x)
et g(y) = y.y
f(g(5))
f(g(5)) = 1 + g(5).
g(5).(2
(2 + 3
3.g(5)
.g(5))) f(g(5)
f(g(5))) = f(5.5)
f(5.5)
= 1 + 5.5.(2 + 3.5.5) = f(25)
= 1926 = 1 + 25.(2 + 3.25)
Evaluation en = 1926
ordre nor ma
mall Evaluation en
les arguments sont ordre applicatif
applicatif
passés non évalués
lespassés
arguments sont
évalués
Laquelle choisir ?
Conception d'un
d'un s ite WEB
206
Expressions vs Instructions
Conception d'un
d'un s ite WEB
207
Séquences
Conception d'un
d'un s ite WEB
208
Opérateurs standards
Conception d'un
d'un s ite WEB
209
Opérateurs de relation
== égaux != différents
< inférieur > supérieur
<= inférieur ou égal >= supérieur ou égal
Expressions standards
Conception d'un
d'un s ite WEB
210
u La syntaxede
et Javascript
la sémantique des expressions
standards est identique* à celles
utilisées par le langage C.
u Exemples :
3 x
3+4 3*4+5
(x < y) || (x < z) (n == 0)
(3 + x) * (5 + z) factorielle(6)
u La priorité des opérateurs est la même et les
parenthèses sont utilisées de la même façon.
Lieurs de variables
Conception d'un
d'un s ite WEB
213
Paramètres :
noms liés dans la séquence
Opérateurs "paresseux"
Conception d'un
d'un s ite WEB
214
u Certains opérateurs
considérés pourraient très bien être
comme standards.
u Pourtant, il est commode (plus efficace) de les
considérer comme spéciaux car tous leurs arguments
ne sont pas nécessaires à leur évaluation.
u On peut procéder ainsi pour toutes les fonctions
incomplètes.
Opérateurs booléens
&& conjonction
|| disjonction
! complémentation
… ou objets vivants ?
Conception d'un
d'un s ite WEB
216
u On admettra alorssuivantes
les deux opérations
complémentaires :
attacher un nom à une valeur : définir une
une variable,
attacher une valeur à un nom : affecter une
une variable.
u Le lien nom-valeur n'est plus éternel et la variable
peut avoir une histoire.
x=3 définition de la variable x
x=4 affectation de la variable x qui, à présent, vaut 4
x=x+2 ré-affectation de la variable x
u Ce qui est à droite d'un signe = fait référence au
passs é tandis que ce qui est à gauche représente le
pas
futur .
J ean DE MAR TIN I © 14.02.00
Opérateurs d'affectation
Conception d'un
d'un s ite WEB
217
Opérateurs
d'inc(dec)rémentation
Conception d'un
d'un s ite WEB
218
u Certains
implicite opérateurs
: décrivent une affectation
++ incrémentation
-- décrémentation
u L'incrémentation (décrémentation) peut être effectuée
avant ou après l'évaluation de l'expression contenant
l'opérateur.
u Préincrémentation (prédécrémentation) :
(x++ + 2)
(x++ 2) on év
éval
alue
ue x+
x+2
2 pui
puiss x es
estt inc
incré
réme
ment
ntée
ée
(++x
(++x + 2)
2) on in
incr
crém
émen
ente
te x pui
puis
s on
on éva
évalu
lue
e x+ 2
Les objets J
Jav
avas
ascr
cr i pt
Conception d'un
d'un s ite WEB
219
u Un objet javas c ri pt est
est décrit par sa fonction-
constructeur qui configure l'objet universel this en lui
définissant des attributs et des méthodes.
u Exemple — un nombre rationnel possède 2 attributs,
son numérateur et son dénominateur :
function Rationnel(n,d) {
this.numerateur = n;
this.denominateur = d;
}
u L'instanciation
standard new . d'un objet est effectuée par l'opérateur
u Instancier un objet, c'est en fabriquer un nouvel
exemplaire à partir de sa description.
u Exemple :
q12 = new Rationnel(1,2)
q34 = new Rationnel(3,4)
u Accès aux attributs :
q12.numerateur vaut 1
q12.denominateur vaut 2
On "envoie le message
somme" à l'objet q12.
J ean DE MAR TIN I © 14.02.00
Description de son
Conception d'un
d'un s ite WEB
comportement
224
Chiffre / opérande_initial
Clear / raz
L'automate
Conception d'un
d'un s ite WEB
225
"calcul").
Le formulaire "calculette"
Conception d'un
d'un s ite WEB
226
<FORM
<FORM NAME="calculette">
NAME="calculette">
<TABLE BORDER="5">
<TABLE BORDER="5">
<<TTR
R>> <<TTDDCCOOLLSSP
PAAN N==""44"" R
ROOW
WS SPPA ANN==""11"">>
<INPUT
<INPUT TYPE="Text"
TYPE="Text" NAME="n"
NAME="n" VALUE="0"></TD></TR>
VALUE="0"></TD></TR>
<TR>
<T R>
<TR>
<T R> <TD>
<T D><I
<TD>
<T <INP
D><I NPUT
<INP UT
UT TYPE
NPUT TY PE="
TYPE
TY PE="="Bu
Butt
="Bu tton
Butt on"
ttonon""" …
…o onC
onCli
onC
nCli lick
lick ck="="tr
ck="
="trtranansi
tran
ansi sitition
siti on('
tion
on(' ('ch
chif
('chiffr
chiffre'
iffre','
fre','1'
e','1')"
,'1')"><
1')"></T
)"></TD>
></TD>
/TD>
D>
<TD><INPUT
<TD><INPUT TYPE="Button"
TYPE="Button" … … onClick="transition('chiffre','2')"></TD>
onClick="transition('chiffre','2')"></TD>
<TD><INPUT
<TD><INPUT TYPE="Button"
TYPE="Button" … … onClick="transition('chiffre','3')"></TD>
onClick="transition('chiffre','3')"></TD>
<TD><INPUT
<TD><INPUT TYPE="Button"
TYPE="Button" … …
onClick="transition('operation','add')"></TD>
onClick="transition('operation','add')"></TD>
</TR>
</TR>
<TR>...</TR>
<TR>...</TR>
<TR>...</TR>
<TR>...</TR>
<<TTR
R>> <<TTDD>
D><
><<IIN
NPPUT
UTT TTYP
YYP
YPPEE==""BBu
Bu
utttttoon
n"""……oononC
nC Clliliicckk="
=="
=""rraazz()
(()
())"">><<//TTD
D>>
<TD><INPUT
<TD><INPUT TYPE="Button"
TYPE="Button" … … onClick="transition('chiffre','0')"></TD>
onClick="transition('chiffre','0')"></TD>
<TD><INPUT
<TD><INPUT TYPE="Button"
TYPE="Button" … …
onClick="transition('operation','neg')"></TD>
onClick="transition('operation','neg')"></TD>
<TD><INPUT
<TD><INPUT TYPE="Button"
TYPE="Button" … … onClick="transition('operation','div')"></TD>
onClick="transition('operation','div')"></TD>
</TR>
</TR>
</TABLE></FORM>
</TABLE></FORM>
L'état de la calculette
Conception d'un
d'un s ite WEB
227
La fonction de transition
Conception d'un
d'un s ite WEB
228
function
function transition
transition (e,v)
(e,v) {{
if (etat == "init") {
if (etat == "init")ifif{ (e
(e ==
== "chiffre")
"chiffre") {operande_initial(v);etat
{operande_initial(v);etat == "acquisition"}
"acquisition"}
return;
return;
}}
ifif (etat
(etat ==
== "acquisition")
"acquisition") {{
ifif (e
(e ==
== "chiffre")
"chiffre") {operande_courant(v)}
{operande_courant(v)}
ifif (e
(e ==
== "operation")
"operation") {{
operande
operande == parseInt(document.calculette.n.value);
parseInt(document.calculette.n.value);
calcul_initial(v);
calcul_initial(v);
etat
etat == "calcul";}
"calcul";}
return;
return;
}}
ifif (etat
(etat ==
== "calcul")
"calcul") {{
ifif (e
(e ==
== "chiffre")
"chiffre") {operande_initial(v);etat
{operande_initial(v);etat == "acquisition"}
"acquisition"}
ifif (e
(e == "operation")
== "operation {calcul_courant(v)}
return;
return;
}}
}}
L'action "raz"
Conception d'un
d'un s ite WEB
229
function
function raz raz ()
() {{
rreessu l t
ultata t == 00;;
ooppeerraannddee == 00;;
eettaatt == ""iin
niitt"";;
document.calculette.n.value
document.calculette.n.value == "0"; "0";
}}
function
function operande_initial
operande_initial (v)
(v) {{
document.calculette.n.value
document.calculette.n.value == v;
v;
}}
function
function operande_courant
operande_courant (v)
(v) {{
if
if (document.calculette.n.value
(document.calculette.n.value ==
== "0")
"0") {{
document.calculette.n.value
document.calculette.n.value == v;
v;
}} else
else {{
document.calculette.n.value
document.calculette.n.value +=
+= v;
v;
}}
}}
function
function calcul
calcul (v) {
if
if (v == "add
(v == "a dd")
"add
"a ")
dd")
") {res
{r
{re esul
resu ulta
sulttat
ltatt +=
at +== op
oper
eran
oper
op eraande
andde;}
nde; ;}}
e;}
if (v ==
if (v == "s"sub
"s ub")
"sub ")
ub")
") {res
{r
{re esul
resu ulta
sulttat
ltatt -=
at -= opop
oper
opeera
eraa nd
nde
rand
nde;e ;}
e;}}
if
if (v(v ==
== "mul
"m
"mul
"m ul")
")
ul")
") {re
{r
{re esult
ressu
sulltat
att **=
ulta
tat *== op
oper
eran
oper
op eraande
andde;}
nde; ;}}
e;}
iiff ((v
v =
==
=
(v ==
(v "d
" d
== "dii v
v"
"
"div") ) { r e sul
ultta
{resultat /= t /=
/= o
op
operande;}}
/= opp er a nd e ;
document.calculette.n.value
document.calculette.n.value = resultat; = resultat;
}}
function
function calcul_initial
calcul_initial (v)
(v) {
if
if (v(v ==
== "ne
"n eeg")
"neg
"n g")
g"")) {res
{r
{re esul
resu ulta
sulttat
ltatt == --o
at op
oper
-opeera
peraand
nde
rand
nde;ee;}
;}}
calcul(v);
calcul(v);
}}
function
function calcul_courant
calcul_courant (v) (v) {{
if
if (v(v ==
== "ne
"n eeg")
"neg
"n g")
g"")) {res
{r
{re esul
resu ulta
sulttat
ltatt == --r
at resu
result
-res
esul ltat
ultaat;}
tat;;}}
t;}
calcul(v);
calcul(v);
}}
En guise de conclusion
Conception d'un
d'un s ite WEB
233