III. L`environnement Web Au sommaire 1. Introduction 1. Introduction

Transcription

III. L`environnement Web Au sommaire 1. Introduction 1. Introduction
Au sommaire
1.
III. L’environnement Web
Laurence Duchien
LIFL - équipe GOAL- Projet INRIA Jacquard
USTL - bâtiment M3 Extension- bureau 203
[email protected]
http://www.lifl.fr/~duchien
Septembre 2005-Janvier 2006
Master Informatique M1
2005-2006
1
1. Introduction
Introduction
2. URL
3. HTML
4. CCS
5. HTTP
6. Serveurs HTTP
7. CGI
8. Servlets
Master Informatique M1
2005-2006
2
1. Introduction
Hypertexte
WWW : World Wide Web
1989 - Tim Berners-Lee
Mise en ligne de documentation (scientifique)
Texte classique
organisation linéaire
avec index, sommaire, glossaire, notes,…
Les concepts :
Hypertexte
organisation non linéaire (hiérarchique, graphe, …)
Hypertexte
: HTML
Client/serveur
: HTTP
schéma de désignation : URL
Master Informatique M1
2005-2006
3
texte enrichi de liens
renvoi vers un document
renvoi vers une partie d’un document
Master Informatique M1
2005-2006
4
1. Introduction
1. Introduction
Client/Serveur
Schéma de désignation
Client
: le navigateur (Internet Explorer, Netscape),
Serveur : le serveur Web (Apache, Microsoft IIS)
Le protocole : HTTP
Chaque page a un nom unique => pas d’ambiguïté possible
protocole://serveur/page
•
Le client émet la requête
•
Le serveur répond en fournissant le document demandé
ou un message d’erreur
Master Informatique M1
2005-2006
Uniform Resource Locator (URL) : désigne une page Web
5
http://www.lifl.fr/index.html
Organisation hiérarchique des pages
protocole://serveur/repertoire/page?requête
Master Informatique M1
2005-2006
6
1. Introduction
1. Introduction
Standards
Bibliographie
HTTP
0.9 : version de base avec requête/réponse
1.0 : version standardisée IETF (RFC 1945)
1.1 : version étendue (connexions persistantes) (RFC 2068)
HTML
1.0 version initiale
2.0 version standardisée W3C
3.0 version étendue (tableaux, images cliquables, applets)
4.0 version étendue (frames, feuilles de styles)
XML
1.0
URL
stable
Master format
Informatique
M1 depuis 1989
7
2005-2006
très nombreuse
recherche sur moteur amazon.com : sur HTML 96 livres en
français, 228 en anglais
Sélection
Webmaster in a Nutshell, S. Spainhour, R. Eckstein, 2eme
édition, O’Reilly
couvre HTML, CCS, XML, XSL, JavaScript, CGI, PHP, HTTP,
Apache
Programmation Java côté serveur, A. Patzer, Eyrolles,
Couvre Servlets,
Master Informatique
M1
2005-2006
JSP, EJB.
8
2. URL
3. HTML
URL dans sa forme générale :
HTML est une instance de SGML (Standard
Generalized Markup Language)
protocole"://"[utilisateur[":"motdepasse]@](nom|adresse)[:po
rt]["/"chemin]["/"nomdefichier][#ancrelocale][?options]
Le format complet dans les RFC 1738 et 1808
http://www.w3.org/Addressing/
Exemple :
http://www.imag.fr/equipe/sirac/projet.html
•
Langage de balisage
•
Description d’un document et de son formatage
•
Document : information + règles de présentation
ftp://user:[email protected]/personal/latex.sty
http://123.87.54.251/index.html
http://www.altavista.com/query.html?lille+dess
Ex : <b>ce texte est en gras</b>
ce texte est en gras
http://xenon.inria.fr:8080/hello.html
http://alken.lifl.fr/index.html#annuaire
Master Informatique M1
2005-2006
9
Master Informatique M1
2005-2006
10
SGML
SGML (cont.)
SGML : issu du mode de l'édition et de la
gestion documentaire industrielle
2 idées fondamentales dans SGML :
devenu un standard ISO (8879) en 1986
très complet
• permet de décrire des classes de documents
SGML : méta-langage qui permet de définir des
classes de documents (des DTD Document Type
Definition)
(plutôt) lourd à gérer
la norme fait 800 pages
suite applicative éditeur, visualiseur, dévermineur, …
SGML atteind ! 100000 lignes de code
Master Informatique M1
2005-2006
• approche descriptive : dissocie l'organisation logique
(point de vue de l'auteur) de sa structure physique (point
de vue du typographe)
11
DTD HTML version 1 : 3 pages de SGML
DTD HTML version 4.0 : 300 pages de SGML
Master Informatique M1
2005-2006
12
Structure d’un document HTML
Structure d'un document HTML
Déclaration de la version HTML
utilisée
En-tête
Corps du document
<!DOCTYPE version HTML
utilisée >
<HTML> début du document
<HEAD>
En-tête
</HEAD>
<BODY>
corps du document
</BODY>
Master Informatique M1
</HTML> fin du document
2005-2006
Règles générales pour les balises
• <montag> … </montag>
• non sensible à la casse
• (i.e. <montag> " <MONTAG>)
• peuvent contenir des options
Option : nomattribut = "valeur«
Ex : <IMG SRC="abc" ALT="toto">
SRC et ALT : paramètres de la balise
IMG
• Commentaires
<!-- commentaire dans un fichier HTML -->
• Jeu de caractères : ISO 8859-1 (Latin-1)
• Contient tous les caractères accentués
des langues latines (sauf œ)
• Possibilité d'encodage des caractères :
é &eacute;
< > & : &lt; &gt; &amp;
13
Exemple d'en-tête de document
HTML
<HEAD>
<TITLE>Exemple d'en-tête HTML</TITLE>
<META NAME="auteur" CONTENT="laurence">
<META NAME="mots clés" CONTENT=« CAR">
<BASE HREF="http://www.lifl.fr/cours.html">
<SCRIPT="javascript">
</HEAD>
Master Informatique M1
2005-2006
15
Version HTML
Déclaration de la version de HTML utilisée
• Exemple :
<! DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 3.2 Final/EN">
correspond à un DTD public défini par le consortium W3,
version finale de HTML 3.2, en langue anglaise
<! DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 4.0/EN">
correspond à la version de HTML 4.0
• utilisé par les outils de validation pour vérifier la conformité
d'un document par rapport aux spécifications
• utilisé par les navigateurs pour déterminer s'ils sont
capables d'afficher les documents
Master Informatique M1
2005-2006
14
En-têtes des documents HTML
<TITLE>un titre</TITLE>
• obligatoire
• définit le titre du document
• apparaît dans la barre supérieure du navigateur
• nom dans la liste des signets (bookmark)
<SCRIPT>langage de script par défaut</SCRIPT>
<STYLE>feuille de style par défaut</STYLE>
<BASE HREF="http://www.lifl.fr">
• URL de base pour toutes les références de ce document
<META NAME="clé" CONTENT="valeur">
• fournit des informations sur le document
exemple de (clé,valeur)
(author,Laurence Duchien)
(keywords,cours Web)
Master (refresh,tous
Informatique M1 les ans)
16
2005-2006
Corps des documents HTML
Balises de base
Balises de base (suite)
<BODY attr1="val1" … attrn="valn"> <Hn>Titre de niveau n</Hn>
attributs optionnels
6 niveaux de titre possibles
option ALIGN=center, right ou
• bgcolor : couleur de fond
left
• text : couleur du texte
Saut de paragraphe
• background : URL de l'image en <P>
<BR>
Retour forcé à la ligne
fond d'écran
<HR>
Trait horizontal
• link : couleur des liens non
<B>Texte
en gras</B>
encore visités
<I>Texte
en
italique</I>
• vlink : couleur des liens déjà
<PRE>Texte préformaté (à ne
visités
• alink : couleur des liens lorsque pas reformater)</PRE>
l'on clique dessus
• sinon, valeur par défaut du
Master Informatique M1
navigateur
2005-2006
17
Codage des couleurs dans HTML
Pour les couleurs, 2 solutions :
•
#RRGGBB (en hexa)
• des noms en clair : green, yellow, purple, red, blue, …
Nom de couleur en clair :
+ 136 noms de couleur X11
dont 78 possèdent 4 déclinaisons
ex : blue1 (le + clair), blue2, blue3, blue4 (le + foncé)
+ 100 nuances de gris
de grey1 (le + foncé) à grey100 (le + clair)
Attention à l'utilisation des couleurs
on n'obtient pas forcément le même rendu d'un navigateur à
l'autre
Master Informatique M1
2005-2006
18
Les images
Les liens
Exemple : <IMG SRC="maphoto.gif">
Insère l'image maphoto.gif
Format : <A HREF="url">lien</A>
Attributs optionnels
•
ALIGN =
top, middle, bottom, left ou right
aligne l'image par rapport à la ligne
•
•
HEIGHT, WIDTH : hauteur, largeur de l'image
ALT = message pour les navigateurs en mode texte
Formats d'images couramment par les navigateurs : GIF,
JPEG
Master Informatique M1
2005-2006
19
lien vers un fichier distant
<A HREF="#etiquette">lien</A>
• lien vers une étiquette du document courant
• l'étiquette est définie par
<A NAME = "etiquette"> </A>
l'étiquette est appelée ancre
Master Informatique M1
2005-2006
20
Les listes
Les listes (cont.)
liste énumérée
liste numérotée <OL>
<UL>
attribut optionnel TYPE=DISC, SQUARE ou CIRCLE
<UL TYPE=DISC>
•niveau 1, item 1
<LI>niveau 1, item 1
•niveau 1, item 2
<LI>niveau 1, item 2
o niveau 2
<UL TYPE=CIRCLE>
<LI>
niveau 2
! niveau 3
<UL TYPE=SQUARE>
<LI>niveau 3
</UL>
</UL>
</UL>
Master
Informatique M1
21
2005-2006
Les tables
Exemple :
<TABLE>
<TR> ligne
<TH> en-tête de colonne
<TD> colonne
<TABLE>
ALIGN : alignement de la table
WIDTH : largeur (en pixels)
HEIGHT : hauteur
BORDER : bordure
CELLSPACING : espace entre les
cellules
CELLPADING : espace entre contenu
et bordure
tous les attributs
de couleur de 23
Master+ Informatique
M1
2005-2006
<BODY>
<OL TYPE=A>
<LI>niveau 1, item 1
<LI>niveau 1, item 2
<OL TYPE=I>
<LI>niveau 2
<OL TYPE=1>
<LI>niveau 3
</OL>
</OL>
</OL>
Master
Informatique M1
2005-2006
A. niveau 1, item 1
B. niveau 1, item 2
I. niveau 2
1. niveau 3
22
Les tables (cont.)
Format :
attributs optionnels de TABLE
attribut optionnel TYPE=1 (décimal), a (minuscule), A (majuscule), i
ou I (romain)
<TR>
<TH>en-tête 1</TH>
<TH>en-tête 2</TH>
</TR>
<TR>
<TD>cellule 1,1</TD>
<TD>cellule 1,2</TD>
</TR>
<TR>
<TD>cellule 2,1</TD>
<TD>cellule 2,2</TD>
</TR>
</TABLE>
Attributs optionnels de TR
ALIGN : alignement horizontal des cellules de la
ligne
VALIGN=TOP, MIDDLE ou BOTTOM : alignement
vertical des cellules de la ligne
HEIGHT
+ tous les attributs de couleur de <BODY>
attributs optionnels de TD
ALIGN, VALIGN, WIDTH, HEIGHT
NOWRAP : ne pas casser les mots
ROWSPAN : multi-colonne s'étendant sur +sieurs
lignes
COLSPAN : multi-colonne s'étendant sur +sieurs
colonnes
Master Informatique
24de <BODY>
+ tous lesM1attributs de couleur
2005-2006
Exemple de table
<TABLE BORDER=4 CELLSPACING=2
CELLPADDING=0 WIDTH="450" HEIGHT="61" >
<CAPTION >légende en haut</CAPTION>
<TR>
<TH VALIGN=BOTTOM WIDTH="116"
HEIGHT="30">en-tête 1</TH>
<TH WIDTH="173" HEIGHT="50">en-tête 2
(centrée par défaut) et en gras</TH>
<TH ALIGN=RIGHT WIDTH="144">titre de
cellule cadrée à droite</TH>
</TR>
<TR>
<TD NOWRAP HEIGHT="17">contenu d'une
cellule avec NOWRAP</TD>
<TD WIDTH="173" HEIGHT="20">contenu sans
l'attribut NOWRAP</TD>
<TD></TD>
</TR>
<TR>
<TD HEIGHT="17">&nbsp;</TD>
<TD></TD>
<TD BGCOLOR="#D7FB23">couleur de fond
</TD>
Master Informatique M1
</TR>
2005-2006
</TABLE>
25
Exemple de formulaire
<! DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 3.2 Final/EN">
<HTML>
<BODY>
<FORM ACTION= http://widget.com/cgi-bin/widgetorder METHOD=POST>
Nom <INPUT NAME="client" SIZE=46> <P>
Rue <INPUT NAME="rue" SIZE=40> <P>
Ville <INPUT NAME="ville" SIZE=20>
Code postal <INPUT NAME="cp" SIZE=5> <P>
Carte de crédit No <INPUT NAME="carte" SIZE=10>
Expire <INPUT NAME="expire" SIZE=4>
M/C <INPUT NAME="cc" TYPE=RADIO VALUE="mc" checked>
VISA <INPUT NAME="cc" TYPE=RADIO VALUE="vis">
Contre remboursement
<INPUT NAME="cr" TYPE=CHECKBOX> <P>
<INPUT TYPE =SUBMIT VALUE="Envoi">
<INPUT TYPE =RESET VALUE="Remise à zéro"> <P> Sélection de fichier :
Master Informatique M1
27
<INPUT TYPE =FILE NAME="fichier"> <P>
2005-2006
Les formulaires
Objectif : pouvoir saisir des données dans une fenêtre du
navigateur Web et les envoyer au site serveur
Domaines d'application
• saisir des commandes pour un fournisseur
• soumettre des requêtes à des moteurs de recherche
Contient les éléments de saisie suivants :
• champs de texte à remplir
• boîtes à cocher
• boutons radio
• cartes actives
• boutons
Les formulaires
: balise <FORM>
Les éléments de saisie : balise <INPUT>
LesInformatique
menus déroulants
: balise <SELECT>
Master
M1
26
2005-2006
Exemple (cont.)
Menu déroulant :
<SELECT NAME="MenuDeroulant">
<OPTION>choix 1</OPTION>
<OPTION>choix 2</OPTION>
</SELECT>
</FORM>
</BODY>
</HTML>
Master Informatique M1
2005-2006
28
Les options de <FORM>
POST
ACTION : URL pour l'envoi les données du formulaire
METHOD : méthode HTTP à utiliser pour l'envoi. En général POST
(plus rarement GET).
Les options de <INPUT>
POST envoie dans le corps du message sous la forme d'une seule
ligne (sans saut) avec :
les variables
les valeurs
les différentes variables sont séparées par &
les espaces sont remplacés par +
si une boîte n'a pas été cochée, elle est omise
Exemple :
client=Anne+Vier&rue=54+rue+Blanc&ville=Paris&cp=75001&carte=01
23456789&cc=vis&cr=on&fichier=ess.ps&MenuDeroulant=choix+2
NAME : identificateur de la variable
plusieurs INPUT avec le même id de variable correspondent à une série de
bouton dont un seul doit être coché
VALUE : nom du champ apparaissant à l'écran
SIZE : taille du champ texte
TYPE : type de champ
TEXT (type par défaut)
RADIO
CHECKBOX
PASSWORD : zone de saisie d'un mot de passe
SUBMIT : bouton pour envoyer les données
RESET : bouton pour remettre à zéro le formulaire
FILE : sélectionner un fichier
Master Informatique
M1: zone de texte sur plusieurs
29 lignes </TEXTAREA>
<TEXTAREA>
2005-2006
<TEXTAREA NAME="…" ROWS=3 COLS=40>
Les images cliquables
Images simples : <IMG SRC="logo.gif">
attributs possibles : HEIGHT, WIDTH, ALIGN, …
Images cliquables : on insère la balise <IMG> dans une
balise de lien <A HREF>
Exemple : <A HREF="http://www.lifl.fr">
<IMG SRC="logo.gif">
</A>
- l'image acquiert un cadre bleu
- on charge le lien en cliquant sur n'importe quelle zone
de l'image
Master Informatique
M1
31
2005-2006
Toutes les balises habituelles sont autorisées dans le corps du
formulaire
Master Informatique M1
2005-2006
30
Images cliquables sous forme de
plan
L’image comporte plusieurs liens
en fonction des coordonnées
du curseur au moment du clic,
le document chargé est #
2 étapes :
1. Définition d'un plan <MAP>
2. On déclare une association entre le
plan et l'image
attribut USEMAP de la balise
<IMG>
Exemple :
<MAP NAME="monplan.map">
<AREA SHAPE="rect"
COORD="100,1,199,30"
HREF="zone1.html>
<AREA SHAPE="rect"
COORD="200,1,299,30"
HREF="zone2.html">
Master
Informatique M1
</MAP>
2005-2006
SHAPE : forme de la zone cliquable
4 valeurs possibles
RECT : rectangulaire
CIRCLE : circulaire
POLY : polygonale
DEFAULT : la zone restante non
encore attribuée
COORD : une liste séparée par des
virgules des coins de la zone (centre +
rayon pour le cercle)
<IMG SRC="barremenu.html"
USEMAP="#monplan.map">
USEMAP : URL du document dans lequel
est défini le plan (ici dans le document
32
lui-même)
Les cadres (frames)
Les cadres (cont.)
Objectif : scinder un
document en plusieurs cadres
indépendants
• si on dépasse 100% (ex :
"65%,20%,20%") le navigateur
applique une règle de 3 pour
ramener les dimensions à
100%
• balise <FRAMESET> pour
débuter la définition d'un
ensemble de cadres
• balise <FRAME> définit
chaque cadre
• Exemple :
<FRAMESET ROWS="60%,*"
COLS="65%,20%,*">
2 lignes : 60 % de la hauteur
de la fenêtre , le reste
3 colonnes : 65 % de la largeur,
Master Informatique M1
33
20 % , le reste
2005-2006
Les cadres (cont.)
Les <FRAMESET> se définissent avant le corps <BODY> du document
avec :
• un fichier html avec juste la définition du <FRAMESET>
• autant de fichiers html qu'il y a de balise <FRAME>
Ex : <! DOCTYPE HTML PUBLIC "-//W3C/DTD HTML 3.2 Final/EN">
<HTML>
<HEAD> ... </HEAD>
<FRAMESET ROWS="60%,*">
<FRAME SRC="frame1.html" NAME="aDroite">
<FRAME SRC="frame2.html" NAME="aGauche“ SCROLLING=yes>
</FRAMESET>
<NOFRAMES>
Ce texte est affiché par les navigateurs qui ne savent pas interpréter
les cadres
</NOFRAMES>
Master
Informatique M1
35
</HTML>
2005-2006
on peut entrelacer les définitions de
• on peut indiquer une taille en
cadres
pixels : "50,100,150"
• on peut omettre plusieurs
dimensions : "10%,3*,*,2*"
1ère
: 10 %
2ème : 3/6 du restant (i.e.
de 90%)
3ème
: 1/6 de 90%
4ème
: 2/6M1de
Master
Informatique
2005-2006
90%
<FRAMESET COLS="50%,*">
<FRAMESET ROWS="50%,*">
…
</FRAMESET>
<FRAMESET ROWS="33%,50%,*">
…
</FRAMESET>
34
</FRAMESET>
Les cadres (cont.)
Attributs de la balise <FRAME> :
• SRC fournit le document source à afficher dans le cadre
• NAME définit un identificateur pour le cadre
• SCROLLING ajoute des barres de défilement au cadre
L'identificateur de cadre est utilisé lorsque l'on souhaite qu'un
lien s'affiche dans un cadre précis
Ex : si le frame1.html contient le lien suivant
<A HREF="..." TARGET="aGauche">
le fichier spécifié par l'attribut HREF s'affichera dans le
cadre d'identificateur aGauche défini précédemment
Master Informatique M1
2005-2006
36
Les éditeurs HTML
Exemple FrontPage
Remplissent pour la création, modification, édition
des pages HTML le même rôle que les éditeurs de
texte "traditionnels"
Nombreux produits (gratuits et payants disponibles)
Une recherche sur Yahoo retourne 39 références !
Les plus courants
• Netscape Page Composer
• Microsoft FrontPage
• WebMaster, tkHTML, HotMetal, asWedit, Phoenix
• Informatique
...
Master
M1
37
2005-2006
4. CSS (Cascading Style Sheets)
Master Informatique M1
2005-2006
38
CSS (Cascading Style Sheets)
Principe : permet de factoriser des éléments de présentation
de plusieurs pages
Balise <STYLE> dans l'en-tête des documents
<HTML>
<HEAD>
<STYLE>
typedebalise { prop1:valeur1; … ; propn:valeurn}
Ex : H1{font-style : italic; color :blue;}
…
</STYLE>
</HEAD>
<BODY><H1>Titre en bleu</H1> … </BODY>
</HTML>
Les propriétés définissent le rendu graphique des balises
Master Informatique M1
2005-2006
39
Master Informatique M1
2005-2006
40
Définition du style
Définition du style
<STYLE>
H1 { font-family: Arial; font-size: 24pt }
EM { font-weight: bold }
</STYLE>
La mise en forme avec les CSS concerne les fontes, les couleurs,
le positionnement du texte, l'espacement
Les feuilles de style sont dites en cascade ("cascading") :
<HEAD>
<STYLE> … </STYLE>
<STYLE> … </STYLE>
</HEAD>
Les propriétés sont appliquées dans l'ordre inverse de leur
déclaration
Master Informatique M1
41
2005-2006
Les fontes/les couleurs
Les fontes
font-family: nom de la fonte (Helvetica, Times, Arial)
ou nom générique (serif, monospace, …)
font-weight: normal, bold ou lighter ou un nb multiple
de 100 (400:normal et 700:bold)
font-size: taille absolue (12pt, 2in, small) ou relative
(larger, smaller ou en % : 90%)
font-style: normal, italique ou oblique
Les couleurs
color:
couleur (hexa #rrggbb ou un nom)
background-color: couleur de fond
background-imag: image de fond (url(image.gif))
Master Informatique M1
2005-2006
42
Le texte/ L’espacement
Liaison document-style
Le positionnement du texte
Définir la manière dont on lie un document avec son style interne :
la directive @import url(url)
inclusion de fichier
<STYLE> @include url("demo.css") </STYLE>
text-alignment: left, right, center, justify
display:inline : pas de passage à la ligne avant l'elt
block : passage à la ligne avant l'elément
list-item :
l'elt est un item dans une liste
L'espacement
word-spacing:
l'espacement entre les lettres
letter-spacing:
l'espacement entre les mots
pour une liste complète des propriétés, voir par
exemple www.w3.org/TR/REC-CSS1
43
Master Informatique M1
2005-2006
externe : balise <LINK> pour définir un lien entre 2 documents
<LINK REL=stylesheet HREF="demo.css“ TYPE="text/css">
•
REL : relation entre les documents mis en relation
•
HREF : URL du lien
•
TYPE : type (MIME) du lien
Plusieurs balises <LINK> peuvent être utilisées pour faire référence à
plusieurs feuilles de style
Le fichier demo.css contient le corps du style
Le nombreux éléments de formatage peuvent également être spécifiés dans
le corps du document (évidemment) moins souple
Master Informatique M1
44
2005-2006
Création de styles personnalisés
<HEAD>
Création d'un style
•
•
Exemple
<STYLE>
dans le fichier de style
dans l'en-tête du document
DIV.style1 { font-size: 24pt; fontweight: bold }
DIV.nomdustyle{ prop1:valeur1; … ; propn:valeurn}
ex : DIV.style1 { font-size: 24pt; font-weight: bold }
Dans le document, on référence le style :
<BODY>
<DIV CLASS="style1">Texte selon style1</DIV>
</BODY>
Deux types de style : DIV ou SPAN
DIV concerne les styles applicables à un paragraphe
SPAN
concerne
Master
Informatique
M1 les styles applicables
45 à une partie de texte
2005-2006
SPAN.style2 { font-style: oblique }
</STYLE>
</HEAD>
<BODY>
Texte selon <DIV
CLASS="style1">style1</DIV>
Texte selon <SPAN
CLASS="style2">style2</SPAN>
</BODY>
Master Informatique M1
2005-2006
46
4. Le protocole HTTP
Le protocole HTTP
http: hypertext transfer
protocol
http: service de transport
PC avec
Explorer
Modèle client/serveur
•client:
navigateur qui
demande, reçoit et
affiche des objets Web
st
ue
eq
r
se Server
p
on
htt
avec
esp
r
tp
NCSA Web
ht
server
•serveur:
envoie des
objets web en réponse aux
requêtes
http1.0: RFC 1945
Mac avec
Navigator
http1.1: RFC 2068
Master Informatique M1
2004-2005
htt
pr
equ
est
htt
pr
esp
ons
e
http est “sans état”
Le serveur ne maintient
aucune information sur
les requêtes
précédentes du client
Le client initie la connexion TCP
(création d’une socket) vers le
serveur sur le port 80
Les protocoles qui gèrent un
état sont complexes!
Le serveur accepte le connexion
TCP venant du cleint
L’histoire passée (état) doit
être maintenue
Des messages http sont
échangés entre navigateur
(client http) et serveur Web
(serveur http)
La connexion TCP est fermée
47
Master Informatique M1
2004-2005
48
Si le client/serveur tombe,
leurs vues de l’état peuvent
être incohérentes, et doivent
donc être réconciliées
Exemple HTTP
Exemple HTTP (cont.)
Supposons un utilisateur qui entre l’URL
www.UneUniversite.edu/unDepartement/home.index
(contient texte &,
references à 10
Images jpeg)
4. Le serveur htto ferme la
5. -Le client http reçoit le
message de réponse contenant le
fichier html.
- Il analyse (parse) le fichier
html reçu, affiche le html. En
parsant le fichier html, il trouve
10 objets jpeg référencés
1a. Le client http initie la
connexion TCP vers le serveur
http (processus) sur le port 80 de
www.UneUniversite.edu
1b. Le serveur http sur l’hôte
2. Le client http envoie une
www.UneUniversite.edu attend
des connexions sur le port 80 de
TCP. Il “accepte” la connexion, et
notifie le client
requête http (contenant l’ URL)
sur la socket de connexion TCP
3. Le serveur http reçoit la
time
Master Informatique M1
2004-2005
requête, construit un message de
réponse contenant l’objet
demandé
(UneUniversité/unDepartement/ho
me.index), envoie le message sur
49
la socket
Connexions Non-persistantes,
persistantes
Non-persistante
http/1.0: le serveur traite la
requête, répond et ferme la
connexion TCP
2 échanges pour retrouver un
objet
•Une
connexion TCP
•Une
requête/un transfert
d’objet
Chaque transfert souffre du
ralentissement dû à l’ouverture
de connexion TCP
Beaucoup de navigateurs
ouvrent de multiples
Master Informatique M1
connexions en parallèle
2004-2005
Persistante
Par defaut pour http/1.1
Sur la même connexion TCP le
serveur traite la requête,
répond, traite de nouvelles
requêtes,…
Le client envoie les requêtes
pour tous les objets
référencés aussi vite que
possible dès qu’il reçoit le
code HTML de base
Moins de connexions, moins
lent à démarrer
51
temps
connexion TCP.
6. Les étapes 1-5 sont répétées
pour chacun des dix objets jpeg
Master Informatique M1
2004-2005
50
Format de message HTTP :
requête
deux types de messages http : requête, réponse
requête http :
•
ASCII (format lisible par l’humain)
Ligne de requête
(commandes GET, POST, GET /somedir/page.html HTTP/1.0
User-agent: Mozilla/4.0
HEAD)
Accept: text/html, image/gif,image/jpeg
Lignes Accept-language:fr
d’entêtes
Retour chariot,
line feed
indique la fin
Master Informatique M1
de message
2004-2005
(extra carriage return, line feed)
52
Requête HTTP : format général
Format message HTTP : réponse
Ligne état
(code état protocole
Phrase état)
Lignes
Entête
données, e.g.,
Fichier html demandé
Master Informatique M1
2004-2005
53
Master Informatique M1
2004-2005
HTTP/1.0 200 OK
Date: Thu, 06 Aug 1998 12:00:15 GMT
Server: Apache/1.3.0 (Unix)
Last-Modified: Mon, 22 Jun 1998 …...
Content-Length: 6821
Content-Type: text/html
data data data data data ...
54
Code d’état des réponses HTTP
Contenu des requêtes
La première ligne dans le message de réponse
serveur-> client
Version simple : méthode ressource version_du_protocole
Quelques exemples de code :
200 OK
•Requête
traitée avec succès, L’objet suit dans le message
301 Moved Permanently
•L’objet
demandé a bougé, la nouvelle localisation est donnée
à plus loin dans le message (Location"
400 Bad Request
•La
requête n’est pas comprise par le serveur
404 Not Found
•Le
document demandé n’est pas sur ce serveur
Master Informatique M1
2004-2005
55
505 HTTP Version Not Supported
Exemple : GET /hypertext/TheProject.html HTTP/1.0
Types de méthodes pour HTTP/1.0
•
GET
demande d'un document
•
HEAD
demande seulement l'en-tête d'un document
•
POST
envoi des informations au serveur
GET : requête fondamentale
HEAD permet de connaître la date de modification d'un
document, la taille d'un document, le type du document, le
type du serveur
POST sert pour l'interrogation de programmes, services
réseaux comme l'envoi de messages dans les forums de
discussion, l'annotation de documents sur le serveur,
l'interrogation
de base de données
Master Informatique
M1
56
2004-2005
Interaction utilisateur-serveur :
authentification
Essayez HTTP (côté client)
Authentification : contrôle
d’accès au contenu du serveur
1. Telnet avec votre serveur favori :
telnet www.lifl.fr 80
Ouvre une connexion sur le port TCP 80
de www.lifl.fr.
Avec deux retour chariot, vous envoyez
une requête GET minimale vers
le serveur
Master Informatique M1
2004-2005
http request
cookie: #
http réponse
Le serveur envoie le “cookie”
au client dans la réponse
http request
1678453
cookie: #
Le client présente le cookie
dans ses futures requêtes
•cookie: M1
1678453
Master Informatique
2004-2005
http réponse
59
non autorisation: le
serveur refuse l’accès, et
envoie
Msg requête http msg
+ Authorization: <cred>
réponse http classique
temps
58
Objectif: ne pas envoyer
d’objet si le client a une
version à jour dans son cache
Action
cookiespécifique
Action
cookiespécifique
http request
If-modified-since:
<date>
http réponse
•If-modified-since:
serveur: la réponse ne contient
aucun object si la copie cachée
est à jour
Modified
http request
If-modified-since:
<date>
304 Not
http réponse
HTTP/1.1 200 OK
Master Informatique M1
2004-2005
object
non
modifiée
HTTP/1.0
304 Not Modified
<date>
•HTTP/1.0
serveur
client
client: donne la date de la
copie cachée dans la requête
Set-cookie: #
souvenir des
préférences utilisateurs,
de ses choix
•Set-cookie:
serveur
http réponse +
•Se
réponse http classique
•Si
GET conditionnel: un cache
côté client
http request
•authentification
Msg requête http msg
+ Authorization: <cred>
lignes d’entête
dans chaque requête
Master Informatique M1
2004-2005
Cookies : garder un état
client
401: authorization req.
WWW authenticate:
Sans état: le client doit
présenter son autorisation à
chaque requête
• Ligne d’entête dans la
réponse
57
# généré par le serveur, # à
rappeller au serveur, utilisé
plus tard pour:
requête http classique
• WWW authenticate:
3. Regardez le message de réponse envoyé par le
serveur http
serveur
client
•autorisation:
2. Envoyez une requête http GET:
GET /~duchien/index.html HTTP/1.0
Les crédits d’autorisation : noms,
mots de passe
60
<data>
object
modifié
Pourquoi gérer des caches dans le
Web?
Caches Web (serveurs proxy)
Objectif: satisfaire la requête du client sans interroger
le serveur d’origine
L’utilisateur paramètre son
navigateur: accès aue web
via le cache web
Le client envoie toutes les
requêtes http vers le cache
web
•Le
cache web retourne
l’objet
•sinon
le cache web cache
demande l’objet au serveur
d’origine, qui retourne
l’objet au client
Master Informatique M1
2004-2005
Serveur
origine
Proxy
htt
st
pr
equ server reque
h
e
p
e
st
client ttp
htt
ons
res
esp
pon
r
p
se
htt
st
e
u
eq
se
pr
on
htt
esp
r
tp
ht
client
Serveur
origine
61
6. CGI
Multiples systèmes de script : CGI, servlet, ASP, JSP, XSP,…
Ces systèmes permettent au client de faire exécuter un programme au
serveur
Common Gateway Interface (CGI) : Protocole entre un serveur Web et
des programmes à lancer côté serveur
Les programmes peuvent être
- interprétés : shells scripts sh, csh, ksh, shells Perl, etc …
- compilés : programmes C, C++, Ada, etc …
Exemples d'utilisation
• traitement des données saisies dans un formulaire
• génération automatique de pages Web
Master Informatique M1
63
• compteur pour afficher le nombre d'accès à la page
2004-2005
Serveurs
origines
Le cache est prêt du
client (e.g., sur le même
réseau)
Le temps de réponse est
plus petit: cache prêt du
client
Fait décroître le trafic
vers les serveurs
distants
lien entre le réseau
local et le reste du monde
est souvent un goulet
Master Informatique
M1
d’étranglement
public
Internet
1.5 Mbps
access link
Réseau
institutionnel
•Le
2004-2005
10 Mbps LAN
Cache
institutionnel
62
Fonctionnement CGI
Les scripts sont désignés par une URL (comme les
documents HTML)
Par exemple : http://www.lifl.fr/cgi-bin/anniversaire.pl
En fonction du chemin d'accès, le serveur sait si l'URL
correspond à un script ou à un document
Par convention, tous les fichiers dans le répertoire cgibin/ sont des scripts
Master Informatique M1
2004-2005
64
Fonctionnement CGI
Etape 1 : client -> serveur
2 méthodes peuvent être employées : GET ou POST
GET /cgi-bin/anniversaire.pl?mois=aout&jour=11 HTTP/1.0
Les options à passer au script sont encodées après le ? Elles
sont facultatives
POST /cgi-bin/anniversaire.pl HTTP/1.0
Content-type: application/x-www-form-urlencoded
Content-length: 20
mois=aout&jour=11
Rq Informatique
: dans ce M1
cas (formulaire),
Master
cette requête
2004-2005
c'est
65 le navigateur qui construit
Fonctionnement CGI
Etape 3 : script -> serveur
La sortie standard du script est un document de la forme
•
en-tête
•
ligne blanche
•
données
3 en-têtes possibles
Content-type: … (par ex text/html ou image/gif)
Location: … (par ex http://www.truc.com) : C'est une URL à
transmettre au client
Status: … (par ex 403 Forbidden) : C'est un code (d'erreur) à
renvoyer au client
Etape 4 : serveur -> client
Le Informatique
documentM1est
Master
2004-2005
envoyé au navigateur
Web qui l'interprète
67
Fonctionnement CGI
Etape 2 : serveur -> script
Les informations à passer aux scripts CGI par le serveur Web le sont
•
soit par des variables d'environnement
•
soit sur l'entrée standard du script
Les principales variables d'environnement
CONTENT_TYPE, CONTENT_LENGTH, etc … (ce sont les champs de
l'en-tête du message)
SCRIPT_NAME (ici /cgi-bin/anniversaire.pl)
Les options d'appel de script (ici mois=aout&jour=11) sont transmises
par la requête d'environnement QUERY_STRING pour la méthode GET
sur l'entrée standard du script pour la méthode POST
Le script analyse ses variables (et l'entrée standard éventuellement),
traitement et produit
un résultat
66
exécuteM1
son
Master Informatique
2004-2005
Exemples
Shell script sh
#!/bin/sh
echo "Content-type: text/html"
echo
echo "<!DOCTYPE HTML PUBLIC
//W3C/DTD HTML 3.2
Final/EN\">"
echo "<HTML>"
echo "<BODY>"
echo "Nous sommes le
<B>"`date`"</B>"
echo "</BODY>"
echo "</HTML>"
Master Informatique M1
2004-2005
Langage C
#include <stdio.h>
main() {
char c;
int nb_args;
printf( "Content-type: text/html\n");
printf( "\n" );
printf( "<!
DOCTYPE HTML PUBLIC
\"-//W3C/DTD HTML 3.2 Final/EN\">\n"
\");
printf( "<HTML>\n" );
printf( "<BODY>\n" );
nb_args = 0;
while ((c=getchar()) != EOF)
if ( c == '&' ) nb_args++;
if ( nb_args != 0 ) nb_args++;
printf( "Il y a %d arguments a votre
requete\n" , nb_args );
printf( "</BODY>\n" );
printf( "</HTML>\n" );
68
}
7. Servlet
7. Servlet
Scripts serveur écrit en Java
Programme Java s'exécutant
côté serveur Web
•servlet prog. "autonome" stockés
dans un fichier .class sur le
serveur
•JSP prog. source Java embarqué
dans une page .html
Servlet et JSP
•exécutable avec tous les
serveurs Web (Apache, IIS, ...)
•auxquels on a ajouté un "moteur"
de servlet/ JSP (le plus connu :
Tomcat )
•JSP compilées automatiquement
en Informatique
servlet parM1
le moteur
Master
2004-2005
.class
autonome
Côté client
Côté serveur
Applet
Servlet
Embarqué JavaScript JSP
dans
HTML
69
Différent avec les CGI et les LD (NSAPI, ISAPI)
- performance sur les passages des paramètres (vs CGI)
- sûreté de fonctionnement (NSAPI, ISAPI)
Servlets de Base : FileServlet, CGIServlet, …
Téléchargement et exécution d ’une Servlet « externe »
exécution dans un espace protégé ou non
Serveurs
Server HTTPD écrits en Java : Sun Java Web Server, W3C
Jigsaw
mais aussi Netscape, Oreilly, Apache (mod_jserv), ...
servletrunner (JSDK),
Développement
- JSDK (servletrunner)
- IBM VisualAge (visual servlet)
Master Informatique M1
70
2004-2005
Servlet
Mécanismes de base
écriture d'une servlet = écriture d'une classe Java
Principe
•
les fichiers de bytecode ( .class ) sont stockés sur le serveur
(comme des docs) par convention dans le répertoire servlet/
•
ils sont désignés par une URL http:// www. lifl. fr/ servlet/
Prog
•
le chargement de l'URL provoque l'exécution de la servlet
1
Client
Serveur
4
Explorer
Netscape
Tom
cat
2
3
IIS
Apache
JVM
Master Informatique M1
2004-2005
71
Prog. class
Sun
Microsoft
- Lors du premier chargement d'une servlet (ou après
modification), le moteur instancie la servlet
servlet = objet Java présent dans le moteur
- puis, ou lors des chargements suivants, le moteur
exécute le code dans une thread
- le code produit un résultat qui est envoyé au client
en cas d'erreur dans le code Java de la servlet, message
72
récupéré dans le navigateur
Master Informatique M1
2004-2005
Développement
Mode d’invocation
Utilisation des packages Java javax.servlet.* et javax.servlet. http.*
•
Direct (depuis un document ou un browser)
http://machine-name:port/servlet/servlet-name
•
extension de la classe javax.servlet.http.HttpServlet
•
redéfinition de la méthode service de cette classe
•
définit le code à exécuter lorsque la servlet est invoquée
•
elle est appelée automatiquement par le "moteur " de servlet
•
void service(ServletRequest request ,ServletResponse response );
représente la requête
envoyée par le client
renseigné automatiquement
par le "moteur"
Master Informatique M1
2004-2005
73
représente la réponse
retournée par la servlet
à renseigner dans le code
de la servlet
Aperçu de l’API servlet
Méthodes appelables sur un objet request
- String getParameter(String param) retourne la valeur du
champ param transmis dans les données du formulaire
- java.util. Enumeration getParameterNames() retourne
l'ensemble des noms de paramètres transmis à la servlet
- String getMethod() retourne la méthode HTTP (GET ou POST)
utilisée pour invoquer la servlet
Méthodes appelables sur un objet response
- void setContentType( String type) définit le type MIME du
document retourné par la servlet
- PrintWriter getWriter() retourne un flux de sortie
permettant à la servlet de produire son résultat la servlet
Master Informatique
75 de sortie
"print " leM1code HTML sur ce flux
2004-2005
http://localhost:8080/servlet/bookdetails?bookId=203
•
Depuis une autre servlet
BookDBServlet database = (BookDBServlet)
this.getServletConfig().getServletContext().getServlet("bookdb");
BookDetails bd = database.getBookDetails(bookId);
•
SSI
<SERVLET NAME="Date">
<PARAM NAME="TimeZone!» VALUE ="Paris" >
</SERVLET>
•
JSP (Java Server Page)
Master Informatique M1
2004-2005
74
Exemple de servlet
import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;
public class HelloServlet extends HttpServlet
{
public void service(ServletRequest
request,ServletResponse response )
imposé par l’API servlet
throws ServletException,IOException
ce qui suit est en HTML
{
récupère un flux pour générer response.setContentType("text/html");
le résultat
PrintWriter out =response.getWriter();
out.println("<html><body>");
Génération du code HTML
out.println("<h1>Hello depuis une servlet</h1>");
out.println("</body></html>");
}
Master Informatique M1
76
}
imposé
2004-2005
Exemple de servlet (cont.)
•
Compilation
HelloServlet. Class installé dans l'arborescence de Tomcat
•
Chargement via une URL de type http://.../ servlet/ HelloServlet
=> exécution de HelloServlet. class
Master Informatique M1
2004-2005
77
Récupération des données dans
un formulaire
Méthode String getParameter( String) d'un objet request
=>retourne le texte saisi
=>ou null si le nom de paramètre n'existe pas
<HTML>
<BODY>
<FORM ACTION=« http://..."METHOD=POST>
Nom <INPUT NAME="nom"><P>
Prénom <INPUT NAME="prenom"><P>
<INPUT TYPE=SUBMIT VALUE="Envoi">
<INPUT TYPE=RESET VALUE="Remise à zéro">
</FORM>
</BODY>
</HTML>
Master
Informatique M1
79
2004-2005
Exemple 2 de servlet
Chaque servlet n'est instanciée qu’1 seule fois
persistance de ces données entre 2 invocations
public class CompteurServlet extends HttpServlet {
int compteur =0;
public void service( ServletRequest request, ServletResponse response )
throws ServletException, IOException
{
response. setContentType("text/html");
PrintWriter out =response.getWriter();
out.println("<html><body>");
out.println("<h1>« + compteur++ +"</h1>");
out.println("</body></html>« );
}
}
1ère invocation -> 0
Master
Informatique
M1 ->1
78
2ème
invocation
2004-2005
Récupération des données dans
un formulaire (cont.)
public class CompteurServlet extends HttpServlet {
public void service(ServletRequest request,ServletResponse
response ) throws ServletException,IOException {
response.setContentType("text/html");
PrintWriter out =response.getWriter();
String nom =request.getParameter("nom");
String prenom =request.getParameter("prenom");
out.println("<html><body>");
out.println("<h1>Exemple de résultat</h1>");
out.println("Bonjour "+prenom+""+nom);
out.println("</body></html>");
}
} Informatique M1
Master
80
2004-2005
Cycle de vie d’une servlet
void init(ServletConfig conf)
méthode appelée par le moteur au démarrage de
la servlet
peut être utilisée pour initialiser la servlet
propager l'initialisation par super. init(conf)
ne jamais utiliser de constructeur
void destroy()
lorsque l'on veut détruire la servlet
Différenciation des méthodes HTTP
service() traite toutes les requêtes HTTP
doGet(),doPut(),doPost(),doPut(),doDelete()
peuvent être redéfinies pour traiter chaque
requête HTTPde façon différenciée
Master Informatique M1
2004-2005
Chaînage des servlets
GenericServlet
init()
destroy()
HttpServlet
service()
doGet()
doPut()…
MyServlet
81
Compléments sur l’API
Méthodes appelables sur un objet request
- String getProtocol()
retourne le protocole implanté par le serveur (ex.:HTTP/1.1)
- String getServerName()/String getServerPort()
retourne le nom/port de la machine serveur
- String getRemoteAddr()/String getRemoteHost()
retourne l'adresse/nom de la machine cliente (ayant invoqué la
servlet)
- String getScheme()
retourne le protocole utilisé (ex.:http ou https)par le client
- java.io.BufferedReader getReader()
retourne un flux d'entrée permettant à une servlet chainée
de récupérer le résultat produit par la servlet précédente
=> Informatique
permet à la
modifier le résultat
Master
M1 servlet chaînée de 83
2004-2005
Servlet 1
Aggrégation des résultats fournis
par plusieurs servlets
=>meilleure modularité
Servlet 4
servlet
Servlet 5
Servlet 2
=>meilleure réutilisation
Servlet 3
Utilisation d'unRequestDispatcher
obtenu via un objetrequest
RequestDispatcher rd
=request.getRequestDispatcher("servlet1" );
Inclusion du résultat d'une autre servlet
URL
rd.include(request,response);
Délégationdu traitement à une autre servlet
Master Informatique
M1
82
rd.forward(request,response);
2004-2005
Gestion de la concurrence
Par défaut les servlets sont exécutées de façon multi-threadée
Si une servlet doit être exécutée en exclusion mutuelle
(ex.:accès à des ressources partagées critiques)
implantation de l'interface marqueur SingleThreadModel
public class CompteurServlet
extends HttpServlet
implements SingleThreadModel
{
public void service(ServletRequest request,ServletResponse
response )
throws ServletException,IOException {
/**Du code en exclusion mutuelle avec lui-même */
}
}
Autre
solution
dans la servlet
Master
Informatique
M1 : définir du code synchronized
84
2004-2005
Cookie
Suivi de session
Permet à un serveur Web de stocker de l'information chez un client
•
•
•
moyen pour savoir "par où passe"un client,quand,en venant d'où,...
débat éthique ??
l'utilisateur a la possibilité d'interdire leur dépôt dans son navigateur
définis dans la classe javax.servlet.http.Cookie
•
on les crée en donnant un nom (String) et une valeur (String)
Cookie uneCookie =new Cookie("sonNom","saValeur");
•
on les positionne via un objet response
response.addCookie(uneCookie );
•
on les récupère via un objet request
Cookie[]desCookies =request.getCookies();
Quelques méthodes :String getName()/String getValue()
85
Master Informatique M1
2004-2005
•
•
HTTP protocole non connecté
pour le serveur,2 requêtes successives d'un même client sont
indépendantes
Objectif : être capable de "suivre« l'activité du client sur +sieurs pages
Notion de session
=> les requêtes provenant d'un utilisateur sont associées à une même
session
=> les sessions ne sont pas éternelles, elles expirent au bout d'un délai fixé
Sur un objet request
-HttpSession session =request.getSession(true)
retourne la session courante pour cet utilisateur ou une nouvelle session
- HttpSession session =request.getSession(false)
retourne la session courante pour cet utilisateur ou null
Master Informatique M1
86
2004-2005
Suivi de session
Partage de données entre servlets
Méthodes appelables sur un objet de type HttpSession
-void setAttribute(String name,Object value )
ajoute un couple (name,value) pour cette session
-Object getAttribute(String name )
retourne l'objet associé à la clé name ou null
-void removeAttribute(String name )
enlève le couple de clé (name,value)
-java.util.Enumeration getAttributeNames()
retourne tous les noms d'attributs associés à la session
-void setMaxIntervalTime(int seconds )
spécifie la durée de vie maximum d'une session
-long getCreationTime()/long getLastAccessedTime()
retourne la date de création /de dernier accès de la session en
ms depuis le 1/1/1970,00h00 GMT_new Date(long)
Notion de contexte d'exécution
Master Informatique M1
2004-2005
87
=ensemble de couples (name,value)partagées par toutes les servlets
instanciées
ServletContext ctx =getServletContext()(héritée de GenericServlet)
Méthodes appelables sur un objet de typeServletContext
-void setAttribute(String name,Object value )
ajoute un couple (name,value) dans le contexte
-Object getAttribute(String name )
retourne l'objet associé à la clé name ou null
- void removeAttribute(String name )
enlève le couple de clé name
- java.util.Enumeration getAttributeNames()
retourne tous les noms d'attributs associés au contexte
Master Informatique M1
2004-2005
88
Conclusion servlet
Moteurs de servlet
Permettent d'étendre le comportement des serveurs
Web avec des prog. Java
Jakarta/Tomcat (jakarta.apache.org)
Résumé des fonctionnalités
+portabilité,facilité d'écriture (Java)
+gestion des applications requiérant un suivi entre
plusieurs programmes
(persistance des données dans les servlets)
+servlet chargée et instanciée une seule fois
+servlet exécutée avec des processus légers
(threads)
Master Informatique M1
2004-2005
89
RESIN (www.caucho.com)
….
Bibliographie
•
J. Hunter with W. Crawford « Java Servlet Programming »,
1st edition, nov 98, ed O’Reilly
•
C. Taylor, T.Kimmett « Core Java Web server », nov 98, Ed
Prentice Hall
•
Tutorial Java de Sun sur les servlet
•
De nombreux sites proposent les sources de Servlet
http://www.servlet.com
Master Informatique M1
2004-2005
90