Stéphane Frénot1INT - 4 Internet/Intranet Les architectures.
-
Upload
adnet-durand -
Category
Documents
-
view
108 -
download
4
Transcript of Stéphane Frénot1INT - 4 Internet/Intranet Les architectures.
Stéphane FrénotINT - 4 1
Internet/Intranet
Les architectures
Stéphane FrénotINT - 4 2
Les techniques de développement de SIW
•Développement spécifique propriétaire
CGI, SSI, Cookies
•Conserver l'architecture classique en y insérant un système propriétaire
SapphireWeb, ColdFusion, WebObjects
•Adapter le serveur HTTP
ISAPI(ASP), NSAPI (LiveWire), Modules Apache, PSP, JSP
•Adapter le serveur de données
Oracle Web Server
Stéphane FrénotINT - 4 3
Les approches standards
• Langages– CGI (Scripts indépendant exécutés par la machine serveur)
– SSI (Scripts exécutés par le serveur Web)– JavaScripts (Scripts exécutés par le client)
• Protocole http– Cookies (Identifiants échangés entre client et serveur)– Relocation (Renvoie le client sur une autre page)
• Push– Pages Web à l’initiatives du serveur ou– Demandées automatiquement par le client
Stéphane FrénotINT - 4 4
CGI
Poste client Client Web
Serveur Web
.cgi
Stéphane FrénotINT - 4 5
Approche Simple : Exemple
set heading off
select 'Liste des laboratoires' from dual
/
set heading on
select * from laboratoires
/
exit
#!/usr/bin/kshecho Content-Type: text/htmlechoexport ORACLE_HOME=/oracleexport ORACLE_SID=INSAecho "<PRE>"/oracle/bin/sqlplus -s bcb/bcb @/home/demo/bidon.sqlecho "</PRE>"
Stéphane FrénotINT - 4 6
Approche Simple Langage
• Accès aux bases de données et Interrogation
• Analyse des résultats
• Présentation sous une forme compatible HTML
• Approche par les scripts / langages Compilés
Stéphane FrénotINT - 4 7
Exemple Simple PERL
#!/usr/local/bin/perl # ****************** Accès à la Baseuse DBI;$stat_size_indice = 7;$longueur_nom_medicament = 9;$MaxRecherche=20;my($drh) = DBI->install_driver('Oracle') || die "Can't install driver\n";$dbh = $drh->connect('INSA', 'wwwapp', 'alix0') || die "Can't connect\n";my $cursor = $dbh->prepare(<<"REQUETE" select tmed_cip, tmed_libelle, tgal_pluriel from t_medicament, t_forme_galenique where (rownum <= $MaxRecherche and t_medicament.tgal_id=t_forme_galenique.tgal_id)
order by tmed_libelleREQUETE ) || die "Can't prepare\n";$cursor->execute() || die "Can't execute\n";
Stéphane FrénotINT - 4 8
Exemple suite#Formatage de la réponse
print "Content-type: text/html\n\n" ;
print "<HTML><BODY><TABLE BORDER=1 CELLSPACING=1 CELLPADDING=0><TR>";
$nb_medicaments_dans_ligne = 0;
while ( ($cip_medicament, $nom_medicament, $forme_galenique) = $cursor->fetchrow()) {
$nom_medicament = substr( $nom_medicament, 0, $longueur_nom_medicament);
if (($nb_medicaments_dans_ligne)++ == 5) {
print "</TR><TR>";
$nb_medicaments_dans_ligne = 1;
}
print "<TD>";
chop ($forme_galenique);
$nom_medicament_avec_plus = $nom_medicament;
$nom_medicament_avec_plus =~ s/ /\+/g;
print "<A HREF=\"descmedic.cgi?$nom_medicament_avec_plus=$cip_medicament\"</A>";
print "$nom_medicament\n";
print "</TD>"; }
print "</TR></TABLE></HTML>";
Stéphane FrénotINT - 4 9
Javascript
• Interprété sur le client : JavaScript (Netscape) / Jscript (Microsoft)
• Langage événementiel ?
• Arbre de composants documentaires• Fonction d'accès et de manipulation des composants de l'arbre
• Utilisation : ?• http://Stars.com/Authoring/JavaScript• http://netscape.developper.com/
Stéphane FrénotINT - 4 10
JavaScript Exemples<!--function check(p) { j=0; while (j<p.length) { p.elements[j].checked = true; if (p.elements[j].onclick)
p.elements[j].onclick(); j++; } }
function show(o) { var s = ""; for (i in o) s+=i+"="+o[i]+" "+"\n"; w=window.open( 'about:blank' ); w.document.open( "text/plain" ); w.document.writeln( s ); w.document.close(); }-->
<HTML> <HEAD>
< SCRIPT SRC="jsinfo.js"></SCRIPT>
</HEAD>
<BODY>
<FORM NAME=un>
<INPUT TYPE=CHECKBOX NAME=chk1 onclick='alert("hello")'>
<INPUT TYPE=CHECKBOX NAME=chk2>
<INPUT TYPE=CHECKBOX NAME=chk2>
</FORM>
<A HREF=# onClick='javascript:show(un)'>a</A><A HREF=# OnClick='javascript:show(un.elements[1])'>1</A>
<A HREF=# onClick='javascript:show(un.elements[0])'>0</A>
<A HREF=# onClick='javascript:check(un)'>activer</A>
<IMG NAME=MonImage BORDER=0 SRC="image1.gif"
onMouseOver='MonImage.src="image2.gif"
onMouseOut='MonImage.src="image1.gif">
</BODY></HTML>
Stéphane FrénotINT - 4 11
HTTP Cookies
• Informations définies par le serveur et stockées sur le client
• Exemple – Set-Cookie: IdSession=123123; path=/annuaire– Set-Cookie: IdUser=steph; path=/
=> GET /annuaire./toutlemonde.html
Cookie: IdSession=123123; IdUser=steph
• Utilisation : ?
Stéphane FrénotINT - 4 12
Client Pull / Serveur PushLe serveur programme le client pour aller chercher l'information
print ("Content-type: multipart/x-mixed-replace; boundary=FICHIER_SUIVANT\n");
print ("\n--FICHIER_SUIVANT\n");
print ("Cha Marche");
sleep(3);
print ("\n--FICHIER_SUIVANT\n");
print ("Cha Marche");
<html><head><meta http-equiv="Refresh" content="5;
url="http://www.insa-lyon.fr/">
<title>kkdssdkjskjds</title></head>
<body>Ca va partir ! </body></html>
Utilisation ?
Stéphane FrénotINT - 4 13
HTTP : location
• En-tête http – location: http://www.insa-lyon.fr
• Demande au client d’aller rechercher la ressource ailleurs
• Exemple– #!/bin/sh– echo « location: http://serveur2/ »– exec « /bin/serveur2 »
• Utilisations ?
Stéphane FrénotINT - 4 14
Architecture globale
Poste c lient
M achine ServeurC lient W eb
Serveur W eb
.shtm l
.cgi
JavaScript
C ookies
C lient Pull
ServerPush
location
Stéphane FrénotINT - 4 15
Architecture Web
Logiciel
passerelle
Client
Connexion
spécifique
Serveur
WebCGI
HTTP/html
Connexion
virtuelle
1er tronçon
2nd tronçon
Processus d’utilisation
Stéphane FrénotINT - 4 16
Server Side Include Schéma
Poste client
Machine ServeurClient Web
Serveur Web
1 Le client émet une requête httphttp://www.insa-lyon.fr/recherche.cgi
6 Le client affiche ledocument et interagitavec l'utilisateur
4 Le fichier estréanalysé par leserveur
2 Le serveur contrôleles droits d'accès
.shtml
3 Le serveurrecherche le fichier
shtml
5 le fichier htmlest renvoyé auclient
Stéphane FrénotINT - 4 17
SSI• Server Side Include (.shtml)
– Tag interprété par le serveur : – <!- #commande paramètre(s)="argument"->
– Commandes : – <!- #echo var="SERVER_NAME" ->
– <!- #include file="truc.html" ->(virtual)
– <!- #exec cmd="/bin/ps" -> (cgi)
– Extensions :– php3 : http://www.php3.net
– Microsoft : ASP …
– Utilisation : ?
Stéphane FrénotINT - 4 18
Php exemple... if ($userLogin) { /* If user has provided a login */
$row=$db->getAuth($userLogin, $userMachine, $userTel, $userBur, $userNom, $userPrenom);
if ($row){?>
<b><center>Est-ce bien votre connexion ?</b></center><BR>
Login : <?echo $row["userLogin"]?><br>
<hr>
Nom : <?echo $row["userNom"]?><br>
Prénom : <?echo $row["userPrenom"]?><br>
Mail : <?echo $row["userAdress"]?><br>
Téléphone : <?echo $row["userTel"]?><br>
Bureau : <?echo $row["userBur"]?><br>
<FORM ACTION="access.php3" METHOD=POST>
<INPUT TYPE=hidden name=userLogin value="<?echo $row["userLogin"]?>">
<INPUT TYPE=hidden name=userMachine value="<?echo $row["userMachine"]?>">
<INPUT TYPE=hidden name=userAdress value="<?echo $row["userAdress"]?>">
<INPUT TYPE=hidden name=userTel value="<?echo $row["userTel"]?>">
<INPUT TYPE=hidden name=userBur value="<?echo $row["userBur"]?>">
<input type=hidden name=userNom value="<?echo $row["userNom"]?>">...
Stéphane FrénotINT - 4 19
Approches propriétaires
• Conserver l'architecture classique en y insérant un système propriétaire
– SapphireWeb, ColdFusion, WebObjects
• Adapter le serveur HTTP
– ISAPI(ASP), NSAPI (LiveWire), Modules Apache
• Adapter le serveur de données
– Oracle Web Server, MIIS
Stéphane FrénotINT - 4 20
Cold Fusion
Requête
ODBCServer WebHTML, HTTP
Résultats
ServerApplicatif Cold
Fusion
SQL
HTML, CFML
HTML,ISAPI,NSAPI,
CGI
<HTML>
<CFQUERY NAME="Resultats" DATASOURCE="INSA">
SELECT NOM_LABORATOIRE from laboratoires
</CFQUERY>
<CFTABLE QUERY="Resultats">
<CFCOLS WIDTH="30" TEXT="<LI> #NOM_LABORATOIRE">
</CFTABLE>
Stéphane FrénotINT - 4 21
Sapphire Web
Requête
Server WebHTMLHTTP Extension
Serveur Web
TemplateHTML
ISAPI,NSAPI
Executables
Gestionnairede serverapplicatif
Sapphire/WebCGIs
Stéphane FrénotINT - 4 22
Web Objects (Next)
Requête
Server WebHTMLHTTP Web Object
Adapteur
TemplateHTML
ISAPI,NSAPI
WebObjectsApplication
Executables
Fichiers dedéclaration
WebScript File
Stéphane FrénotINT - 4 23
Netscape LiveWire
RequêteODBC
Nescape Enterprise Serveur
HTML, HTTP
Résultats
LiveWireManager
SQL
HTML,JavaScript
<HTLM><BODY><SERVER>
if (database.connected()) {
database.beginTransaction();
qs="SELECT NOM_LABORATOIRE from laboratoires";
results=database.cursor(qs);
while(result.next())
{
write("<LI>results.NOM_LABORATOIRE")>
}
results.close();
database.commitTransaction();
}</SERVER></HTML>
Stéphane FrénotINT - 4 24
Approche Oracle
• Oracle Web Server (=>OWApplicationS V3)• Serveur Standard : Web Listener• CGI 'like' : Web Request Broker (WRB)• Toolkit : Ensemble de procédures cataloguées
– HTP : HyperText Procedures– HTF : HyperText Functions
• htp.print(htf.italic('coucou'));
– OWA_UTIL : utilitaires• owa_util.tableprint
– OWA : procédures internes3
Stéphane FrénotINT - 4 25
Architecture OWS
Poste client Client Web
Web Listenerweb
Dispatcher
Procéduresstockées
WRB API
cartouchePL/SQL
cartoucheJava
WRBX WRBX WRBX
Stéphane FrénotINT - 4 26
OWS Exemple 1
create or replace
procedure afftab(nom_table in varchar2)
is
x boolean;
begin
x:=owa_util.tableprint(nom_table, 'BORDER');
end;
/
<html><body><form METHOD="POST"
ACTION="http://lisiaix0/owa/afftab>Nom de la table <INPUT NAME="nom_table"
TYPE="TEXT" VALUE=""><INPUT TYPE="SUBMIT"
VALUE="Afficher"></form></body></html>
Stéphane FrénotINT - 4 27
OWS Exemple 2
create or replace procedure listtables iscursor c_tables is
select table_name from user_tables;begin
htp.htmlopen;htp.headopen;htp.htitle('Liste des tables');htp.headclose;htp.bodyclose;for enreg in c_tables loop
htp.print (enreg.table_name);htp.br;
end loophtp.bodyclose;htp.htmlclose;
end;/
Stéphane FrénotINT - 4 28
Approche Microsoft
Apps CGIFiltres, etc...
Poste client Client Web IISISAPI
Procéduresstockées
Internet DataBaseConnector (IDC) Microsoft dbWeb
Pilote ODBC
DLL OLEISAPI
Scripts ServeurActiveX
Microsoft IndexServer
Autresfonctions
"Interface entre Web et bases de données sous Windows NT" A.Homer, Darren Gill, S.JakabEyrolles 1998
Stéphane FrénotINT - 4 29
Approche IDC
Requête
ODBC
Serveur
IDCSQL
ModèleHTX
URL du modèleet varaibles
Réponse
HTML
Résultats
Stéphane FrénotINT - 4 30
Exemple
demo.idc
DataSource: INSA
UserName : wwwapp
Passwor d : ?????
Template : listeLabo.htx
SQLStatement :
+SELECT * from laboratoires
listLabo.htx
<html><body>
<%BeginDetail%>
Le nom du labo est: <%NOM_DU_LABORATOIRE%><BR>
<%EndDetail%>
</body>
Stéphane FrénotINT - 4 31
OLEISAPI
Requête
ODBC
Serveur
OLEISAPI.dll
Réponse
HTML
Résultats
DLL ServeurOLE
SQL
Autresfonctions
Stéphane FrénotINT - 4 32
Exemple
Serveur OLE : toto.dll
Public Sub ReturnBonjour (strValuePairsIn As String, strHTMLResponse As String)
strHTMLResponse ="Content-Type: text/html" & vbCrLF & "Bonjour";
End Sub
Public Sub main()
End Sub
http://serveurNT/utilisat/OLEISAPI.dll/toto.ReturnBonjour
Stéphane FrénotINT - 4 33
Quelle approche choisir ?
Maintenabilité
Coût
Efficacité
Simplicité Modularité Portabilité ExtensibilitéHaute
Performance
Stéphane FrénotINT - 4 34
Architectures Web
• Web de consultation– Documentation
– Piloté par l’utilisateur
– Internet
• Web Applicatif– Applications
– Piloté par l’application serveur
– Intranet
Stéphane FrénotINT - 4 35
Programmation
• Langages :– Compilés : C, C++ ...
– Interprétés : Javascript, Perl, TCL, Python ...
• API et Serveurs Spécialisé– NS_API, MS_ API, LiveWire, HyperWave
• Langages de balises– ColdFusion, WebObject
– PHP/FI
• Outils– Sapphire Web
– LiveWire
Stéphane FrénotINT - 4 36
Serveur
CGI
shtml
Serveur API
Servlets
• Clients
– Plug-ins
– Scripts Documentaires
– Applets
Exécution de code
Stéphane FrénotINT - 4 37
Sur le client• Langages standards : Java, Python, Tcl
• Langages spécifiques : Javascript, Vbscript, DHML
• Gestion des interaction avec utilisateurs
– + Réduire les échanges sur le réseau (information, contrôle, cache, action sur les
éléments du document)
– - Code interprété / Machine Virtuelle
– - Vitesse du client
• ==> Compatibilité/Portage – Write Once, Run Everywhere
Stéphane FrénotINT - 4 38
Sur le serveur
• Langages standards : C, C++, Java, Tcl, Python, Perl
• Langages spécifiques : LiveWire, WebObject, Cold Fusion
• Gestion des interactions :
– Applications complètes
– Traitement de chaînes
– Accès au réseau
– Flux de données
• ! gestion des sessions
Stéphane FrénotINT - 4 39
Données
Application
Moniteur transactionel SGBD
Processus d'interaction
utilisateur
Processus d'utilisation
Processus de traitement Processus de Données
Serveur d'affichage
Client d'affichage
Client de traitement
Serveur de traitement
Serveur de données
Client de données
1er Tier 2nd Tier 3ème Tier
Poste client
GUI
Architectures 3 tiers
Stéphane FrénotINT - 4 40
Serveur Transactionnel
Stéphane FrénotINT - 4 41
Transactions sur le Web