Sections 7.5
Download
Report
Transcript Sections 7.5
Applications Internet
Chapitre 7, Sections 7.6—7.8
1
Survol
Concepts Internet
Formats des données sur le web
HTML, XML, DTDs
Introduction à l’architecture à trois niveaux
Le niveau de présentation
Formulaires HTML; méthodes HTTP Get et POST,
encodage des URLs; Javascript; Stylesheets; XSLT
Le niveau intermédiaire
CGI, serveurs d’application, Servlets,
JavaServerPages, passages d’arguments,
maintenance des états (cookies)
2
Survol du Niveau de Présentation
Rappel: Fonctionnalité du niveau de présentation
Interface primaire de l’usager
Doit s’adapter aux divers moyens de présentation (PC, PDA,
téléphone cellulaire, accès vocal?)
Simple fonctionnalité, telle vérification de la validité des
champs
Nous couvrirons:
Formulaires HTML: Comment passer les données au niveau
intermédiaire?
JavaScript: Simple fonctionnalité au niveau de présentation
Style sheets: Séparation des données du formatage
3
Formulaire HTML (‘’Forms’’)
Manière commune de communiquer les données du
client au niveau intermédiaire
Format général d’un formulaire:
<FORM ACTION=“page.jsp” METHOD=“GET”
NAME=“LoginForm”>
…
</FORM>
Composantes d’une balise HTML FORM:
ACTION: Spécifie l’URI qui traite le contenu du formulaire
METHOD: Spécifie la méthode HTTP GET ou POST
NAME: Nom du formulaire; peut être utilisé dans les scripts du
client pour faire référence au formulaire
4
Structure des Formulaires HTML
Balise INPUT
Attributs:
• TYPE: text (texte), password, reset
• NAME: nom symbolique utilisé pour identifier la valeur
VALUE au niveau intermediaire
• VALUE: valeur par defaut
Exemple: <INPUT TYPE=“text” Name=“title”>
Exemple de formulaire:
<form method="POST" action="TableOfContents.jsp">
<input type="text" name="userid">
<input type="password" name="password">
<input type="submit" value="Login“ name="submit">
<input type=“reset” value=“Clear”>
</form>
5
Passage des Arguments
Deux méthodes: GET et POST
GET
Le contenu du formulaire est passé à l’URI soumis
Structure:
action?name1=value1&name2=value2&name3=value3
• Action: nom de l’URI spécifié dans le formulaire
• Les paires (name,value) viennent des attributs des balises INPUT
contenu dans le formulaire; les attributs vides ont des valeurs
vides (“name=“)
Exemple tiré du formulaire de mot de passe du transparent
précédent:
TableOfContents.jsp?userid=john&password=johnpw
La ressource mentionnée dans l’action doit être un
programme, un script, ou une page qui traitera les entrées de
l’utilisateur
6
Passage des Arguments (Suite)
POST
Structure comme dans la methode GET:
action?name1=value1&name2=value2&name3=value3
GET: le contenu encodé est envoyé en attachement à
l’URI.
POST: le contenu est envoyé dans un bloc de
données séparées.
POST et GET ont chacun des avantages et
désavantages (Voir le livre de Ian Graham pour les
détails).
7
HTTP GET: Encodage des Champs du
Formulaire
Les champs du formulaire peuvent contenir des
caractères ASCII qui normalement n’apparaissent pas
dans un URI
Une convention spéciale d’encodage convertit les
valeurs de ces champs/attributs en caractères
compatibles avec des URIs:
1.
2.
3.
Convertit tous les caractères “spéciaux” (tels que &, =, +, %,
etc.) en %xyz. Ici, xyz est le code ASCII du caractère spécial
Convertit tous les espaces en caractère “+”
Colle les paires (name,value) de la balise INPUT du
formulaire ensemble avec “&” pour former l’URI
8
Formulaires HTML: Un Exemple Complet
<form method="POST" action="TableOfContents.jsp">
<table align = "center" border="0" width="300">
<tr>
<td>Userid</td>
<td><input type="text" name="userid" size="20"></td>
</tr>
<tr>
<td>Password</td>
<td><input type="password" name="password" size="20"></td>
</tr>
<tr>
<td align = "center"><input type="submit" value="Login“
name="submit"></td>
</tr>
</table>
</form>
9
JavaScript
But: Ajouter de la fonctionnalité au niveau de présentation.
Exemple d’applications:
Détecter le type de browser et exécuter le code spécifique à ce browser
Validation des formulaires: Validation des champs d’entrée des
formulaires
Contrôle du browser: Ouvrir de nouvelles fenêtres, clore celles
existantes
En général imbriqué directement dans HTML avec la balise
<SCRIPT> … </SCRIPT>.
La balise <SCRIPT> a plusieurs attributs:
LANGUAGE: spécifie le langage du script (p.ex. javascript)
SRC: fichier externe contenant le code du script
Exemple:
<SCRIPT LANGUAGE=“JavaScript” SRC=“validate.js>
</SCRIPT>
10
JavaScript (Suite)
Si la balise <SCRIPT> ne contient pas un attribut SRC,
le script de JavaScript est directement dans le fichier
HTML.
Exemple:
<SCRIPT LANGUAGE=“JavaScript”>
<!-- alert(“Welcome to our bookstore”)
//-->
</SCRIPT>
Deux styles différents de commentaire
<!– commentaire de HTML pour ne pas afficher le code de
JavaScript verbatim
// commentaire de JavaScript
11
JavaScript (Suite)
JavaScript est un langage de script complet
Variables
Assignements (=, +=, …)
Opérateurs de comparaison (<,>,…), opérateurs
booléen (&&, ||, !)
Instructions
• if (condition) {instructions;} else {instructions;}
• Boucles for, do-while, et while
Fonctions avec valeur de retour
• Mot clé function
• function f(arg1, …, argk) {instructions;}
12
JavaScript: Un Exemple Complet
Formulaire HTML:
JavaScript associé:
<form method="POST“
action="TableOfContents.jsp">
<input type="text"
name="userid">
<input type="password"
name="password">
<input type="submit"
value="Login“
name="submit">
<input type=“reset”
value=“Clear”>
</form>
<script language="javascript">
function testLoginEmpty()
{
loginForm = document.LoginForm
if ((loginForm.userid.value == "") ||
(loginForm.password.value == ""))
{
alert('Please enter values for userid and
password.');
return false;
}
else return true;
}
</script>
13
Stylesheets
Idée: Séparer l’affichage du contenu et adapter
l’affichage aux différents formats de présentation
Deux aspects:
Tranformation du document pour décider quelles parties
afficher et dans quel ordre
Decider comment chaque partie sera affichée
Pourquoi utiliser les stylesheets?
Réutiliser le même document pour différents affichages
Adapter l’affichage aux préférences de l’utilisateur
Réutilier le même document dans différents contextes
Deux langages de stylesheets
Cascading style sheets (CSS): pour documents HTML
Extensible stylesheet language (XSL): pour documents XML
14
CSS: Cascading Style Sheets
Définit comment afficher les documents HTML
Beaucoup de documents HTML peuvent se référer au même CSS
Le format d’un site web peut ainsi changer juste en changeant un seul
style sheet
Exemple:
<LINK REL=“style sheet” TYPE=“text/css” HREF=“books.css”/>
Chaque ligne consiste en 3 parties:
sélecteur {propriété: valeur}
Sélecteur: balise dont le format est défini
Propriété: attribut dont la valeur est fixée
Valeur: valeur de l’attribut
15
CSS: Cascading Style Sheets (Suite)
Exemple de style sheet:
body {background-color: yellow}
h1 {font-size: 36pt}
h3 {color: blue}
p {margin-left: 50px; color: red}
La première ligne a le même effet que la ligne HTML:
<body background-color=“yellow>
16
XSL
Langage pour exprimer les style sheets
Détails sur: http://www.w3.org/Style/XSL/
Trois composantes
XSLT: langage de transformation de XSL
• Peut transformer un document en un autre
• Détails sur http://www.w3.org/TR/xslt
XPath: langage de chemin XML
• Sélectionne des parties d’un document XML
• Détails sur http://www.w3.org/TR/xpath
XSL Formatting Objects
• Formate la sortie d’une transformation XSL
• Détails sur http://www.w3.org/TR/xsl/
17
Survol
Concepts Internet
Formats des données sur le web
HTML, XML, DTDs
Introduction à l’architecture à trois niveaux
Le niveau de présentation
Formulaires HTML; méthodes HTTP Get et POST,
encodage des URLs; Javascript; Stylesheets; XSLT
Le niveau intermédiaire
CGI, serveurs d’application, Servlets,
JavaServerPages, passages d’arguments,
maintenance des états (cookies)
18
Survol du Niveau Intermédiaire
Rappel: Fonctionnalité du niveau intermédiaire
Encode la logique d’application
Connecte à la base de données
Accepte les entrées des formulaires venant du niveau de
présentation
Génère les sorties pour le niveau de présentation
Nous couvrirons
CGI: Protocole pour passer des arguments aux programmes
exécutant au niveau intermédiaire
Serveur d’application: Environnement d’exécution au niveau
intermédiaire
Servlets: Programmes Java au niveau intermédiaire
JavaServerPages: Scripts Java au niveau intermédiaire
Maintien de l’état: Comment maintenir l’état de l’exécution au
niveau intermédiaire. Ici, on verra essentiellement les cookies.
19
CGI: Common Gateway Interface
But: Transmet des arguments des formulaires HTML
aux programmes executant au niveau intermediaire
Les détails du protocole CGI ne sont pas tellement
important des bibliotheques implementent des
interfaces au protocole CGI
Désavantages:
Le programme d’application est invoqué dans un nouveau
processus à chauqe invocation (rémède: FastCGI)
Aucun partage des ressources entre les programmes
d’application (p.ex., les connexions aux bases de données) -Rémède: Serveurs d’application
20
CGI: Exemple
Formulaire HTML:
<form action=“findbooks.cgi” method=POST>
Type an author name:
<input type=“text” name=“authorName”>
<input type=“submit” value=“Send it”>
<input type=“reset” value=“Clear form”>
</form>
Code Perl:
use CGI;
$dataIn=new CGI;
$dataIn->header();
$authorName=$dataIn->param(‘authorName’);
print(“<HTML><TITLE>Argument passing test</TITLE>”);
print(“The author name is “ + $authorName);
print(“</HTML>”);
exit;
21
Serveur d’Application
Idée: Eviter la surchage des CGIs
‘’Pooling’’ de plusieurs processus
Gère les connexions
Permet un accès à des sources de données
hétérogènes
Autres fonctionnalité telle que des APIs pour la
gestion des sessions
22
Serveur d’Application: Structure du Processus
Structure du processus
Browser
HTTP Serveur Web
Application C++
JavaBeans
Serveur d’application
JDBC
ODBC
DBMS 1
DBMS 2
Pool de Servlets
23
Servlets
Java Servlets: Code Java qui exécute au niveau
intermédiaire
Indépendant des plateformes
Des APIs complets en Java disponibles, y compris JDBC
Exemple:
import java.io.*;
import java.servlet.*;
import java.servlet.http.*;
public class ServetTemplate extends HttpServlet {
public void doGet(HTTPServletRequest request,
HTTPServletResponse response)
throws SerletExpection, IOException {
PrintWriter out=response.getWriter();
out.println(“Hello World”);
}
}
24
Servlets (Suite)
Vie d’un servlet?
Le serveur web envoie une requête au container
servlet
Le container crée une instance servlet (appèle la
méthode init(); désallocation: destroy())
Le container appèle la méthode service()
• service() appèle doGet() pour exécuter le GET de HTTP ou
doPost() pour POST
• D’habitude il est conseillé de ne faire l’overriding de
service(), mais plutôt de doGet() et doPost()
25
Servlets: Un Exemple Complet
public class ReadUserName extends HttpServlet {
public void doGet(
HttpServletRequest request,
HttpSevletResponse response)
throws ServletException, IOException {
reponse.setContentType(“text/html”);
PrintWriter out=response.getWriter();
out.println(“<HTML><BODY>\n <UL> \n” +
“<LI>” + request.getParameter(“userid”) + “\n” +
“<LI>” + request.getParameter(“password”) + “\n” +
“<UL>\n<BODY></HTML>”);
}
public void doPost(
HttpServletRequest request,
HttpSevletResponse response)
throws ServletException, IOException {
doGet(request,response);
}
}
26
‘’Java Server Pages’’
Servlets
Génère du HTML en l’écrivant dans des objets
“PrintWriter”
D’abord le code, ensuite la page web
JavaServerPages
Ecrits en HTML, code similaire au code Servlet,
mais imbriqué dans un code HTML
D’abord la page web, ensuite le code
Sont habituellement compilés en un Servlet
27
JavaServerPages: Exemple
<html>
<head><title>Welcome to B&N</title></head>
<body>
<h1>Welcome back!</h1>
<% String name=“NewUser”;
if (request.getParameter(“username”) != null) {
name=request.getParameter(“username”);
}
%>
You are logged on as user <%=name%>
<p>
</body>
</html>
28