III. L environnement Web



Documents pareils
L3 informatique TP n o 2 : Les applications réseau

HTTP 1.1. HyperText Transfer Protocol TCP IP ...

Serveurs de noms Protocoles HTTP et FTP

Module BD et sites WEB

Gilles.Roussel univ-mlv.fr HTTP/1.1 RFC 2068

Architectures web/bases de données

Web Tier : déploiement de servlets

Application Web et J2EE

INTERNET est un RESEAU D ORDINATEURS RELIES ENTRE EUX A L ECHELLE PLANETAIRE. Internet : interconnexion de réseaux (anglais : net = réseau)

Le développement d applications Web

HTTP HTTP. IUT1 dpt SRC L Isle d Abeau Jean-françois Berdjugin. Introduction et architecture Messages Authentification Conclusion

(structure des entêtes)

1 Introduction Propos du document Introduction De HTTP 1.0 à HTTP

INTRODUCTION A JAVA. Fichier en langage machine Exécutable

JavaServer Pages (JSP)

Installation d un serveur HTTP (Hypertext Transfer Protocol) sous Débian 6

TP JEE Développement Web en Java. Dans ce TP nous commencerons la programmation JEE par le premier niveau d une application JEE : l application web.

Failles XSS : Principes, Catégories Démonstrations, Contre mesures

Introduction à HTTP. Chapitre HTTP 0.9

Internet. DNS World Wide Web. Divers. Mécanismes de base Exécution d'applications sur le web. Proxy, fire-wall

Développement des Systèmes d Information

Dans l'épisode précédent

Le serveur HTTPd WASD. Jean-François Piéronne

Bases de données et Interfaçage Web

Cours Master Recherche RI 7 Extraction et Intégration d'information du Web «Services Web»

Avant-propos 1. Avant-propos Organisation du guide À qui s'adresse ce guide?...4

Programmation Internet Cours 4

Les services usuels de l Internet

HTTP. Technologies du Web. Programmation Web côté serveur. Mastère spécialisé Management et nouvelles technologies, 16 novembre 2009

18 TCP Les protocoles de domaines d applications

Applications et Services WEB: Architecture REST

WebSSO, synchronisation et contrôle des accès via LDAP

NFA016 : Introduction. Pour naviguer sur le Web, il faut : Naviguer: dialoguer avec un serveur web

FORMATION PcVue. Mise en œuvre de WEBVUE. Journées de formation au logiciel de supervision PcVue 8.1. Lieu : Lycée Pablo Neruda Saint Martin d hères

CGI et SSI. La programmation CGI. Sources. Objectifs. Qu'est ce qu'un programme CGI? CGI

Serveur d'application Client HTML/JS. Apache Thrift Bootcamp

Introduction aux «Services Web»

Architecture Orientée Service, JSON et API REST

Mise en œuvre des serveurs d application

Extension SSO Java. Cette note technique décrit la configuration et la mise en œuvre du filtre de custom SSO Java.

Le protocole HTTP. 10 minutes pour comprendre. HTTP/0.9 - Lacunes et limitations HTTP/1.0 HTTP/1.1

Les architectures 3-tiers Partie I : les applications WEB

Protection des protocoles

Institut Supérieure Aux Etudes Technologiques De Nabeul. Département Informatique

Les sites Internet dynamiques. contact : Patrick VINCENT pvincent@erasme.org

Hébergement de site web Damien Nouvel

Développement d applications Internet et réseaux avec LabVIEW. Alexandre STANURSKI National Instruments France

Programmation Web. Introduction

Manuel d'installation

Stockage du fichier dans une table mysql:

Activité sur Meteor. Annexe 1 : notion de client-serveur et notion de base de données

Mac OS X Server Administration des technologies Web. Pour la version 10.3 ou ultérieure

WebDAV en 2 minutes. Tous ces objectifs sont complémentaires et ils sont atteints grâce au seul protocole WebDAV. Scénarii

Java c est quoi? Java. Java. Java : Principe de fonctionnement 31/01/ Vue générale 2 - Mon premier programme 3 - Types de Programme Java

Glossaire. ( themanualpage.org) soumises à la licence GNU FDL.

RFC 7230 : Hypertext Transfer Protocol (HTTP/1.1): Message Syntax and Routing

Types MIME (2) Typage des ressources Internet. Les URI. Syntaxe dans les URI. Possibilité de spécifier un paramètre du sous-type

FileMaker Server 11. Publication Web personnalisée avec XML et XSLT

Remote Method Invocation (RMI)

Module http MMS AllMySMS.com Manuel d intégration

Documentation CAS à destination des éditeurs

Java et les bases de données: JDBC: Java DataBase Connectivity SQLJ: Embedded SQL in Java. Michel Bonjour

INF8007 Langages de script

Protocoles Applicatifs

Classe ClInfoCGI. Fonctions membres principales. Gestion des erreurs

Présentation Internet

Application web de gestion de comptes en banques

SERVEUR HTTP Administration d apache

Hébergement de sites Web

Aspects techniques : guide d interfaçage SSO

TP réseaux 4 : Installation et configuration d'un serveur Web Apache

Réseaux. 1 Généralités. E. Jeandel

RMI le langage Java XII-1 JMF

Développement Web. Les protocoles

Expérience d un hébergeur public dans la sécurisation des sites Web, CCK. Hinda Feriani Ghariani Samedi 2 avril 2005 Hammamet

A DESTINATION DES SERVICES TIERS. Editeurs d applications et ressources pédagogiques connectées à l ENT

Hébergement WeboCube. Un système performant et sécurisé. Hébergement géré par une équipe de techniciens

Programmation Web. Madalina Croitoru IUT Montpellier

SIO Page 1 de 5. Applications Web dynamiques. Prof. : Dzenan Ridjanovic Assistant : Vincent Dussault

«Cachez-moi cette page!»

Environnements de Développement

Utilisation de Jakarta Tomcat

Pour plus de détails concernant le protocole TCP conférez vous à la présentation des protocoles Internet enseignée pendant.

Couche application 1

Utilisation de JAVA coté Application serveur couplé avec Oracle Forms Hafed Benteftifa Novembre 2008

Serveurs et environnements de développement. Serveur Web

SIP. Plan. Introduction Architecture SIP Messages SIP Exemples d établissement de session Enregistrement

Autour du web. Une introduction technique Première partie : HTML. Georges-André SILBER Centre de recherche en informatique MINES ParisTech

10. Base de données et Web. OlivierCuré

Sécurité des sites Web Pas un cours un recueil du net. INF340 Jean-François Berdjugin

TP Composants Java ME - Java EE. Le serveur GereCompteBancaireServlet

Architectures Web Services RESTful

Java et les bases de données

Qu est ce qu Internet. Qu est-ce qu un réseau? Internet : à quoi ça sert? présentation des services. Exemple de configuration. Rôles des éléments

Petite définition : Présentation :

Technologies du Web. Créer et héberger un site Web. Pierre Senellart. Page 1 / 26 Licence de droits d usage

Théorie : internet, comment ça marche?

Méta-annuaire LDAP-NIS-Active Directory

INITIATION AU LANGAGE JAVA

Transcription:

III. L environnement Web Miage FC/A 2008 1

Au sommaire 1. Introduction 2. URL 3. HTTP 4. CGI 5. Servlets Miage FC/A 2008 2

1. Introduction WWW : World Wide Web 1989 - Tim Berners-Lee Mise en ligne de documentation (scientifique) Les concepts : Hypertexte : HTML Client/serveur : HTTP schéma de désignation : URL Miage FC/A 2008 3

1. Introduction Hypertexte Texte classique organisation linéaire avec index, sommaire, glossaire, notes, Hypertexte organisation non linéaire (hiérarchique, graphe, ) texte enrichi de liens renvoi vers un document renvoi vers une partie d un document Miage FC/A 2008 4

1. Introduction Client/Serveur Client : le navigateur (Internet Explorer, Netscape), Serveur : le serveur Web (Apache, Microsoft IIS) Le protocole : HTTP Le client émet la requête Le serveur répond en fournissant le document demandé ou un message d erreur Miage FC/A 2008 5

1. Introduction Schéma de désignation Uniform Resource Locator (URL) : désigne une page Web Chaque page a un nom unique => pas d ambiguïté possible protocole://serveur/page http://www.lifl.fr/index.html Organisation hiérarchique des pages protocole://serveur/repertoire/page?requête Miage FC/A 2008 6

1. Introduction Standards HTTP 0.9 : version de base avec requête/réponse 1.0 : version standardisée IETF (RFC 1945) 1.1 : version étendue (connexions persistantes) (RFC 2068) HTML 1.0 version initiale 2.0 version standardisée W3C 3.0 version étendue (tableaux, images cliquables, applets) 4.0 version étendue (frames, feuilles de styles) XML 1.0 URL format stable depuis 1989 Miage FC/A 2008 7

1. Introduction Bibliographie très nombreuse recherche sur moteur amazon.com : sur HTML 96 livres en français, 228 en anglais Sélection Webmaster in a Nutshell, S. Spainhour, R. Eckstein, 2eme édition, O Reilly couvre HTML, CCS, XML, XSL, JavaScript, CGI, PHP, HTTP, Apache Programmation Java côté serveur, A. Patzer, Eyrolles, Couvre Servlets, JSP, EJB. Miage FC/A 2008 8

2. URL URL dans sa forme générale : protocole"://"[utilisateur[":"motdepasse]@](nom adresse) [:port]["/"chemin]["/"nomdefichier][#ancrelocale][?options] Le format complet dans les RFC 1738 et 1808 http://www.w3.org/addressing/ Exemple : http://www.imag.fr/equipe/sirac/projet.html ftp://user:foo@research.digital.com/personal/latex.sty http://123.87.54.251/index.html http://www.altavista.com/query.html?lille+dess http://xenon.inria.fr:8080/hello.html http://alken.lifl.fr/index.html#annuaire Miage FC/A 2008 9

3. Le protocole HTTP http: hypertext transfer protocol Modèle client/serveur client: navigateur qui demande, reçoit et affiche des objets Web serveur: envoie des objets web en réponse aux requêtes http1.0: RFC 1945 http1.1: RFC 2068 PC avec Explorer Mac avec Navigator http request http response http request http response Server avec NCSA Web server 10

Le protocole HTTP http: service de transport Le client initie la connexion TCP (création d une socket) vers le serveur sur le port 80 Le serveur accepte le connexion TCP venant du cleint Des messages http sont échangés entre navigateur (client http) et serveur Web (serveur http) La connexion TCP est fermée http est sans état Le serveur ne maintient aucune information sur les requêtes précédentes du client Les protocoles qui gèrent un état sont complexes! L histoire passée (état) doit être maintenue Si le client/serveur tombe, leurs vues de l état peuvent être incohérentes, et doivent donc être réconciliées 11

time Exemple HTTP Supposons un utilisateur qui entre l URL www.uneuniversite.edu/undepartement/home.index 1a. Le client http initie la connexion TCP vers le serveur http (processus) sur le port 80 de www.uneuniversite.edu 2. Le client http envoie une requête http (contenant l URL) sur la socket de connexion TCP 12 (contient texte &, references à 10 Images jpeg) 1b. Le serveur http sur l hôte www.someschool.edu attend des connexions sur le port 80 de TCP. Il accepte la connexion, et notifie le client 3. Le serveur http reçoit la requête, construit un message de réponse contenant l objet demandé (UneUniversité/home.index), envoie le message sur la socket

Exemple HTTP (cont.) temps 5. -Le client http reçoit le message de réponse contenant le fichier html. - Il analyse (parse) le fichier html reçu, affiche le html. En parsant le fichier html, il trouve 10 objets jpeg référencés 4. Le serveur htto ferme la connexion TCP. 6. Les étapes 1-5 sont répétées pour chacun des dix objets jpeg 13

Connexions Non-persistantes, persistantes Non-persistante http/1.0: le serveur traite la requête, répond et ferme la connexion TCP 2 échanges pour retrouver un objet Une connexion TCP Une requête/un transfert d objet Chaque transfert souffre du ralentissement dû à l ouverture de connexion TCP Beaucoup de navigateurs ouvrent de multiples connexions en parallèle Persistante Par defaut pou http/1.1 Sur la même connexion TCP le serveur traite la requête, répond, traite de nouvelles requêtes, Le client envoie les requêtes pour tous les objets référencés aussi vite que possible dès qu il reçoit le code HTML de base Moins de connexions, moins lent à démarrer 14

Format de message HTTP : requête deux types de messages http : requête, réponse requête http : ASCII (format lisible par l humain) Ligne de requête (commandes GET, POST, HEAD) Lignes d entêtes Retour chariot, line feed indique la fin de message GET /somedir/page.html HTTP/1.0 User-agent: Mozilla/4.0 Accept: text/html, image/gif,image/jpeg Accept-language:fr (extra carriage return, line feed) 15

Requête HTTP : format général 16

Format message HTTP : réponse Ligne état (code état protocole Phrase état) Lignes Entête données, e.g., Fichier html demandé HTTP/1.0 200 OK Date: Thu, 06 Aug 1998 12:00:15 GMT Server: Apache/1.3.0 (Unix) Last-Modified: Mon, 22 Jun 1998... Content-Length: 6821 Content-Type: text/html data data data data data... 17

Code d état des réponses HTTP La première ligne dans le message de réponse serveur-> client Quelques exemples de code : 200 OK Requête traitée avec succès, L objet suit dans le message 301 Moved Permanently L objet demandé a bougé, la nouvelle localisation est donnée à plus loin dans le message (Location 400 Bad Request La requête n est pas comprise par le serveur 404 Not Found Le document demandé n est pas sur ce serveur 505 HTTP Version Not Supported 18

Contenu des requêtes Version simple : méthode ressource version_du_protocole Exemple : GET /hypertext/theproject.html HTTP/1.0 Types de méthodes pour HTTP/1.0 GET demande d'un document HEAD demande seulement l'en-tête d'un document POST envoi des informations au serveur GET : requête fondamentale HEAD permet de connaître la date de modification d'un document, la taille d'un document, le type du document, le type du serveur POST sert pour l'interrogation de programmes, services réseaux comme l'envoi de messages dans les forums de discussion, l'annotation de documents sur le serveur, l'interrogation de base de données 19

Essayez HTTP (côté client) 1. Telnet avec votre serveur favori : telnet www.lifl.fr 80 Ouvre une connexion sur le port TCP 80 de www.lifl.fr. 2. Envoyez une requête http GET: GET /~duchien/index.html HTTP/1.0 Avec deux retour chariot, vous envoyez une requête GET minimale vers le serveur 3. Regardez le message de réponse envoyé par le serveur http 20

Interaction utilisateur-serveur : authentification Authentification : contrôle d accès au contenu du serveur Les crédits d autorisation : noms, mots de passe Sans état: le client doit présenter son autorisation à chaque requête autorisation: lignes d entête dans chaque requête Si non autorisation: le serveur refuse l accès, et envoie WWW authenticate: Ligne d entête dans la réponse client requête http classique 401: authorization req. WWW authenticate: Msg requête http msg + Authorization: <cred> réponse http classique Msg requête http msg + Authorization: <cred> réponse http classique serveur temps 21

Cookies : garder un état # généré par le serveur, # à rappeller au serveur, utilisé plus tard pour: authentification Se souvenir des préférences utilisateurs, de ses choix Le serveur envoie le cookie au client dans la réponse Set-cookie: 1678453 Le client présente le cookie dans ses futures requêtes cookie: 1678453 client http request http réponse + Set-cookie: # http request cookie: # http réponse http request cookie: # http réponse serveur Action cookiespécifique Action cookiespécifique 22

GET conditionnel: un cache côté client Objectif: ne pas envoyer client d objet si le client a une version à jour dans son cache client: donne la date de la copie cachée dans la requête If-modified-since: <date> serveur: la réponse ne contient aucun object si la copie cachée est à jour HTTP/1.0 304 Not Modified 23 http request If-modified-since: <date> http réponse HTTP/1.0 304 Not Modified http request If-modified-since: <date> http réponse HTTP/1.1 200 OK <data> serveur object non modifiée object modifié

Caches Web (serveurs proxy) Objectif: satisfaire la requête du client sans interroger le serveur d origine L utilisateur paramètre son navigateur: accès aue web via le cache web Proxy Le client envoie toutes les server requêtes http vers le cache client web Le cache web retourne l objet sinon le cache web cache demande l objet au serveur d origine, qui retourne l objet au client client http request http response http request http response http request http response Serveur origine Serveur origine 24

Pourquoi gérer des caches dans le Web? Le cache est prêt du client (e.g., sur le même réseau) Le temps de réponse est plus petit: cache prêt du client Fait décroître le trafic vers les serveurs distants Le lien entre le réseau local et le reste du monde est souvent un goulet d étranglement Réseau institutionnel public Internet 1.5 Mbps access link 10 Mbps LAN Serveurs origines Cache intitutionnel 25

4. CGI Multiples systèmes de script : CGI, servlet, ASP, JSP, XSP, Ces systèmes permettent au client de faire exécuter un programme au serveur Common Gateway Interface (CGI) : Protocole entre un serveur Web et des programmes à lancer côté serveur Les programmes peuvent être - interprétés : shells scripts sh, csh, ksh, shells Perl, etc - compilés : programmes C, C++, Ada, etc Exemples d'utilisation traitement des données saisies dans un formulaire génération automatique de pages Web compteur pour afficher le nombre d'accès à la page 26

Fonctionnement CGI Les scripts sont désignés par une URL (comme les documents HTML) Par exemple : http://www.lifl.fr/cgi-bin/anniversaire.pl En fonction du chemin d'accès, le serveur sait si l'url correspond à un script ou à un document Par convention, tous les fichiers dans le répertoire cgibin/ sont des scripts 27

Fonctionnement CGI Etape 1 : client -> serveur 2 méthodes peuvent être employées : GET ou POST GET /cgi-bin/anniversaire.pl?mois=aout&jour=11 HTTP/1.0 Les options à passer au script sont encodées après le? Elles sont facultatives POST /cgi-bin/anniversaire.pl HTTP/1.0 Content-type: application/x-www-form-urlencoded Content-length: 20 mois=aout&jour=11 Rq : dans ce cas (formulaire), c'est le navigateur qui construit cette requête 28

Fonctionnement CGI Etape 2 : serveur -> script Les informations à passer aux scripts CGI par le serveur Web le sont soit par des variables d'environnement soit sur l'entrée standard du script Les principales variables d'environnement CONTENT_TYPE, CONTENT_LENGTH, etc (ce sont les champs de l'en-tête du message) SCRIPT_NAME (ici /cgi-bin/anniversaire.pl) Les options d'appel de script (ici mois=aout&jour=11) sont transmises par la requête d'environnement QUERY_STRING pour la méthode GET sur l'entrée standard du script pour la méthode POST Le script analyse ses variables (et l'entrée standard éventuellement), exécute son traitement et produit un résultat 29

Fonctionnement CGI Etape 3 : script -> serveur La sortie standard du script est un document de la forme en-tête ligne blanche données 3 en-têtes possibles Content-type: (par ex text/html ou image/gif) Location: (par ex http://www.truc.com) : C'est une URL à transmettre au client Status: (par ex 403 Forbidden) : C'est un code (d'erreur) à renvoyer au client Etape 4 : serveur -> client Le document est envoyé au navigateur Web qui l'interprète 30

Exemples Shell script sh #!/bin/sh echo "Content-type: text/html" echo echo "<!DOCTYPE HTML PUBLIC \"-//W3C/DTD HTML 3.2 Final/EN\">" echo "<HTML>" echo "<BODY>" echo "Nous sommes le <B>"`date`"</ B>" echo "</BODY>" echo "</HTML>" Langage C #include <stdio.h> main() { char c; int nb_args; printf( "Content-type: text/html\n"); printf( "\n" ); printf( "<! DOCTYPE HTML PUBLIC \"-//W3C/DTD HTML 3.2 Final/EN\">\n" ); printf( "<HTML>\n" ); printf( "<BODY>\n" ); nb_args = 0; while ((c=getchar())!= EOF) if ( c == '&' ) nb_args++; if ( nb_args!= 0 ) nb_args++; printf( "Il y a %d arguments a votre requete\n", nb_args ); printf( "</BODY>\n" ); printf( "</HTML>\n" ); } 31

5. Servlet Programme Java s'exécutant côté serveur Web servlet prog. "autonome" stockés dans un fichier.class sur le serveur JSP prog. source Java embarqué dans une page.html Servlet et JSP exécutable avec tous les serveurs Web (Apache, IIS,...) auxquels on a ajouté un "moteur" de servlet/ JSP (le plus connu : Tomcat ) JSP compilées automatiquement en servlet par le moteur.class autonome Embarqué dans HTML Côté client Applet JavaScript Côté serveur Servlet JSP 32

5. Servlet Scripts serveur écrit en Java Différent avec les CGI et les LD (NSAPI, ISAPI) - performance sur les passages des paramètres (vs CGI) - sûreté de fonctionnement (NSAPI, ISAPI) Servlets de Base : FileServlet, CGIServlet, Téléchargement et exécution d une Servlet «externe» exécution dans un espace protégé ou non Serveurs Server HTTPD écrits en Java : Sun Java Web Server, W3C Jigsaw mais aussi Netscape, Oreilly, Apache (mod_jserv),... servletrunner (JSDK), Développement - JSDK (servletrunner) - IBM VisualAge (visual servlet) 33

Servlet Principe les fichiers de bytecode (.class ) sont stockés sur le serveur (comme des docs) par convention dans le répertoire servlet/ ils sont désignés par une URL http:// www. lifl. fr/ servlet/ Prog le chargement de l'url provoque l'exécution de la servlet 1 2 Client Serveur Tom Prog. class 4 cat 3 Explorer IIS Netscape Apache Sun JVM Microsoft 34

Mécanismes de base écriture d'une servlet = écriture d'une classe Java - Lors du premier chargement d'une servlet (ou après modification), le moteur instancie la servlet servlet = objet Java présent dans le moteur - puis, ou lors des chargements suivants, le moteur exécute le code dans une thread - le code produit un résultat qui est envoyé au client en cas d'erreur dans le code Java de la servlet, message récupéré dans le navigateur 35

Développement Utilisation des packages Java javax.servlet.* et javax.servlet. http.* extension de la classe javax.servlet.http.httpservlet redéfinition de la méthode service de cette classe définit le code à exécuter lorsque la servlet est invoquée elle est appelée automatiquement par le "moteur«de servlet void service(servletrequest request,servletresponse response ); représente la requête envoyée par le client renseigné automatiquement par le "moteur" 36 représente la réponse retournée par la servlet à renseigner dans le code de la servlet

Mode d invocation Direct (depuis un document ou un browser) http://machine-name:port/servlet/servlet-name http://localhost:8080/servlet/bookdetails?bookid=203 Depuis une autre servlet BookDBServlet database = (BookDBServlet) this.getservletconfig().getservletcontext().getservlet("bookdb"); BookDetails bd = database.getbookdetails(bookid); SSI <SERVLET NAME="Date"> <PARAM NAME="TimeZone"VALUE ="Paris" > </SERVLET> JSP (Java Server Page) 37

Aperçu de l API servlet Méthodes appelables sur un objet request - String getparameter(string param) retourne la valeur du champ param transmis dans les données du formulaire - java.util. Enumeration getparameternames() retourne l'ensemble des noms de paramètres transmis à la servlet - String getmethod() retourne la méthode HTTP (GET ou POST) utilisée pour invoquer la servlet Méthodes appelables sur un objet response - void setcontenttype( String type) définit le type MIME du document retourné par la servlet - PrintWriter getwriter() retourne un flux de sortie permettant à la servlet de produire son résultat la servlet "print " le code HTML sur ce flux de sortie 38

Exemple de servlet imposé imposé par l API servlet ce qui suit est en HTML récupère un flux pour générer le résultat énération du code HTML import javax.servlet.*; import javax.servlet.http.*; import java.io.*; public class HelloServlet extends HttpServlet { public void service(servletrequest request,servletresponse response ) throws ServletException,IOException { response.setcontenttype("text/html"); } PrintWriter out =response.getwriter(); out.println("<html><body>"); out.println("<h1>hello depuis une servlet</h1>"); out.println("</body></html>"); } 39

Exemple de servlet (cont.) Compilation HelloServlet. Class installé dans l'arborescence de Tomcat Chargement via une URL de type http://.../ servlet/ HelloServlet => exécution de HelloServlet. class 40

Exemple 2 de servlet Chaque servlet n'est instanciée qu 1 seule fois persistance de ces données entre 2 invocations public class CompteurServlet extends HttpServlet { int compteur =0; public void service( ServletRequest request, ServletResponse response ) throws ServletException, IOException { response. setcontenttype("text/html"); PrintWriter out =response.getwriter(); out.println("<html><body>"); out.println("<h1>«+ compteur++ +"</h1>"); out.println("</body></html>«); } } 1ère invocation -> 0 2ème invocation ->1 41

Récupération des données dans un formulaire Méthode String getparameter( String) d'un objet request =>retourne le texte saisi =>ou null si le nom de paramètre n'existe pas <HTML> <BODY> <FORM ACTION=«http://..."METHOD=POST> Nom <INPUT NAME="nom"><P> Prénom <INPUT NAME="prenom"><P> <INPUT TYPE=SUBMIT VALUE="Envoi"> <INPUT TYPE=RESET VALUE="Remise à zéro"> </FORM> </BODY> </HTML> 42

Récupération des données dans un formulaire (cont.) public class CompteurServlet extends HttpServlet { public void service(servletrequest request,servletresponse response ) throws ServletException,IOException { response.setcontenttype("text/html"); PrintWriter out =response.getwriter(); String nom =request.getparameter("nom"); String prenom =request.getparameter("prenom"); out.println("<html><body>"); out.println("<h1>exemple de résultat</h1>"); out.println("bonjour "+prenom+""+nom); out.println("</body></html>"); } } 43

Cycle de vie d une servlet void init(servletconfig conf) méthode appelée par le moteur au démarrage de la servlet peut être utilisée pour initialiser la servlet propager l'initialisation par super. init(conf) ne jamais utiliser de constructeur void destroy() lorsque l'on veut détruire la servlet Différenciation des méthodes HTTP service() traite toutes les requêtes HTTP doget(),doput(),dopost(),doput(),dodelete() peuvent être redéfinies pour traiter chaque requête HTTPde façon différenciée 44 GenericServlet init() destroy() HttpServlet service() doget() doput() MyServlet

Chaînage des servlets Servlet 4 Aggrégation des résultats fournis par plusieurs servlets =>meilleure modularité =>meilleure réutilisation servlet Servlet 1 Servlet 2 Servlet 5 Utilisation d'unrequestdispatcher obtenu via un objetrequest RequestDispatcher rd =request.getrequestdispatcher("servlet1«); Inclusion du résultat d'une autre servlet rd.include(request,response); Délégationdu traitement à une autre servlet rd.forward(request,response); Servlet 3 URL 45

Compléments sur l API Méthodes appelables sur un objet request - String getprotocol() retourne le protocole implanté par le serveur (ex.:http/1.1) - String getservername()/string getserverport() retourne le nom/port de la machine serveur - String getremoteaddr()/string getremotehost() retourne l'adresse/nom de la machine cliente (ayant invoqué la servlet) - String getscheme() retourne le protocole utilisé (ex.:http ou https)par le client - java.io.bufferedreader getreader() retourne un flux d'entrée permettant à une servlet chainée de récupérer le résultat produit par la servlet précédente => permet à la servlet chaînée de modifier le résultat 46

Gestion de la concurrence Par défaut les servlets sont exécutées de façon multi-threadée Si une servlet doit être exécutée en exclusion mutuelle (ex.:accès à des ressources partagées critiques) implantation de l'interface marqueur SingleThreadModel public class CompteurServlet extends HttpServlet implements SingleThreadModel { public void service(servletrequest request,servletresponse response ) throws ServletException,IOException { /**Du code en exclusion mutuelle avec lui-même */ } } Autre solution : définir du code synchronized dans la servlet 47

Cookie Permet à un serveur Web de stocker de l'information chez un client moyen pour savoir "par où passe"un client,quand,en venant d'où,... débat éthique?? l'utilisateur a la possibilité d'interdire leur dépôt dans son navigateur définis dans la classe javax.servlet.http.cookie on les crée en donnant un nom (String) et une valeur (String) Cookie unecookie =new Cookie("sonNom","saValeur"); on les positionne via un objet response response.addcookie(unecookie ); on les récupère via un objet request Cookie[]desCookies =request.getcookies(); Quelques méthodes :String getname()/string getvalue() 48

Suivi de session HTTP protocole non connecté pour le serveur,2 requêtes successives d'un même client sont indépendantes Objectif : être capable de "suivre«l'activité du client sur +sieurs pages Notion de session => les requêtes provenant d'un utilisateur sont associées à une même session => les sessions ne sont pas éternelles, elles expirent au bout d'un délai fixé Sur un objet request -HttpSession session =request.getsession(true) retourne la session courante pour cet utilisateur ou une nouvelle session - HttpSession session =request.getsession(false) retourne la session courante pour cet utilisateur ou null 49

Suivi de session Méthodes appelables sur un objet de type HttpSession -void setattribute(string name,object value ) ajoute un couple (name,value) pour cette session -Object getattribute(string name ) retourne l'objet associé à la clé name ou null -void removeattribute(string name ) enlève le couple de clé (name,value) -java.util.enumeration getattributenames() retourne tous les noms d'attributs associés à la session -void setmaxintervaltime(int seconds ) spécifie la durée de vie maximum d'une session -long getcreationtime()/long getlastaccessedtime() retourne la date de création /de dernier accès de la session en ms depuis le 1/1/1970,00h00 GMT new Date(long) 50

Partage de données entre servlets Notion de contexte d'exécution =ensemble de couples (name,value)partagées par toutes les servlets instanciées ServletContext ctx =getservletcontext()(héritée de GenericServlet) Méthodes appelables sur un objet de typeservletcontext -void setattribute(string name,object value ) ajoute un couple (name,value) dans le contexte -Object getattribute(string name ) retourne l'objet associé à la clé name ou null - void removeattribute(string name ) enlève le couple de clé name - java.util.enumeration getattributenames() retourne tous les noms d'attributs associés au contexte 51

Conclusion servlet Permettent d'étendre le comportement des serveurs Web avec des prog. Java Résumé des fonctionnalités +portabilité,facilité d'écriture (Java) +gestion des applications requiérant un suivi entre plusieurs programmes (persistance des données dans les servlets) +servlet chargée et instanciée une seule fois +servlet exécutée avec des processus légers (threads) 52

Moteurs de servlet Jakarta/Tomcat (jakarta.apache.org) RESIN (www.caucho.com). Bibliographie J. Hunter with W. Crawford «Java Servlet Programming», 1st edition, nov 98, ed O Reilly C. Taylor, T.Kimmett «Core Java Web server», nov 98, Ed Prentice Hall Tutorial Java de Sun sur les servlet De nombreux sites proposent les sources de Servlet http:// www.servlet.com 53