Institut Supérieur des Études Technologiques de Kasserine Département Technologies de l'Informatique Programmation n-tiers Chapitre III - Les Servlets DSI21 DSI21 - 2015/2016 Programmation n-tiers Introduction ● ● ● ● ● A la base, les serveurs web sont seulement capables de renvoyer des fichiers présents sur le serveur en réponse à une requête d'un client. Cependant, pour permettre l'envoi d'une page HTML contenant par exemple une liste d'articles répondant à différents critères, il faut créer dynamiquement cette page HTML. Plusieurs solutions existent pour ces traitements. Les servlets Java sont une de ces solutions. Mais les servlets peuvent aussi servir à d'autres usages. DSI21 - 2015/2016 Programmation n-tiers 2 La présentation des servlets (1/2) ● ● ● ● Une servlet est un programme qui s'exécute côté serveur en tant qu'extension du serveur. Elle reçoit une requête du client, elle effectue des traitements et renvoie le résultat. La liaison entre la servlet et le client peut être directe ou passer par un intermédiaire comme par exemple un serveur http. Même si pour le moment la principale utilisation des servlets est la génération de pages html dynamiques utilisant le protocole http et donc un serveur web, n'importe quel protocole reposant sur le principe de requête/réponse peut faire usage d'une servlet. DSI21 - 2015/2016 Programmation n-tiers 3 La présentation des servlets (2/2) ● ● ● Écrite en Java, une servlet en retire ses avantages : la portabilité, l'accès à toutes les API de Java dont JDBC pour l'accès aux bases de données, ... Une servlet peut être invoquée plusieurs fois en même temps pour répondre à plusieurs requêtes simultanées. Dans une architecture Client/Serveur trois tiers, la servlet se positionne dans le tiers du milieu entre le client léger chargé de l'affichage et la source de données. DSI21 - 2015/2016 Programmation n-tiers 4 Le fonctionnement d'une servlet (cas d'utilisation de http) ● ● ● Un serveur d'applications permet de charger et d'exécuter les servlets dans une JVM (Java Virtual Machine). C'est une extension du serveur web. Ce serveur d'applications contient entre autres un moteur de servlets qui se charge de manager les servlets qu'il contient. DSI21 - 2015/2016 Programmation n-tiers 5 Le fonctionnement d'une servlet (cas d'utilisation de http) ● Pour exécuter une servlet, il suffit de saisir une URL qui désigne la servlet dans un navigateur. 1) Le serveur reçoit du navigateur la requête http qui a recours à une servlet 2) Si c'est la première sollicitation de la servlet, le serveur l'instancie. Les servlets sont stockées (sous forme de fichiers .class) dans un répertoire particulier du serveur. Ce répertoire dépend du serveur d'applications utilisé. La servlet reste en mémoire jusqu'à l'arrêt du serveur. Certains serveurs d'applications permettent aussi d'instancier des servlets dès le lancement du serveur. DSI21 - 2015/2016 Programmation n-tiers 6 Le fonctionnement d'une servlet (cas d'utilisation de http) suite 3) Le serveur crée un objet qui représente la requête http ainsi que l'objet qui contiendra la réponse et les envoie à la servlet 4) La servlet crée dynamiquement la réponse sous forme de page html transmise via un flux dans l'objet contenant la réponse. La création de cette réponse utilise bien sûr la requête du client mais aussi un ensemble de ressources incluses sur le serveur telles de que des fichiers ou des bases de données. 5) Le serveur récupère l'objet réponse et envoie la page html au client. DSI21 - 2015/2016 Programmation n-tiers 7 Les outils nécessaires pour développer des servlets ● ● Initialement, pour développer des servlets avec le JDK Standard Edition, il fallait utiliser le Java Server Development Kit (JSDK) qui est une extension du JDK. Pour réaliser les tests, le JSDK fournissait, dans sa version 2.0 un outil nommé servletrunner et depuis sa version 2.1, il fournit un serveur http allégé. Actuellement, pour exécuter des applications web, il faut utiliser un conteneur web ou un serveur d'applications : il existe de nombreuses versions commerciales telles que IBM Webpshere ou BEA WebLogic mais aussi des versions libres telles que Tomcat du projet GNU Jakarta. DSI21 - 2015/2016 Programmation n-tiers 8 Les outils nécessaires pour développer des servlets ● ● ● ● Ce serveur d'applications ou ce conteneur web doit utiliser ou inclure un serveur http dont le plus utilisé est Apache. Le choix d'un serveur d'applications ou d'un conteneur web doit tenir compte de la version du JSDK qu'il supporte pour être compatible avec celle utilisée pour le développement des servlets. Le choix entre un serveur commercial et un libre doit tenir compte principalement du support technique, des produits annexes fournis et des outils d'installation et de configuration. Pour simplement développer des servlets, le choix d'un serveur libre se justifie pleinement de part sa gratuité et sa « légèreté ». DSI21 - 2015/2016 Programmation n-tiers 9 Le rôle du conteneur web ● ● ● ● Un conteneur web est un moteur de servlets qui prend en charge et gère les servlets : chargement de la servlet, gestion de son cycle de vie, passage des requêtes et des réponses ... Un conteneur web peut être intégré dans un serveur d'applications qui va contenir d'autres conteneurs et éventuellement proposer d'autres services.. Le chargement et l'instanciation d'une servlet se font selon le paramétrage soit au lancement du serveur soit à la première invocation de la servlet. Dès l'instanciation, la servlet est initialisée une seule et unique fois avant de pouvoir répondre aux requêtes. DSI21 - 2015/2016 Programmation n-tiers 10 L'API servlet ● ● ● ● Les servlets sont conçues pour agir selon un modèle de requête/réponse. Tous les protocoles utilisant ce modèle peuvent être utilisés : http, ftp, etc ... L'API servlets est une extension du jdk de base, et en tant que telle elle est regroupée dans des packages préfixés par javax. L'API servlet regroupe un ensemble de classes dans deux packages : javax.servlet : contient les classes pour développer des serlvets génériques indépendantes d'un protocole javax.servlet.http : contient les classes pour développer des servlets qui reposent sur le protocole http DSI21 - 2015/2016 Programmation n-tiers 11 L'API servlet Le package javax.servlet définit plusieurs interfaces, méthodes et exceptions : DSI21 - 2015/2016 Programmation n-tiers 12 L'API servlet Le package javax.servlet.http définit plusieurs interfaces et méthodes : DSI21 - 2015/2016 Programmation n-tiers 13 La requête et la réponse L'interface ServletRequest définit plusieurs méthodes qui permettent d'obtenir des données sur la requête du client : L'interface ServletRequest définit plusieurs méthodes qui permettent d'obtenir des données sur la requête du client : DSI21 - 2015/2016 Programmation n-tiers 14 Un exemple de servlet ● ● Une servlet qui implémente simplement l'interface Servlet doit évidemment redéfinir toutes les méthodes de l'interface. Il est très utile lorsque que l'on crée une servlet qui implémente directement l'interface Servlet de sauvegarder l'objet ServletConfig fourni par le conteneur en paramètre de la méthode init() car c'est le seul moment où l'on a accès à cet objet. DSI21 - 2015/2016 Programmation n-tiers 15 Un exemple de servlet DSI21 - 2015/2016 Programmation n-tiers 16 Le protocole HTTP ● ● ● ● ● Le protocole HTTP est un protocole qui fonctionne sur le modèle client/serveur. Un client qui est une application (souvent un navigateur web) envoie une requête à un serveur (un serveur web). Ce serveur attend en permanence les requêtes sur un port particulier (par défaut le port 80). A la réception de la requête, le serveur lance un thread qui va la traiter pour générer la réponse. Le serveur renvoie la réponse au client une fois les traitements terminés. DSI21 - 2015/2016 Programmation n-tiers 17 Le protocole HTTP ● ● ● ● ● La requête est composée de trois parties : 1)la commande 2)la section en-tête 3)le corps La première ligne de la requête contient la commande à exécuter par le serveur. La commande est suivie éventuellement d'un argument qui précise la commande (par exemple l'url de la ressource demandée). Enfin la ligne doit contenir la version du protocole HTTP utilisé, précédée de HTTP/. Il existe deux versions principales du protocole HTTP : 1.0 et 1.1. DSI21 - 2015/2016 Programmation n-tiers 18 Le protocole HTTP ● Exemple : GET / index.html HTTP/1.0 ● ● ● Avec HTTP 1.1, les commandes suivantes sont définies : GET, POST, HEAD, OPTIONS, PUT, DELETE, TRACE et CONNECT. Les trois premières sont les plus utilisées. Il est possible de fournir sur les lignes suivantes de la partie en-tête des paramètres supplémentaires. Cette partie en-tête est optionnelle. DSI21 - 2015/2016 Programmation n-tiers 19 Le protocole HTTP ● ● ● ● ● ● ● Les informations fournies peuvent permettre au serveur d'obtenir des informations sur le client. Chaque information doit être mise sur une ligne unique. Le format est nom_du_champ : valeur. Les champs sont prédéfinis et sont sensibles à la casse. Une ligne vide doit précéder le corps de la requête. Le contenu du corps de la requête dépend du type de la commande. La requête doit obligatoirement être terminée par une ligne vide. DSI21 - 2015/2016 Programmation n-tiers 20 Le protocole HTTP ● ● La réponse est elle aussi composée des trois mêmes parties : 1) une ligne de statuts 2) un en-tête dont le contenu est normalisé 3) un corps dont le contenu dépend totalement de la requête La première ligne de l'en-tête contient un état qui est composé : 1) de la version du protocole HTTP utilisé, 2) du code de statut 3) et d'une description succincte de ce code. DSI21 - 2015/2016 Programmation n-tiers 21 Le protocole HTTP ● ● Le code de statut est composé de trois chiffres qui donnent des informations sur le résultat du traitement qui a généré cette réponse. Ce code peut être associé à une catégorie en fonction de sa valeur : DSI21 - 2015/2016 Programmation n-tiers 22 Le protocole HTTP ● Plusieurs codes sont définis par le protocole HTTP dont les plus importants sont : ➢ 200 : traitement correct de la requête ➢ 204 : traitement correct de la requête mais la réponse ne contient aucun contenu (ceci permet au browser de laisser la page courante affichée) ➢ 404 : la ressource demandée n'est pas trouvée (sûrement le plus célèbre) ➢ 500 : erreur interne du serveur DSI21 - 2015/2016 Programmation n-tiers 23 Les servlets http ● ● ● ● L'usage principal des servlets est la création de pages HTML dynamiques. Sun/Oracle fournit une classe qui encapsule une servlet utilisant le protocole http. Cette classe est la classe HttpServlet. Cette classe hérite de GenericServlet, donc elle implémente l'interface Servlet, et redéfinit toutes les méthodes nécessaires pour fournir un niveau d'abstraction permettant de développer facilement des servlets avec le protocole http. DSI21 - 2015/2016 Programmation n-tiers 24 Les servlets http ● ● ● Ce type de servlet n'est pas utile seulement pour générer des pages HTML bien que cela soit son principal usage, elle peut aussi réaliser un ensemble de traitements tels que mettre à jour une base de données. En réponse, elle peut générer une page html qui indique le succès ou non de la mise à jour. Une servlets peut aussi par exemple renvoyer une image qu'elle aura dynamiquement générée en fonction de certains paramètres. DSI21 - 2015/2016 Programmation n-tiers 25 Les servlets http ● ● ● Elle définit un ensemble de fonctionnalités très utiles : par exemple, elle contient une méthode service() qui appelle certaines méthodes à redéfinir en fonction du type de requête http (doGet(), doPost(), etc ...). La requête du client est encapsulée dans un objet qui implémente l'interface HttpServletRequest : cet objet contient les données de la requête et des informations sur le client. La réponse de la servlet est encapsulée dans un objet qui implémente l'interface HttpServletResponse. DSI21 - 2015/2016 Programmation n-tiers 26 Les servlets http ● ● Typiquement pour définir une servlet, il faut définir une classe qui hérite de la classe HttpServlet et redéfinir la méthode doGet() et/ou doPost() selon les besoins La méthode service() héritée de HttpServlet appelle l'une ou l'autre de ces méthodes en fonction du type de la requête http : ● une requête GET : c'est une requête qui permet au client de demander une ressource ● une requête POST : c'est une requête qui permet au client d'envoyer des informations issues par exemple d'un formulaire DSI21 - 2015/2016 Programmation n-tiers 27 Les servlets http ● ● Une servlet peut traiter un ou plusieurs types de requêtes grâce à plusieurs autres méthodes : ● doHead() : pour les requêtes http de type HEAD ● doPut() : pour les requêtes http de type PUT ● doDelete() : pour les requêtes http de type DELETE ● doOptions() : pour les requêtes http de type OPTIONS ● doTrace() : pour les requêtes http de type TRACE La classe HttpServlet hérite aussi de plusieurs méthodes définies dans l'interface Servlet : init(), destroy() et getServletInfo(). DSI21 - 2015/2016 Programmation n-tiers 28 DSI21 - 2015/2016 Programmation n-tiers 29