1Cours BD/WEB - INT Evry
Les passerelles BD/WEB
Coordonnateur du coursBruno DEFUDE
Dept INFormatique
2Cours BD/WEB - INT Evry
Programme du séminaire Jour 1 : (salle E405)
» objectifs du séminaire» rappels sur les SGBD relationnels» rappels sur Internet/web » principes des passerelles
Jour 2 : (salle E405)» quelques solutions industrielles» démonstration/programmation de différentes
solutions
3Cours BD/WEB - INT Evry
Intervenants
Bruno Defude (jour 1) : enseignant/chercheur au dept INF depuis 1992, docteur informatique INPGrenoble, enseigne les BD depuis 1986
Claire Carpentier (Jour 2) : enseignant/chercheur au dept INF depuis 1998, docteur informatique Univ. Evry, enseigne les BD depuis 1995
4Cours BD/WEB - INT Evry
Objectifs du cours
Présenter les problèmes de couplage entre le Web et les SGBD
classifier les différentes approches utilisées pour le couplage
présenter différentes solutions industrielles
5Cours BD/WEB - INT Evry
Plan du cours
Les SGBD relationnels Le système World Wide Web Les interfaces entre le Web et les BD
» principes» solutions Microsoft (IDC, ASP)» L'approche Java (servlet, JSP)
Evolution du Web : XML
6Cours BD/WEB - INT Evry
7Cours BD/WEB - INT Evry
Bases de données relationnelles
8Cours BD/WEB - INT Evry
Les SGBD relationnels
Fonctionnalités Modèles de données langages de requêtes
» SQL transactions et contrôle de concurrence
9Cours BD/WEB - INT Evry
Fonctionnalités d'un SGBD permettre de représenter des informations
(modèle de données) permettre un accès facile aux informations
stockées via des langages de requêtes déclaratifs Stocker de l'information de manière fiable,
efficace, évolutive et répartie (transactions, contrôle de concurrence, middleware)
offrir différentes interfaces de programmation (langage de requêtes, Web, langages programmation, ...)
10Cours BD/WEB - INT Evry
Les modèles pour les bases de données
Modèle orienté conception : Entité/Association
Modèle orienté implantation : modèle relationnel
11Cours BD/WEB - INT Evry
Modèle Entité/Association [Chen 77]
Exemple de modèle
Eleve
Code_elev Nom_Elev
AppartientSalle
Classe
No_ClasseFait cours
NotationNote
Matiere
Code_Matiere
ProfCode_prof
Code_categNomprof
Nom_Categ
1,n
1,1
1,n
1,n
1,n
0,n
0,n
1,n
12Cours BD/WEB - INT Evry
Modèle Entité/Association
Critique du modèle Entité/Association Avantages Inconvénients Sémantique riche Uniquement un
modèle de Extension aux description de données concepts objets (héritage, ...) Pas de lg de
manipulation associé Aspect visuel Pas de SGBD E/A Modèle de conception de BD Pas un modèle
d’implantation de BD
13Cours BD/WEB - INT Evry
Modèle relationnel
[CODD 70] « A Relational Model for Large Shared Data Banks »
Exemple» Employé(NoSs, Nom, Adresse, Age,
salaire)» Projet(NoProjet, Libellé, ChefProjet)» Travaille_sur(NoSs, NoProjet)
14Cours BD/WEB - INT Evry
Exemples de relations
21MaiselMeunier3
20CROUSMillot2
20MaiselBélaïd1
AgeAdresseNomNumElève
10BD2
20BD1
18IO3
17IO2
NoteCodeUVNumElèveInscrit
15Cours BD/WEB - INT Evry
Modèle relationnel (suite)
Schéma BD» Structure de relation
BD» Ensemble d’enregistrements reliés par des
valeurs (clés étrangères) Langage de manipulation
» Ensembliste» Déclaratif» Standard international [ SQL 8, 89]
16Cours BD/WEB - INT Evry
Modèle relationnel (suite)
Prototypes de recherche» System/R chez IBM (197)» Ingres à Berkeley (197)
Systèmes commerciaux» SQL/DS et DB2 d’IBM (1982)» Oracle (1983)» Ingres (1983)» Informix (1981)» Sybase (1984)
17Cours BD/WEB - INT Evry
Modèle relationnel (suite)
Avantages» Indépendance logique/physique» Langage de manipulation simple» Basé sur une théorie mathématique solide» Standard
18Cours BD/WEB - INT Evry
Langages associés au modèle relationnel
Langages de Définition de Données (LDD) :» Définition /mise à jour des schémas des
relations Langages de manipulation de données
(LMD) :» Interrogation : recherche de données» Mises à jour : insertion, suppression,
modification SQL
19Cours BD/WEB - INT Evry
Exemples de requêtes en algèbre relationnelle
Base de données exemple : les vinsVins(num, cru, annee, degre)
Recoltes(nvin, nprod, quantite)
Producteurs(num, nom, prenom, region)
Buveurs(num, nom, prenom, ville)
Commandes(ncde, date, nb, nvin, qte)
Livraisons(ncde, no_ordre, qteLivree)
V
R
P
B
C
L
20Cours BD/WEB - INT Evry
Modèle E/A de la BD des vins
0,n
1,1
(1,1)0,n
1,1
0,n
0,n
0,n
Vins
numcrudegréannee
Producteurs
numnomprenomregion
recoltes
Livraisons
No_ordreqteLivréedate
concerne
Buveurs
numnomprenomville
Commandes
ncdeqtédate
Passer
Donner_lieu
quantite
21Cours BD/WEB - INT Evry
Présentation de SQL
Fonctionnalités : » définition et manipulation de données au format relationnel » contrôle des données
Le langage de manipulation » non procédural » emprunté à l'algèbre relationnelle et au calcul relationnel de tuples
Puissance du langage de manipulation Algèbre Relationnelle + Fonctions-Agrégats + Tri
Une requête SQL (sans fonctions et tri) Suite d'opérations de l'algèbre relationnelle
Introduction
22Cours BD/WEB - INT Evry
Présentation de SQL (2) Origine
» langage SEQUEL du prototype de SGBD relationnel SYSTEM/R (74-76) » laboratoire de recherche IBM à San José
Normalisation ISO » norme SQL1 (1986, 1989) » norme SQL2 (1992) » nouvelle norme en préparation SQL3
Langage de requêtes des SGBD relationnels » ORACLE (Oracle Corporation - 1977) » INGRES (Ingres Technology - 1980) » DB2 (IBM - 1984) » INFORMIX (Informix Inc - 1981) » SYBASE (Sybase Inc - 1984)» MySQL (1995)
Introduction
23Cours BD/WEB - INT Evry
Schéma d’une relation
CréationCREATE TABLE Vins (
num Integer,
cru Char(20),
annee Integer)
Mise à jour – Ajout d'un attribut (norme SQL2 !)
ALTER TABLE Vins ADD COLUMN degre Integer
Suppression (norme SQL2 !) DROP TABLE Vins
Définition des données
24Cours BD/WEB - INT Evry
Contraintes d’intégrité règle qui définit la cohérence d'une donnée ou d'un ensemble de
données de la BD Contraintes définies en SQL
» non nullité des valeurs d'un attribut » unicité de la valeur d'un attribut ou d'un groupe d'attributs » valeur par défaut pour un attribut » contrainte de domaine » clé primaire (un attribut ou un groupe) » intégrité référentielle "minimale"
CREATE TABLE Vins (num integer PRIMARY KEY,cru char (40) NOT NULL,annee integer
CONSTRAINT Cannee CHECK (annee between 1970 and 2010),degre number(4,2)
CONSTRAINT Cdegre CHECK (degre between 9.0 and 15.0))
Définition des données
25Cours BD/WEB - INT Evry
Syntaxe générale de recherche
Syntaxe
SELECT <liste d’attributs projetés>
FROM <liste de relations>
[WHERE <liste des critères de
restriction et de jointure>]
Comment remplir les clauses ?
Quel résultat souhaite voir l’utilisateur, schéma du résultat ?
Où sont les attributs dont j’ai besoin ?
Y-a t-il des conditions sur les valeurs exprimées dans ma requête ? Ai-je plusieurs relations dans ma clause FROM ?
26Cours BD/WEB - INT Evry
Projection
"Donner tous les vins" SELECT *
FROM Vins
"Donner la liste de tous les crus, avec élimination des doublons"
SELECT DISTINCT cru
FROM Vins
27Cours BD/WEB - INT Evry
Restriction et tri
"Donner les vins dont le cru commence par p ou P"
SELECT *FROM Vins WHERE cru LIKE ‘p%’ OR cru LIKE ‘P%’
"Donner les crus des vins de millésime 1995 et de degré 12, triés par ordre croissant"
SELECT cruFROM VinsWHERE annee=1995 AND degre = 12ORDER BY cru
28Cours BD/WEB - INT Evry
Jointure
"Donner les noms des producteurs de Pommard"
SELECT nom
FROM Vins V, Recoltes R, Producteurs P
WHERE V.num = R.nvin
AND R.nprod=P.num
AND cru = ‘Pommard’
Recherche des données
Produitcartésien
Conditions de jointures
Nom d’attribut non ambigü
29Cours BD/WEB - INT Evry
Exemples avec fonctions
"Donner la moyenne des degrés de tous les vins"
SELECT Avg(degre)
FROM Vins
"Donner la quantité totale commandée par le buveur Bac"
SELECT Sum (qte)
FROM Commandes, Buveurs
WHERE Buveurs.nom= 'Bac' AND Buveurs.num=Commandes.nb
30Cours BD/WEB - INT Evry
Exemples de partitionnement
" Donner, pour chaque cru, la moyenne des degrés des vins de ce cru …" SELECT cru, AVG(degre) FROM Vins GROUP BY cru
" … avec un tri par degré décroissant" SELECT cru, AVG(degre) FROM Vins GROUP BY cruORDER BY 2 DESC
" … uniquement si ce cru concerne plus de 3 vins" SELECT cru, AVG(degre) FROM Vins GROUP BY cruHAVING COUNT(*)>=3ORDER BY 2 DESC
31Cours BD/WEB - INT Evry
Calcul de la partition
Trier la relation selon les attributs de groupement
Créer une sous-relation pour chaque paquet ayant même valeur sur l'attribut sur l'ensemble des attributs de groupement, ici « cru »
Appliquer la clause SELECT sur chaque partition (dans notre exemple la valeur de cru et la moyenne des degrés sur la partition
Unifier les résultats
Appliquer la restriction du HAVING
13Tavel
12Tavel
13Pommard
11Tavel
12Pommard
degrecruVins
13Tavel
12Tavel
11Tavel
13Pommard
12Pommard
degrecruVins
12Tavel
12,5Pommard
degrecruVinset
et
initiale
32Cours BD/WEB - INT Evry
Synthèse
Tri des tuples obtenus en (4) suivant les valeurs Al
<liste d’attributs Al ou n° ordre dans le SELECT>
ORDER BY5
Sélection des groupes de (3) vérifiant C2
<condition sur groupes -fonctions> : C2
HAVING4
Partitionnement de l’ensemble obtenu en (2) suivant les valeurs Ak
<liste attributs Ak Aj>GROUP BY3
Sélection des tuples de (1) respectant la condition C1
<Conditions sur les tuples> : C1
WHERE2
Produit cartésien des relations Ri<liste de relations Ri>FROM1
Projection de l’ensemble obtenu en (5) sur les Aj, calcul des expressions, calcul des fonctions (appliquées aux groupes s’il y en a) sur Ap
<liste et/ou expressions attributs Aj et/ou fonctions sur Attributs Ap>
SELECT6
33Cours BD/WEB - INT Evry
Synthèse (2)
Condition de recherche :» WHERE (sélection de
tuples), HAVING (sélection de groupes)
» Compositions de conditions élémentaires (AND, OR, NOT)
» Évaluée à Vrai ou Faux
Condition élémentaire :» Évaluée à Vrai ou Faux » Prédicat :
– Comparaison : =, <, <=, >, >=, <>
Attribut/valeur Attribut/attribut
– Intervalle :BETWEEN– Chaîne : LIKE– Nullité : IS NULL– Appartenance : IN– Quantification : EXISTS,
ANY, ALL
34Cours BD/WEB - INT Evry
Exemple complet
"Donnez par ordre croissant le nom et la somme des quantités commandées par des buveurs bordelais, uniquement si chaque commande est d'une quantité strictement supérieure à 20 litres."
SELECT B.nom, Sum(C.qte) FROM Buveurs B, Commandes C WHERE B.num=C.nb AND B.ville = 'Bordeaux' GROUP BY B.num, B.nom HAVING MIN(C.qte) > 20 ORDER BY B.nom
35Cours BD/WEB - INT Evry
Mise à jour
Insertion Suppression Modification
36Cours BD/WEB - INT Evry
Insertion Insertion d’un seul tuple
INSERT INTO Vins VALUES (100, 'Jurançon', 1979, 12)INSERT INTO Vins (num, cru) VALUES (200, 'Gamay')
Insertion d’un ensemble de tuples CREATE TABLE BORDEAUX(num Integer, annee Integer, degre
number(4,2)) INSERT INTO BORDEAUX
SELECT num, annee, degreFROM VinsWHERE cru = 'Bordeaux'
CREATE TABLE BORDEAUX ASSELECT num, annee, degreFROM VinsWHERE cru = 'Bordeaux'
37Cours BD/WEB - INT Evry
Suppression "Supprimer tous les tuples de Vins"
DELETE FROM Vins ou TRUNCATE TABLE Vins
"Supprimer le vin de numéro 150" DELETE FROM Vins WHERE num = 150
"Supprimer les vins de degré <9 ou >12" DELETE FROM VinsWHERE degre < 9 OR degre > 12
"Supprimer les commandes passées par Belaïd" DELETE FROM CommandesWHERE nb IN (
SELECT numFROM BuveursWHERE nom= ‘Belaïd')
38Cours BD/WEB - INT Evry
Modification « Le producteur 150 habite dans le sud ouest »
UPDATE Producteurs SET region = ‘Sud Ouest'WHERE num = 150
« Les degrés des Gamays augmentent de 10 % » UPDATE VinsSET degre = degre * 1.1WHERE cru = 'Gamay'
« Le buveur ‘Bac’ augmente ses commandes de 10 unités »UPDATE CommandesSET qte = qte + 10WHERE nb IN (
SELECT numFROM BuveursWHERE nom='Bac')
39Cours BD/WEB - INT Evry
Vues relationnelles
Objectifs :» Indépendance logique» Adaptation aux applications» Intégration des applications existantes» Dynamique du schéma de la base» Confidentialité et sécurité» Décentralisation de l’administration d’une BD» Hétérogénéité des modèles
40Cours BD/WEB - INT Evry
Vues relationnelles
Relation virtuelle » Ensemble de tuples n ’existe pas
physiquement» Calculable à l ’exécution
Définie par une requête SQL Utilisable comme une relation Utilisable pour définir une autre vue
41Cours BD/WEB - INT Evry
Exemples
Create view crus (nom) as
select distinct cru
from vins;
Create view buveurs_beaujolais_paris (num, nom, qté_cdée) as
select B. nb, B.nom, sum(qté)
from buveurs B, cdes C, Vins V
where B. nb = C.nb and C.nv=V.nv
and V.cru = ‘ Beaujolais’
and B.ville = ‘Paris’
group by B. nb, B.nom;
42Cours BD/WEB - INT Evry
Manipulation de la BD au travers des vues
Consultation» Toujours possible» Nom de la vue dans la clause from
SELECT *
FROM vins_beaujolais; Mises à jour :
» Rarement possible
43Cours BD/WEB - INT Evry
Transactions
Ensemble logique d'opérations élémentaires sur une BD (unité de traitements séquentiels).
Une transaction fait passer la BD d'un état cohérent à un autre état cohérent
44Cours BD/WEB - INT Evry
Exemple de transaction
T1: virement d'une somme N. T2: dépôt d'une somme M. Transaction T1 Transaction T2 DEBUT B := Lire(X) A := Lire(X) B := B + M A := A - N X := Ecrire(B) X := Ecrire(A) FIN A := Lire(Y) A := A + N Y := Ecrire (B)
FIN
45Cours BD/WEB - INT Evry
Propriétés d'une transaction
(assurées par le SGBD) A C I D
Atomicity Consistency Isolation Durability
46Cours BD/WEB - INT Evry
Atomicity
Une transaction est un ensemble de traitement qui doit être effectué dans sa totalité ou pas du tout (principe du tout ou rien).
Mécanisme de validation (commit), système de reprise après panne.
47Cours BD/WEB - INT Evry
Consistency
Une transaction doit faire passer la BD d'un état cohérent à un autre état cohérent (respect des CI).
Développeurs d'application.
48Cours BD/WEB - INT Evry
Isolation
Une transaction ne doit pas laisser voir ses modifications à une autre transaction tant qu'elle n'est pas validée (COMMIT).
Contrôle de concurrence, sérialisation, verrouillage
49Cours BD/WEB - INT Evry
Durability
Les modifications réalisées par une transaction ne doivent pas être perdues une fois celle-ci validée.
La fin de transaction est un point de non-retour, mécanisme de reprise.
50Cours BD/WEB - INT Evry
51Cours BD/WEB - INT Evry
Le WWW
52Cours BD/WEB - INT Evry
Le système WWW
architecture de base les standards du Web le stockage des documents la protection des documents extensibilité du Web synthèse
53Cours BD/WEB - INT Evry
Vocabulaire Système
programme exécutable processus "classique" processus "multi-thread"
54Cours BD/WEB - INT Evry
Vocabulaire Système Programme exécutable
un programme exécutable est un objet inerte qui est le résultat d’une compilation suivie d’une édition de liens
55Cours BD/WEB - INT Evry
Vocabulaire Système Processus "classique"
objet dynamique correspondant à l’exécution d’un programme exécutable
un processus comporte:» le code du programme» les données du programme» le contexte d'exécution
chaque processus possède son propre espace d’adressage
56Cours BD/WEB - INT Evry
Vocabulaire Système Processus "multi-thread"
un processus définit un ensemble de ressources système
un thread est une activité correspondant à un flot d’exécution dans le contexte d’un processus
plusieurs thread peuvent s'exécuter en parallèle dans le contexte d'un processus, en partageant ses ressources
57Cours BD/WEB - INT Evry
Vocabulaire Système Critique des thread
avantages» limite le nombre de processus» optimise l'utilisation des ressources» autorise le parallélisme
inconvénients» synchronisation des différents thread» risque de "corruption" d'un thread par un autre
thread
58Cours BD/WEB - INT Evry
Utilisation des threads
Implantation efficace d ’un serveur de requêtes
un thread pour servir une requête et non pas un processus
pour éviter le coût de lancement d ’un thread/processus on peut gérer un pool
59Cours BD/WEB - INT Evry
WWW - Architecture de base
Client W3 Serveur W3
pageHTMLaffichée
HTTP
pagesHTML
systèmedefichiers
chaque pagepossède un URL
60Cours BD/WEB - INT Evry
WWW - Le client W3
logiciel de consultation hypertexte» interprète et affiche le texte HTML» affiche le texte plat sans interprétation» visualise les images fixes gif, jpeg et x-bitmap
contient des plug-in ou des visualiseurs externes spécialisés pour divers formats» son, image animée, Postcript, ..
61Cours BD/WEB - INT Evry
WWW - Le serveur W3
fonctions assurées» gère les connexions des clients W3» assure la protection des documents statiques
(HTML, images, ..)» vérifie la validité des requêtes et les droits des
clients» exécute les requêtes des clients
– renvoyer un document statique– exécuter un programme externe
62Cours BD/WEB - INT Evry
WWW - Le protocole HTTP
HTTP est un protocole simple (GET, EXEC, HEAD, ...)
HTTP est un protocole sans session» la nouvelle version HTTP 1.1 permet de
maintenir une connexion persistante HTTP est un protocole peu sécurisé
» évolution avec S-HTTP (Secure) du NCSA ou SSL (Secure Socket Layer) de Netscape
63Cours BD/WEB - INT Evry
WWW - Stockage des documents
système de fichiers de la machine serveur arborescence de fichiers
» par défaut, à partir du serveur W3 avec un répertoire racine fixé par l'administrateur
» à partir d’un compte utilisateur avec le répertoire racine /public_html
un fichier de l’espace de stockage W3 doit être en lecture pour tous
64Cours BD/WEB - INT Evry
WWW - Protection documents
protections standard du système d’exploitation
protections propres au système Web pour accéder un document» accès avec un nom utilisateur et un mot de passe» accès à partir d’un domaine IP» accès depuis une machine particulière
65Cours BD/WEB - INT Evry
WWW - Architecture étendue
HTTP CGIprotocoledédié
client W3 serveur W3scriptCGI
appli externe
formW3
pageW3
systèmede fichiers
BD ousystèmede fichiers
Pages HTML statiques
Pages HTMLdynamiques
66Cours BD/WEB - INT Evry
WWW - Les formulaires HTML
un formulaire autorise l’interactivité entre le client et le serveur
un formulaire contient:» des zones de saisie avec des boutons, des listes de
choix, ..» un attribut action qui définit l'URL d'un programme
exécutable sur le serveur» un attribut method qui définit le mode de transfert
des données vers le programme
67Cours BD/WEB - INT Evry
Exemple de formulaire
<html><body><form name="f1" action="http://www-inf.int-evry.fr/prog.cgi"
method="get" target="resultat">Donner une valeur pour att1 : <input name="att1" value="0"><input type="hidden" name="att2" value=""><input type="submit" value="lancer"></form></body></html>
68Cours BD/WEB - INT Evry
Programme CGI
Interface CGI définit le moyen de passer des informations du client vers le prog. CGI et retour
un prog. CGI reçoit un seul argument de type chaine de caractères
cette chaine se décompose en couples attributs-valeurs
deux modes de transmission GET et POST
69Cours BD/WEB - INT Evry
Programmation CGI (suite)
Programme CGI doit décoder la chaine pour extraire les paramètres
il renvoie son résultat sur sa sortie standard en ayant préalablement déclaré le type (content-type: text/html par exemple)
langages utilisés : Perl souvent, mais on peut choisir n'importe lequel
70Cours BD/WEB - INT Evry
Exemple de CGI en Perl#!/usr/bin/perl -wuse CGI qw (:standard);$ior = param('IOR');print header;print "<HTML><HEAD>\n";print "<TITLE>Résultat décodage IOR</TITLE></HEAD>\n";print "<H4>IOR décodé</I></H4><BR>";print "<HR WIDTH=80%><BR>\n";open(FILE, "-|") || exec "/inf/QOS_CORBA/Olivier/bin/iordump", "-f", $ior;while ($LIG=<FILE>) { print "$LIG<br>\n"; }print "<HR WIDTH=80%><BR>\n";close(FILE);print "</BODY>\n"; print "</HTML>\n";
71Cours BD/WEB - INT Evry
WWW - Programmation CGI
communication serveur W3 <->script CGI:» un ensemble de variables d’environnement» l’entrée standard du processus CGI en exécution» la sortie standard du processus CGI en exécution
le problème de la sécurité» exécution du script avec le minimum de droits» éviter l'accessibilité du code source du script» vérifier les données en provenance du formulaire
72Cours BD/WEB - INT Evry
WWW - Formulaires et CGI
principe de fonctionnement» l’utilisateur remplit un formulaire» le formulaire est envoyé au serveur W3» le serveur positionne les variables d'env. CGI» le serveur lance l'exécution du script CGI et lui
passe le contenu du formulaire» le script CGI fabrique le document et le renvoie au
serveur W3 sur sa sortie standard» le serveur renvoie le document au client
73Cours BD/WEB - INT Evry
WWW - Formulaires et CGI (2)
contenu d'un formulaire » chaîne de caractères représentant une liste d'éléments de la
forme (champ,valeur)
méthode GET» la chaîne est ajoutée à l'URL désignant le script
» elle est mise dans la var. d'env. QUERY_STRING
méthode POST» la chaîne est envoyée dans une séquence http spéciale
» elle est transmise au script sur son entrée standard
74Cours BD/WEB - INT Evry
WWW - Problème du CGI
Client 1
Client 2
Client 3
C
G
I
Processdu serveur
Process 1
Process 1
Process 1Serveur W3
Scripts CGI
75Cours BD/WEB - INT Evry
WWW - Solution des API
Client 1
Client 2
Client 3
Processdu serveur
Serveur W3
API
ensemblede fonctions
Thread 1
Thread 2
Thread 3
les scripts CGI deviennent des fonctionsd'une librairie dynamique DLL, exécutéesdans des thread du process serveur W3
76Cours BD/WEB - INT Evry
FastCGI
Genre de script CGI persistant (démon) script décomposé en 3 parties :
» initialisation : une fois» corps : à chaque requête» terminaison : une fois
initialisation doit inclure le code coûteux (connexion à une BD, …)
bien adapté à un accès BD, mais une fois lancé est persistant
77Cours BD/WEB - INT Evry
WWW - Intérêts du Web
client universel facilité d'emploi standards ouverts intégration des autres services Internet extensibilité du système faibles coûts logiciel et réseau utilisation au sein d'une entreprise (Intranet)
78Cours BD/WEB - INT Evry
WWW - Limites du Web
les performances» le réseau Internet => augmenter le débit» les scripts CGI => solution FastCGI
la sécurité» HTTP => version sécurisée S-HTTP» niveau TCP/IP => solution SSL
79Cours BD/WEB - INT Evry
WWW - Limites du Web (2)
la gestion des transactions» pas possible avec HTTP 1.0
– ne travaille pas en mode session– une solution est d'utiliser des "cookies"
» la version HTTP 1.1– intègre la notion de connexion persistante (au niveau TCP)
la construction d’interfaces utilisateur» limitation de HTML dans sa version actuelle» utilisation de Java
80Cours BD/WEB - INT Evry
WWW - Evolution du Web
initialement» accès à des informations
– réparties sur un réseau– sous la forme de documents hypermédia
aujourd'hui» développement et exécution d'applications
– client/serveur, hétérogènes– au sein d'une même organisation (Intranet)
81Cours BD/WEB - INT Evry
Architecture des passerelles
BD/WEB
82Cours BD/WEB - INT Evry
Interfacer le Web et les BD
Principes des passerelles Exemples des solutions Microsoft
» IDC» ASP
Passerelle Web/Oracle INT Solutions Java (applets, servlets, JSP)
83Cours BD/WEB - INT Evry
Principes des passerelles
84Cours BD/WEB - INT Evry
Principes des passerelles
Passerelles mono-requête Passerelles multi-requêtes
(transactionnelles)
85Cours BD/WEB - INT Evry
Fonctionnalités à assurer
(1) décodage de la requête http (passage var. environnements vers SQL)
(2) exécution de la requête sur le SGBD (3) formatage HTML du résultat
86Cours BD/WEB - INT Evry
Exécution d ’une requête SQL
Programme écrit avec une interface BD» solution dépendante du SGBD» solution indépendante du SGBD (ODBC,
JDBC ou DBI pour Perl) Langages de programmation utilisables
» classiques : C, C++, Ada, … si embedded SQL
» Perl (avec DBI)
87Cours BD/WEB - INT Evry
Habillage HTML du résultat Solution générique (et automatisable) :
» select : tableau HTML» autre requête : chaine de caractères
Solution spécifique : codage spécifique pour chaque requête
– dans la passerelle (une passerelle / requête !)– dans le SGBD (procédure stockée)
Solution intermédiaire :» paramétrisation du résultat (formulaire de mise à
jour, parcours hypertexte d ’une BD ,…)
88Cours BD/WEB - INT Evry
Accès à la BD (html pur)
Client browser
ServeurHTTP
SGBD
url
résultat html
CGI
Passerelle
querystring
SQL résultat
rés. HTML
89Cours BD/WEB - INT Evry
Exemple HTML pur
<html><body><form name="f1" action="http://mica/multi2.cgi" method="get"><input type="hidden" name="uid" value="citcom/citcom@MICA"><input type="hidden" name="sqlstatement"
value="select * from vins where cru=">Donner un cru : <input name="vcru" value=""><p><input type="submit" value="lancer"></form></body></html>
90Cours BD/WEB - INT Evry
Accès à la BD (script client)
Client browser
ServeurHTTP
SGBD
url
résultat html
Passerellequerystring
SQL résultatrés. HTML
91Cours BD/WEB - INT Evry
Exemple HTML avec Javascript
<html><body><form name="f1" action="http://mica/multi2.cgi" method="get"><input type="hidden" name="uid" value="citcom/citcom@MICA"><input type="hidden" name="sqlstatement"
value="select * from vins where cru=">Donner un cru : <input name="vcru" value=""><p><input type="button" value="lancer"
onClick="f1.sqlstatement.value+=f1.vcru.value; f1.submit();">
</form></body></html>
92Cours BD/WEB - INT Evry
Accès à la BD (hors http)
Client browser+ programme Java, Tcl, ...
SGBD
protocolespécifique
protocole spécifique : JDBC, IIOP (CORBA)
93Cours BD/WEB - INT Evry
Qui fait quoi ?
(1) (2) (3)
HTML pur
script client
hors http
cgi spécifique SGBD
SGBD
SGBD
passerelle ouSGBD
passerelle ouSGBD
client
client
94Cours BD/WEB - INT Evry
Variations
dépendance / indépendance par rapport au SGBD (natif ou ODBC)
langage de requêtes supporté (SQL ou un sous-ensemble, statique vs dynamique)
formattage du résultat (personnalisable ou non)
performances
95Cours BD/WEB - INT Evry
Performances
CGI vers NSAPI, ISAPI (mais propriétaire)
diminuer le nombre de processus (si grand nombre de clients : passerelle multithread
96Cours BD/WEB - INT Evry
TransactionsRappels
transaction = programme BD (séquence de lire, écrire)
propriétés = ACID– A : Atomicity– C : consistency– I : Isolation– D : Durability
97Cours BD/WEB - INT Evry
Exemples d’applis transactionnelles
commandes on-line (vente par correspondance, train, avion, ...)
banque assurance une bonne partie du e-business!!!!
98Cours BD/WEB - INT Evry
Transactions et Web
Transaction = séquence d’invocations url (gestion du contexte par le web?)
Transaction = propriétés ACID (assurées par le SGBD)
HTTP = pas de support de session– gérer le contexte côté client (cookies)
– simuler des sessions http (web transactionnel)
– supporter un langage avec un run-time côté serveur (PHP, ASP, JSP, ...)
99Cours BD/WEB - INT Evry
Transactions et cookies
Client browser Serveur http cgi
SGBD
1 11’ c11’ c1
2 c1 2 c12’ c1, c2 2’ c1, c2
3 fin c1, c2 3 fin c1, c2
4 sql(c1, c2)
5’ del(c1, c2) 5’ del(c1, c2)4’ ok1 : premier accès
1’ : retour du cookie c12 : autre accès avec transport du cookie c12’ : retour des cookies c1, c23 : fin transaction avec transport c1, c24 : construction de la transaction et exécution sur le SGBD5’ : suppression des cookies
100Cours BD/WEB - INT Evry
Transaction et cookies (2)
Contexte est géré chez le client (cookies)
avantages :– simplicité de la mise en œuvre– accès en maj de la BD se fait en une fois à la fin
(pas de ressources bloquées)– si pas de terminaison de la transaction par
l ’utilisateur, rien à faire
101Cours BD/WEB - INT Evry
Transaction et cookies (3)
Inconvénients– pas vraiment transactionnel– fonctionnalité limitée– beaucoup de cgi à écrire (sauf programme de
maj générique qui prenne une séquence d ’instructions SQL en entrée)
Problèmes des cookies– global à l ’utilisateur (pas de différenciation entre
fenêtres)– global à une url (pas deux transactions en même
temps sur le même site)
102Cours BD/WEB - INT Evry
Passerelle transactionnelle
Client browser Serveur http cgi démon passerelle SGBD
103Cours BD/WEB - INT Evry
Passerelle transactionnelleprincipes
Contexte géré par un démon côté serveur besoin d ’un identifiant de transaction
stocké côté client (cookie ou variable selon client) et côté démon (dans une table)
passerelle ne traite pas une seule requête mais toute une transaction (plusieurs requêtes)
104Cours BD/WEB - INT Evry
Passerelle transactionnelleFonctionnement (1)
1 : demande de création de transaction (implicite ou explicite)
– allocation d ’un idf par le démon, maj de la table des transactions, lancement d ’une passerelle, renvoi de l ’idl au client (cookie ou variable)
2 : demande d ’opérations sur la BD – routage de la demande par le démon sur la
bonne passerelle en utilisant l ’idf et sa table
105Cours BD/WEB - INT Evry
Passerelle transactionnelleFonctionnement (2)
3 : terminaison de la transaction– implicite : plantage, timeout
– explicite : idem 2 + maj de la table des transactions, annulation de l ’idf côté client et arrêt de la passerelle
106Cours BD/WEB - INT Evry
Passerelle transactionnelleBilan
Avantages– vraiment transactionnel– solution générique
Inconvénients– architecture complexe– blocage des ressources– nécessité de détecter un « abandon » de
l ’utilisateur (timeout)
107Cours BD/WEB - INT Evry
Support d ’un langage
Offrir un langage de programmation intégré au Web (possibilité de faire des appels depuis une page Web, support par le serveur HTTP)
run-time du langage offre un support de session (donc de transactions)
PHP, servlet - JSP, ASP, XSP (Cocoon) voir partie sur Java pour plus de détails
108Cours BD/WEB - INT Evry
109Cours BD/WEB - INT Evry
Passerelles BD/WEB
Quelques solutions industrielles
110Cours BD/WEB - INT Evry
Solutions industrielles
Solutions Microsoft» IDC» ASP
Passerelle Web/Oracle INT Solution Java
» appels, servlets, JSP
111Cours BD/WEB - INT Evry
Web/BD - La solution Microsoft
Internet Information Server (IIS)» serveur W3 de Microsoft» fourni avec Windows NT 4.0» possède une API propriétaire: ISAPI
Internet Database Connector (IDC)» un composant de IIS sous la forme d'une
librairie dynamique httpodbc.dll» s’appuie sur ODBC pour accéder une BD SQL
112Cours BD/WEB - INT Evry
Web/BD - IIS + IDC Architecture
BD
client W3
IIS IDC piloteSQL ServerODBC
SQLServer
HTTP
ISAPI.idc
.htx SQL (via API ODBC)
SQL(via APISQL Server)
113Cours BD/WEB - INT Evry
Web/BD - IIS + IDC Contenu d’un fichier .idc
nom de la source de données ODBC nom utilisateur et mot de passe pour la
connexion à la source de données accès BD en interrogation ou maj via:
» une requête SQL» un appel de procédure stockée
référence vers le fichier .htx
114Cours BD/WEB - INT Evry
Web/BD - IIS + IDC Contenu d’un fichier .htx
code HTML étendu avec des balises spécifiques à IDC délimitées par <%%>» <%begindetail%>, <%enddetail%>» <%if%>, <%else%>, <%endif%>» <%nom de variable%>
modèle de présentation de la page Web fabriquée à partir des données extraites de la base de données
115Cours BD/WEB - INT Evry
Web/BD - IIS + IDC Fonctionnement
le client W3 invoque un fichier .idc» soit comme un lien HREF» soit comme un script de formulaire
réception de l’URL par IIS IIS appelle la librairie dynamique IDC IDC utilise le fichier .idc pour:
» se connecter à la source de données ODBC » lui adresser la requête SQL
116Cours BD/WEB - INT Evry
Web/BD - IIS + IDC Fonctionnement IIS+IDC
(2)
ODBC exécute la requête SQL et renvoie les données de la BD à IDC
IDC récupère les données de la BD IDC met les données au format HTML
en utilisant le fichier .htx IDC renvoie la page Web au serveur IIS IIS renvoie la page Web au client W3
117Cours BD/WEB - INT Evry
Web/BD - IIS + IDC Formulaire avec un
script .idc
<form method=“post” action=“/scripts/bigsal.idc”> <p> Donnez salaire: <input name=“sal” value=“10000> <p> <input type=“submit” value=“go”> </form>
118Cours BD/WEB - INT Evry
Web/BD - IIS + IDC Un exemple de fichier .idc
Datasource: personnel Username: scott Template: bigsal.htx SQLStatement:
» + select nom, sal» +from personnel» +where sal > %sal%
119Cours BD/WEB - INT Evry
Web/BD - IIS + IDC Un exemple de fichier .htx
<html> <head><title>Gros salaires</title></head> <body> <%begindetail%> <%if CurrentRecord eq 0%>
» <b>Voici les gros salaires > <%idc.sal%></b><br> <%endif%> <%nom%><%sal%> <%enddetail%> <p>
120Cours BD/WEB - INT Evry
Web/BD - IIS + IDC Un exemple de fichier .htx
(2)
<%if CurrentRecord eq 0%>» <i>Désolé, pas de salaire sup. à <%idc.sal%> </i>
<%else%>» <h2>Page Web créée par IDC</h2>
<%endif%> <p> </body> </html>
121Cours BD/WEB - INT Evry
Web/BD - IIS + IDC Critique
avantages» relativement simple à mettre en oeuvre» plus performant que le CGI» ouverture vers les SGBD ODBC
inconvénients» solution propriétaire (IIS et ISAPI)» pas de gestion de transactions» pas d'outil de développement (sauf IIS Add-In)
122Cours BD/WEB - INT Evry
123Cours BD/WEB - INT Evry
Interface BD/Webles ASP (Microsoft)
Solution Microsoft la plus complète et la plus puissante
ASP programmes s ’exécutant côté serveur (généralise CGI et ISAPI)
permet l ’utilisation de contrôles ActiveX et d ’applets JAVA
interface BD à travers un composant spécifique ADO
124Cours BD/WEB - INT Evry
Principe ASP
Client Serveur
Browser
DécodageHTTP
Pagedemandée
Page activeASP
Vbscriptou Jscript
Données
Pagedynamique
AjoutenveloppeHTTP
Encodage HTTP
125Cours BD/WEB - INT Evry
Architecture générale
Internet IISAppli. ISAPI
Appli. CGI
Scripts Perl, AWKDLL Interface ASP
InterprèteVBscript
InterprèteJscript
Composant ADO
ComposantsActive Server
Composantspersonnalisés
Pilote ODBC
Données
Pages actives (fichiers ASP)
SSinclude
126Cours BD/WEB - INT Evry
Plan d ’une page ASP<HTML>
<HEAD>…</HEAD><BODY>
<% …………….. %><SCRIPT LANGUAGE=Vbscript>
…</SCRIPT> <SCRIPT LANGUAGE=Vbscript RUNAT SERVER>
…</SCRIPT><!--#Include … --><TABLE> …</TABLE>
</BODY></HTML>
Sections HTML normales
Script serveur (création page)
Script client (interprétation page)
Script serveur (procédures, fonctions)
SSI (script ou HTML dans fichier séparé)
HTML normal
127Cours BD/WEB - INT Evry
Le modèle objet d ’ASP
Client Serveur
Objet REQUESTCollections :
CookiesFormQueryStringServerVariablesClientCertificate
Objet RESPONSECollection :
Cookies(propriétés et méthodes)
Objet SERVER(méthodes)
Objet APPLICATION
(propriétés et méthodes)
Objet SESSION(propriétés etméthodes)
128Cours BD/WEB - INT Evry
Composants ASP standards
Content Linking (liste de liens) Browser Capabilities (caractéristiques
du navigateur) Ad Rotator (gestion de flashes
publicitaires) Active Database (accès aux BD)
129Cours BD/WEB - INT Evry
Accès à la BD (ADO)
Active Server Pages
Composant ActiveDatabase
ADO
PiloteODBC
Interface dufournisseur d ’accès
Source de données
130Cours BD/WEB - INT Evry
Le modèle objet ADO
Objet RecordSet
Objet Field
Collection Fields
Objet Property
Collection Properties
Objet Property
Collection Properties
Objet Error
Collection Errors
Objet Parameter
Collection Parameters
Objet Property
Collection Properties
Objet Connection
Objet Command
131Cours BD/WEB - INT Evry
Exemple de transactionSet oConn =
Server.CreateObject(« ADODB.Connection »)oConn.Open « Contacts »oConn.BeginTransoConn.Execute « DELETE * FROM Contact WHERE
State=‘ LA ’ »Nberror = oConn.Errors.CountoConn.Execute « DELETE * FROM Names WHERE
State=‘ LA ’ »Nberror=Nberror + oConn.Errors.Countif Nberror = 0 Then oConn.CommitTransElse oConn.RollbackTransEnd IfoConn.CloseSet Oconn = Nothing
132Cours BD/WEB - INT Evry
Exemple de fichier ASP<HTML><HEAD>// ATTENTION LES COMMENTAIRES RAJOUTES NE SONT PAS CONFORMES A LA SYNTAXE
ASP// SI ON VEUT EXECUTER LE FICHIER DANS UN CONTEXTE ASP IL FAUT ENLEVER// TOUTES LES LIGNES COMMENCANT PAR //
<META HTTP-EQUIV="Content-Type" CONTENT="text/html;charset=windows-1252"><TITLE>Logiciel</TITLE></HEAD><BODY>
// RECUPERATION DANS LA QUERYSTRING DES VALEURS DES VARIABLES PARAM// ET DATA (SI ELLES EXISTENT)<%Param = Request.QueryString("Param")Data = Request.QueryString("Data")%>// TEST DE L'EXISTENCE D'UNE SESSION WIZ_conn// SI OUI ON POSITIONNE conn SINON ON EN CREE UNE NOUVELLE<%If IsObject(Session("WIZ_conn")) Then Set conn = Session("WIZ_conn")Else Set conn = Server.CreateObject("ADODB.Connection") conn.open "WIZ","","" Set Session("WIZ_conn") = connEnd If%>
133Cours BD/WEB - INT Evry
Exemple ASP (2)// PREPARATION DE LA REQUETE SQL A EXECUTER<% sql = "SELECT * FROM [Logiciel]" If cstr(Param) <> "" And cstr(Data) <> "" Then sql = sql & " WHERE [" & cstr(Param) & "] = " & cstr(Data) End If// ON CREE UN OBJET RECORDSET QUI VA PERMETTRE D'ACCEDER AU RESULTAT// DE LA REQUETE Set rs = Server.CreateObject("ADODB.Recordset")// ON LANCE LA REQUETE EN PASSANT EN ARGUMENTS LA CHAINE REPRESENTANT// LA REQUETE ET L'OBJET SESSION rs.Open sql, conn, 3, 3%>// AFFICHAGE DU RESULTAT SOUS FORME DE TABLE<TABLE BORDER=1 BGCOLOR=#ffffff CELLSPACING=0><FONT FACE="Arial" COLOR=#000000><CAPTION><B>Logiciel</B></CAPTION><THEAD><TR><TH>CléLogiciel></TH><TH >NomLogiciel></TH><TH>PrixVente></TH><TH>PrixAchat></TH><TH>Stock></TH><TH>Photo></TH><TH>Détails></TH></TR></THEAD><TBODY>
134Cours BD/WEB - INT Evry
Exemple ASP (3)// ON SE POSITIONNE SUR LE PREMIER ELEMENT DU RESULTAT<%On Error Resume Nextrs.MoveFirst// TANT QUE IL RESTE DES TUPLES A TRAITERdo while Not rs.eof %>// TRAITEMENT D'UN TUPLE (AFFICHAGE EN FORMAT HTML DE CHACUN DES ATTRIBUTS)<TR VALIGN=TOP><TD><%=Server.HTMLEncode(rs.Fields("CléLogiciel").Value)%><BR><TD><TD><%=Server.HTMLEncode(rs.Fields("NomLogiciel").Value)%><BR></TD><TD><%=Server.HTMLEncode(rs.Fields("PrixVente").Value)%><BR></TD><TD><%=Server.HTMLEncode(rs.Fields("PrixAchat").Value)%><BR></TD><TD><%=Server.HTMLEncode(rs.Fields("Stock").Value)%><BR></TD><TD><BR></TD><TD><><%=Server.HTMLEncode(rs.Fields("Détails").Value)%><BR></TD></TR>// TUPLE SUIVANT<%rs.MoveNext// FIN TANT QUEloop%></TBODY><TFOOT></TFOOT></TABLE></BODY></HTML>
135Cours BD/WEB - INT Evry
Bibliographie
Interface entre web et bases de données sous windows NT, A. Homer, D. Gill, S. Jakab, Eyrolles 1998
http://www.activeserverpages.com http://www.asphole.com http://www.15seconds.com
136Cours BD/WEB - INT Evry
137Cours BD/WEB - INT Evry
Passerelle BD/Web INT
Passerelle « mono-requête » dédiée Oracle (CGI écrit en Pro*C) « générique » pour l ’affichage des
résultats» tout se fait sur le client (variables à
positionner dans le formulaire)» pas de travail à faire côté serveur
138Cours BD/WEB - INT Evry
Programmation de la passerelle
Écriture de formulaires HTML devant déclarer et positionner des variables :» obligatoires : uid (chaine de connexion Oracle),
mode (NOR le plus simple), sqlstatement (instruction SQL à exécuter, peut être vide)
» optionnelles : title par exemple» des contraintes entre les variables (une
variable ne peut être positionnée si une autre ne l ’est pas également)
139Cours BD/WEB - INT Evry
Exemple de formulaire
<html><body><h1>GENERATION D ’UN FORMULAIRE D ’INSERTION DANS LA RELATION VINS</h1><P></P><form name=‘f1’ action=‘http://cgi’ mode=‘get’><input type=‘hidden’ name=‘uid ’ value=‘toto/titi@MICA’><input type=‘hidden’ name=‘mode’ value=‘INS’><input type=‘hidden’ name=‘table’ value=‘VINS’><input type=‘hidden’ name=‘sqlstatement’ value=‘’><input type=‘button’ value=‘insertion dans VINS’ onClick=‘f1.submit();’><P></P></form></body></html>
140Cours BD/WEB - INT Evry
Les modes NORmal : tableau INSertion : formulaire d ’insertion MAJ : formulaire de maj SUPpression : formulaire de suppression QBE : formulaire d ’interrogation à la QBE HYPertexte : permet une navigation
hypertexte dans les clés étangères et primaires
COPy : menu construit par SELECT
141Cours BD/WEB - INT Evry
Support des URLs
Stockage des urls dans la BD (par exemple des liens sur des fichiers images)
il faut que la passerelle traite les urls (chaine de caractères) différemment
nom des attributs correspondants à des urls ont un préfixe fixe (URL_ ou IMG_)
142Cours BD/WEB - INT Evry
Générateur d ’application
générateurSourceXML
Descriptionde l ’application
Formulaires HTMLà personnaliser
143Cours BD/WEB - INT Evry
Exemple de source XML<?xml version=« 1.0 »?><appli><entete>
<uid>titi/toto@MICA</uid><titre>Mon Appli</titre>
</entete><liste_form>
<formulaire><nom_table>VINS</nom_table><mode><mode_ins></mode_ins></mode>
</formulaire></liste_form></appli>
144Cours BD/WEB - INT Evry
145Cours BD/WEB - INT Evry
Solution Java
146Cours BD/WEB - INT Evry
Java et le Web
Notion de JVM se prête bien au Web grande diffusion du langage JDBC (API standard pour les SGBDR) Applets servlets Java Server Pages
147Cours BD/WEB - INT Evry
Java - Java et le Web
langage pour le client W3» applet = "petite application" Java compilée
– téléchargée à partir d'un serveur W3
– exécution sécurisée par la JVM du client
langage pour le serveur W3» servlet = application Java compilée
– résidant sur le serveur
– exécution par la JVM du serveur
148Cours BD/WEB - INT Evry
JDBC
API Java pour manipuler des relations via SQL (dans des fichiers locaux ou via un SGBD)
Une seule API uniforme (même niveau que SQL CLI de X/open)
Indépendance / SGBD cible (via des pilotes) Code portable de bout en bout Pas forcément construit au dessus de
ODBC
149Cours BD/WEB - INT Evry
Pilotes JDBC
JDBC non supporté en natif par les SGBD du commerce (ou les systèmes de fichiers)
Transformations des appels JDBC en appels natifs
Un pilote pour chaque SGBD 4 catégories de pilotes en fonctions de :
» La présence ou non de pilote SGBD (non java) sur le client
» Protocole de communication entre le client Java et le serveur
150Cours BD/WEB - INT Evry
Les pilotes (suite)
Application Java
Commutateur JDBC(Driver Manager)
JDBC NetDriver(Java)
Pont JDBC-ODBC(Java)
Driver Javaou Java/C
Protocole d’accès aumiddleware JDBC
Protocole d'accès propriétaire spécifiques aux SGBDR
API JDBC
Driver ODBC(c/c++)
151Cours BD/WEB - INT Evry
Principes de programmation
Quel que soit le gestionnaire de BD considéré, les phases de l’interaction sont identiques :» Charger le driver» Connexion à la base» Création d'un statement» Exécution de la requête» Récupération des résultats» Gestion transactionnelle (commit/abort)
152Cours BD/WEB - INT Evry
Classes et interfaces du "paquage"java.sql
Driver Statement Connection ResultSet ResultSetMetaData DatabaseMetaData
PreparedStatement
CallableStatement
Java.lang.Object
Java.util.Date DriverManager DriverPropertyInfo Types
Date Time TimeStamp
153Cours BD/WEB - INT Evry
Connexion JDBC
Classe java.sql.Connection URL d’une source de données
jdbc:<subprotocol>:<subname>
jdbc:oracle:oci8:@
jdbc:oracle:thin:@mica:1521:ENSE
jdbc:msql//athens.com:4333/db_test
154Cours BD/WEB - INT Evry
Connexion à la base (suite)
Class.forName("oracle.jdbc.driver.OracleDriver");
chargement dynamique de la classe implémentant le pilote
Oracle
String dburl = "jdbc:oracle:thin:@mica:1521:ENSE";
construction de l’url pour Oracle INT
Connection conn = DriverManager.getConnection(dburl, "toto",
"titi");
connexion à l’url avec un (user, passwd)=(toto, titi)
155Cours BD/WEB - INT Evry
Création d'un Statement
Un objet Statement symbolise une instruction SQL
3 types de statement :» Statement : requêtes simples» PreparedStatement : requêtes précompilées» CallableStatement : procédures stockées
Création d'un Statement :
Statement stmt = conn.createStatement();
156Cours BD/WEB - INT Evry
Execution d'une requête (1/2)
3 types d'executions :» executeQuery : pour les requêtes qui retournent un
ensemble (SELECT)
» executeUpdate : pour les requêtes INSERT, UPDATE, DELETE, CREATE TABLE et DROP TABLE
» execute : pour quelques cas rares (procédures stockées)
157Cours BD/WEB - INT Evry
Execution d'une requête (2/2)
Execution de la requête :
String myQuery = "SELECT nom, adresse " +
"FROM client " +
"WHERE (nom=’L%') " +
"ORDER BY nom";
ResultSet rs = stmt.executeQuery(myQuery);
158Cours BD/WEB - INT Evry
Récupération des résultats (1/2)
executeQuery() renvoit un ResultSet Le RS se parcourt itérativement ligne par ligne Les colonnes sont référencées par leur numéro ou
par leur nom L'accès aux valeurs des colonnes se fait par les
méthodes » getXXX() où XXX représente le type de l'objet» ou bien par un getObject suivi d’une conversion explicite
Pour les types longs, on peut utiliser des streams.
159Cours BD/WEB - INT Evry
Récupération des résultats (2/2)
java.sql.Statement stmt = conn.createStatement();
ResultSet rs = stmt.executeQuery("SELECT a, b, c FROM Table1");
while (rs.next())
{
// print the values for the current row.
int i = rs.getInt("a");
String s = rs.getString("b");
byte b[] = rs.getBytes(3);
System.out.println("ROW = " + i + " " + s + " " +
b[0]);
}
160Cours BD/WEB - INT Evry
Exemple de SQL dynamique
Class Employe {
...
Public static int updateEmploye(int num, String nom) throws SQLException, ClassNotFoundException { try {
Class.forName("oracle.jdbc.driver.OracleDriver");
String dburl "jdbc:oracle:thin:@mica:1521:ENSE");
Connection conn = DriverManager.getConnection(dburl, "toto", "titi");
conn.setAutoCommit(false);
PreparedStatement pstmt = conn.prepareStatement("UPDATE Employe SET salary=?, name=?, WHERE numemp=?");
PSMT.setNull(1); psmt.setString(2, nom); psmt.setInt(3, num);
int nbLignesModifiees = psmt.executeUpdate();
if (nbLignesModifiees == 1) conn.commit(); else conn.rollback();
} catch (Exception e) {e.printStackTrace();}
}
161Cours BD/WEB - INT Evry
Accès aux méta-données
La méthode getMetaData() permet d'obtenir les méta- données d'un ResultSet.
Elle renvoit des ResultSetMetaData. On peut connaitre :
» Le nombre de colonne : getColumnCount() » Le nom d'une colonne : getColumnName(int col) » Le type d'une colonne : getColumnType(int col)» ...
162Cours BD/WEB - INT Evry
Exemple de MetaDataClass HTMLResultSet {
private ResultSet rs;
public HTMLResultSet (ResultSet rs){this.rs=rs;}
public String toString() {
StringBuffer out = new StringBuffer(); out.append("<TABLE>");
ResultSetMetaData rsmd=rs.getMetaData();
int numcols=rsmd.getColumnCount();
out.append("<TR>");
for (int i=0;i<numcols;i++) {
out.append("<TH>").append(rsmd.getColumnName(i));
}
out.append("</TR>");
...
}
163Cours BD/WEB - INT Evry
Correspondance de type SQL/Java
Type SQL Type Java Type Java retournépar getObject()
Méthoderecommandée aulieu de getObject()
numeric Java.Math.BigDecimal Java.Math.BigDecimal Java.Math.BigDecimalGetBigDecimal()
integer Integer Integer Integer getInt()
float Double Double Double getDoubel()
char, varchar String String String getString()
date Java.sql.Date Java.sql.Date Java.sql.Date getDate()
164Cours BD/WEB - INT Evry
JDBC et la sécurité
Respecte les principes sécurité de Java application et trusted applets :
» accès bases locales et serveur BD Untrusted applets ou untrusted JDBC
driver » connexion seulement au site de
chargement
165Cours BD/WEB - INT Evry
Evolution de JDBC
JDBC 1.0 (janvier 1996) JDBC 2.0 (Mars 1998) JDBC 2.1 (2000) Extensions de JDBC 2.x
» parcours avant/arrière d’un ResultSet» mise à jour depuis un ResultSet» batch de plusieurs ordres SQL» support des types SQL3» validation 2 phases via XA» notion de DataSource et utilisation de JNDI» pool de connexion, cache sur le client
166Cours BD/WEB - INT Evry
SQLJ Initiative de plusieurs éditeurs (Oracle,
IBM, ...) Offre une interface de plus haut niveau
que JDBC (moins de code à écrire) Peut se mixer avec du JDBC (pas de SQL
dynamique p.e dans SQLJ) SQLJ compilé en JDBC
167Cours BD/WEB - INT Evry
Exemples SQLJ
public static void updateDuration(String projName, int numDays) throws SQLException {
#sql {UPDATE projects SET duration=duration+:numDays WHERE id=:projName};
#sql {COMMIT};
}
public static voidlistOpenProjects() throws SQLException {
ProjIter projs=null; // déclaration de l'instance d'itérateur
#sqlprojs={SELECT start_date, name FROM projects };
while(projs.next()) {
System.out.println("Projet "+ projs.name() + "commence le "+projs.start_date());
}
projs.close(); }
168Cours BD/WEB - INT Evry
Applets
Programme Java pouvant être téléchargé depuis un serveur Web et exécuté dans le contexte d'un navigateur
attention à ce que la version de la JVM du navigateur soit compatible avec celle du développement de l'applet
169Cours BD/WEB - INT Evry
Applet (exemple)
Hello.html<html><body><h2>Test d'applet</h2>Voici le test : <applet code="HelloWorld.class"></applet></body></html>
HelloWorld.javaimport java.applet.Applet;import java.awt.Graphics;public class HelloWorld extends Applet {
public void paint (Graphics g) {g.DrawString("HelloWorld!", 50, 25); }
}
170Cours BD/WEB - INT Evry
Servlets
Servlet 2.2 (http://java.sun.com/servlet) Tomcat implantation pour Apache équivalent du CGI pour Java extensions au CGI (session,
bufferisation, redirection/chainage)
171Cours BD/WEB - INT Evry
Architecture servlet
Client navigateurWeb Servlet container
servlet2servlet1
ServeurHTTP
Container gère les servlets (activation, désactivation)
172Cours BD/WEB - INT Evry
Modèle d ’objets servlet
Objet request servlet1 Objet Response
Objet session
getParametergetAttributegetHeadersgetCookies
setBufferSizesetHeadersetRedirect
getAttribute
173Cours BD/WEB - INT Evry
JSP
JSP 1.1 (http://java.sun.com/jsp) Tomcat implantation pour Apache inclusion de script dans des pages HTML équivalent de ASP, PHP pour Java est compilé sous forme de servlet portabilité de Java extensibilité du langage de script serveur
via les librairies de tag
174Cours BD/WEB - INT Evry
Exemple de page JSP<html><%@ page language=« java » import=« java.util.* » %><h1>Bienvenue</h1><p>Jour : <p><jsp:usebean id=« clock » class=« jspCalendar »/><ul><li>Jour : <%= clock.getDayOfMonth() %><li>Annee : <%= clock.getYear() %></ul><%-- Test pour AM ou PM --%><%! Int time = Calendar.getInstance().get(Calendar.AM_PM); %><% if (time == Calendar.AM) { %>Good Morning<% } else { %>Good Afternoon<% } %><@ include file=« copyright.html » %></html>
175Cours BD/WEB - INT Evry
Composants d ’une page JSP (1)
JSP actions (ou tags) : permet d ’appeler des beans (syntaxe XML)
directives : traitées par le moteur JSP lors de la compilation de la page en servlet (include, import, ...)
déclarations : comme en Java
176Cours BD/WEB - INT Evry
Composants d ’une page JSP (2)
expressions : variables ou constantes intégrées dans la page résultat
scriplets : blocs de code Java intégrés dans une page JSP
commentaires
177Cours BD/WEB - INT Evry
Tags personnalisés
On peut ajouter ses propres tags pour simplifier l ’écriture de pages JSP
librairies de tags mécanisme de définition de nouveaux
tags (assez complexe)
178Cours BD/WEB - INT Evry
Exemple d ’utilisation de tags
<html><%@ taglib uri=« http://acme.com/taglibs/simpleDB.tld »prefix=« x » %><x:queryBlock connData=« defude/bruno@MICA »> <x:queryStatement>select num, cru from vins</x:queryStatement> Les 10 premiers vins sont : <table> <tr><th>Numero</th><th>Cru</th> <x:queryCreateRows from =« 1 » to=« 10 »>
<td><x:queryDisplay field=« num »/></td><td><x:queryDisplay field=« cru »/></td>
</x:queryCreateRows> </table></x:queryBlock></html>
179Cours BD/WEB - INT Evry
Exemple (suite)
Définition d ’un tag queryBlock lui même composé d ’autres tags (queryStatement, queryCreateRows)
permet de cacher JDBC au codeur de la page
un tag est défini par un descipteur (document XML) + une classe Java l ’implémentant
180Cours BD/WEB - INT Evry
181Cours BD/WEB - INT Evry
Evolution du WWW
Le monde XML
182Cours BD/WEB - INT Evry
De SGML à XML
SGML» Inventé par Charles Goldfarb, juriste chez IBM.» Du balisage typographique au balisage logique.
HTML» Inventé par Tim Berners-Lee comme langage de
description des pages du Web.» Concept d’ancre : hypertexte.
HyTime» Langage très ambitieux pour la description des liens intra
et inter documents. XML
» Une synthèse de SGML, HTML et HyTime.
183Cours BD/WEB - INT Evry
Le monde XML (ou plutôt un extrait !)
R D F
X M L S ch em a
M Ž tad escrip tio n
X M L
H iŽ rarch iq u e
X Lin k
X P o in ter
X P ath
H yp ertex tu elle
D escrip tio n
X S LT
X S L
Tran sfo rm atio nP rŽ sen tatio n
S A X
D O M
P ro gram m atio n(A P I)
S gm lQ L
X M L-Q L
In terro gatio n
X M L
184Cours BD/WEB - INT Evry
Qu'est XML?
Extensible Markup Language une syntaxe pour des documents un méta-langage de balisage une façon de représenter de
l'information n'est pas réservé aux pages Web
185Cours BD/WEB - INT Evry
XML est un méta-langage
Permet de se définir ses propres "tags" les "tags" peuvent être définis dans une
grammaire associée au document (DTD et bientôt schémas)
permet de définir des langages de balises spécialisés (MathML, MusicML, XHTML, ...)
186Cours BD/WEB - INT Evry
XML ne décrit pas la présentation
Un document XML est un arbre les noeuds de l'arbre sont des éléments
qui peuvent être qualifiés par des attributs
la présentation est définie à l'extérieur du document, soit via CSS, soit via XSL
187Cours BD/WEB - INT Evry
Pourquoi utiliser XML
Langages de balisages spécialisés données auto-descriptives échange de données entre applications publication de documents
188Cours BD/WEB - INT Evry
Un exemple de document
Itinéraires skieurs dans la Vallée de la Clarée
– par Jean-Gabriel Ravary
Le Polygraphe, éditeur
1991
Vallon des Muandes
Vallon situé à l’est du refuge des Drayères.
Le vallon le plus utilisé pour la traversée sur la Vallée Etroite. Ce vallon est également accessible du refuge Laval.
Col de Névache (2 794 m) ** n° 1S’élever au-dessus du refuge des Drayères en direction est. Suivre la rive droite du torrent de Brune puis s’engager sur le flanc droit du ravin des Muandes que l’on quitte vers 2500 m pour rejoindre le col situé au nord. Descente possible sur Valmeinier. Départ assez raide.
Pointe de Névache (2 892 m) *** n° 2Du col de Névache (itinéraire n° 1), suivre la ligne de crête qui mène à la pointe de Névache. Attention : corniches possibles. Crampons utiles au printemps.
189Cours BD/WEB - INT Evry
Le guide “Itinéraires skieurs” en XML (1)
<?xml version="1.0" encoding="ISO-8859-1" ?>
<guide>
<titre>Itinéraires skieurs dans la vallée de la Clarée</titre>
<auteur>Jean-Gabriel Ravary</auteur>
<editeur>Le Polygraphe</editeur>
<annee>1991</annee>
<vallon>
<nom>Vallon des Muandes</nom>
<intro>
<para>Vallon situé à l’est du refuge des Drayères.</para>
<para>Le vallon le plus utilisé pour la traversée sur la Vallée Etroite. Ce vallon est également accessible du refuge Laval.</para>
</intro>
... Itinéraires ...
</vallon>
</guide>
190Cours BD/WEB - INT Evry
Le guide “Itinéraires skieurs” en XML (2)
<itineraire id="I15.1">
<nom>Col de Névache</nom><alt>2794</alt><cotation>**</cotation>
<num>1</num>
<para>S’élever au-dessus du refuge des Drayères en direction est. Suivre la rive droite du torrent de Brune puis s’engager sur le flanc droit du ravin des Muandes que l’on quitte vers 2500 m pour rejoindre le col situé au nord. Descente possible sur Valmeinier. <note type="prudence">Départ assez raide.</note></para>
</itineraire>
<itineraire id="I15.2">
<nom>Pointe de Névache</nom><alt>2892</alt><cotation>***</cotation>
<num>2</num>
<para>Du col de Névache <renvoi cible="I15.1"/>, suivre la ligne de crête qui mène à la pointe de Névache. <note type="prudence">Attention : corniches possibles.</note> <note type="materiel">Crampons utiles au printemps.</note></para>
</itineraire>
191Cours BD/WEB - INT Evry
DTD “Itinéraires Skieurs”<?xml version="1.0" ?><!ELEMENT guide (titre, auteur+, editeur, annee, vallon+)><!ELEMENT titre (#PCDATA)><!ELEMENT auteur (#PCDATA)><!ELEMENT editeur (#PCDATA)><!ELEMENT annee (#PCDATA)><!ELEMENT vallon (nom, intro, itineraire+)><!ELEMENT nom (#PCDATA)><!ELEMENT intro (para+)><!ELEMENT para (#PCDATA | renvoi | note)*><!ELEMENT renvoi EMPTY><!ATTLIST renvoi cible IDREF #REQUIRED><!ELEMENT note (#PCDATA)><!ATTLIST note type (prudence | materiel) "prudence"><!ELEMENT itineraire (nom, alt, cotation, num, para+)><!ATTLIST itineraire id ID #REQUIRED><!ELEMENT alt (#PCDATA)><!ELEMENT cotation (#PCDATA)><!ELEMENT num (#PCDATA)>
192Cours BD/WEB - INT Evry
Présentation via XSL<?xml version="1.0"?><xsl:stylesheet xmlns:xsl="http://www.w3.org/TR/WD-xsl"> <xsl:template match="/"> <html> <head><title>Le guide de la clarée</title></head> <body> <xsl:value-of select="."/> </body> </html> </xsl:template>
</xsl:stylesheet>
193Cours BD/WEB - INT Evry
Documents bien-formés et valides
Un document est bien-formé si son balisage est correct
un document est valide s'il est bien formé et qu'il est conforme à sa DTD
194Cours BD/WEB - INT Evry
Programmer avec XML
Java le plus abouti C, Perl, Python etc. aussi support Unicode est le plus compliqué SAX, Simple Api for Xml (dirigé par les
événements) DOM, the Document Object Model
(permet de manipuler l'arbre)
195Cours BD/WEB - INT Evry
XML et Web
XML offre une séparation claire entre structure logique (contenu) et présentation
permet de proposer des chaines de production de documents sous différentes présentations à partir du même contenu (HTML vs PDF, WML vs HTML,...)
196Cours BD/WEB - INT Evry
Environnements de publication XML
Environnement logiciel permettant de servir différentes présentations de documents XML
Cocoon de XML-Apache, Qweelt de Univ. Penn.
Souvent basé sur des implantations Java (Servlet, JSP)
197Cours BD/WEB - INT Evry
Cocoon
Clientnavigateur
Web ou portable
Doc.XML
Interprète XSLT
Interprète FOPDoc. PDF
Interprète XSPDoc. HTML
Doc. WML
Cocoon
1 2
3a
4
4
56
3b
XMLQLApache
+ Tomcat
198Cours BD/WEB - INT Evry
XSP
Xml Server Pages généralisation des JSP pour XML permet de générer dynamiquement un
document XML (au moins en partie) avant qu ’il soit transformé
document XSP est un document XML (bien formé)
199Cours BD/WEB - INT Evry
Conclusion
de nombreux produits et diverses techniques choix dépend du type de site visé :
» web de consultation : passerelles simples ou langages de script serveur PHP, ASP
» webs multiples à partir d ’une même source : XML
» portail d ’entreprise : JSP ou Cocoon