Les Servlets
Transcription
Les Servlets Qu'est-ce qu'une Servlet? Les servlets sont l'un des composants JEE les plus utilisés. Elles permettent de gérer des requêtes HTTP et de fournir au client une réponse HTTP et forment ainsi la base de la programmation Web JEE. Les Servlets s’exécutent toujours dans un moteur de Servlet ou conteneur de Servlet permettant d’établir le lien entre la Servlet et le serveur Web. Dans ce tutoriel, nous utiliserons Apache Tomcat. Une Servlet est invoquée lorsqu'un navigateur appelle l'URL qui lui est liée. Dans notre programme, nous allons créer une Servlet HelloWorld.java, qui sera exécutée lorsque le navigateur demandera à charger la page hello.htm et qui affichera le texte "Bonjour tout le monde". Ecrire une Servlet HelloWorld Dans notre projet HelloWorld V1 créé au chapitre précédent, nous allons donc créer notre première Servlet, appelée HelloWorld et insérée dans un package fr.mistra.helloworld.servlets : Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected] Les Servlets Le code de la classe HelloWorld est le suivant : package fr.mistra.helloworld.servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected] Les Servlets import javax.servlet.http.HttpServletResponse; public class HelloWorld extends HttpServlet{ private static final long serialVersionUID = 1L; public HelloWorld() { super(); } public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); out.println(""); out.println("Bonjour tout le monde"); out.println(""); } } Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected] Les Servlets A la ligne 11, nous indiquons que la Servlet écrite dérive de la classe HTTPServlet, appartenant au package javax.servlet.http.HttpServlet, ce qui signifie qu'elle est prévue pour fonctionner avec le protocole HTTP. De ce fait, notre Servlet gère la réception de requêtes HTTP et l'envoi de réponses HTTP. Lorsque le navigateur client demande le chargement d'une page, le serveur Web Tomcat reçoit une requête HTTP de type GET ou POST. Il crée un objet de type HttpServletRequest, qui pourra ensuite être traité par la Servlet. Il en va de même pour la réponse : c'est Tomcat qui se charge de transformer l'objet HttpServletResponse manipulé par la Servlet en une réponse HTTP compréhensible par le navigateur. Toutefois, il existe différents types de requêtes HTTP. Les plus courantes sont GET et POST. Puisqu'elles fonctionnent différemment, les Servlets implémentent des méthodes différentes pour les traiter. Si la servlet a été appelée par la méthode GET, la méthode doGet est appelée pour traiter la requête du client. Si la servlet a été appelée par la méthode POST, la méthode doPost est appelée pour traiter la requête du client : doPost(HttpServletRequest request, HttpServletResponse response); doGet(HttpServletRequest request, HttpServletResponse response); Les autres méthodes existantes sont listées dans la documentation JEE, mais nous ne les utiliserons pas dans ce tutoriel. Il n'est pas obligatoire de toutes les implémenter, mais une au moins est nécessaire. Dans le cas de notre exercice, nous cherchons simplement à charger la page hello.htm, et aucun paramètre n'est pour l'instant pris en compte : c'est donc la méthode GET qui sera utilisée. Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected] Les Servlets La ligne 20 indique le type de réponse à renvoyer : dans notre cas, c'est une page HTML. A la ligne 21, nous créeons un objet de type PrintWriter qui nous permettra d'écrire dans la page HTML à renvoyer. Enfin, les lignes 23 à 25 correspondent au contenu de cette page. Ici, c'est une page simplissime, contenant une simple ligne de texte : Bonjour tout le monde! Lier la servlet à une url L'application Web est configurée à l'aide du fichier web.xml présent dans le répertoire /WebContent/WEB-INF. Il contient la description de chaque Servlet, ainsi que les liens existants entre Servlets et URL. Dans le cas de notre programme, nous avons créé une nouvelle Servlet nommée HelloWorld.java, que nous voulions lier à l'url hello.htm. Le fichier web.xml correspondant est donc celui-ci : xmlns="http://java.sun.com/xml/ns/javaee" Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected] Les Servlets xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5"> HelloWorld V1 index.html index.htm index.jsp default.html default.htm default.jsp HelloWorld fr.mistra.helloworld.servlets.HelloWorld HelloWorld Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected] Les Servlets /hello.htm Les lignes 1 à 14 sont celles écrites par défaut lors de la création du projet : elles indiquent, entre autres, quelles URLs sont susceptibles d'être reconnues comme URL par défaut lors du chargement du contexte de HelloWorld_V1. Si l'une des pages listées existe dans le répertoire WEB-INF, elle sera chargée lorsque le n avigateur client demandera à charger la page http://localhost:8080/HelloWorld_V1/ Les lignes 16 à 19 décrivent la Servlet que nous venons de créer : son nom est HelloWorld et le fichier .class généré lors de la compilation du programme se trouve à l'emplacement fr.mistra.helloworld.servlets.HelloWorld Aux lignes 20 à 23, nous trouvons un mapping de Servlet, c'est-à-dire un lien entre une Servlet et une URL. Dans notre cas, la Servlet nommée HelloWorld sera liée à l'URL http://localhost:8080/HelloWorld_V1/hello.htm Afin que Tomcat prenne en compte les modifications faites sur le fichier web.xml, redémarrons le serveur en cliquant droit sur le serveur dans l'onglet Serveur et en choisissant la ligne Restart. Notez qu'il faudra effectuer ce redémarrage chaque fois que vous modifierez le fichier web.xml. Charger la page hello.htm Pour tester le programme Hello World maintenant terminé, lancez le navigateur de votre choix Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected] Les Servlets et tapez ensuite l'url : http://localhost:8080/HelloWorld_V1/hello.htm Vous devriez obtenir une page Web contenant le texte "Bonjour tout le monde" semblable à celle-ci : Nous savons désormais comment créer une page Web à l'aide d'un programme Java et des Servlets. Voyons maintenant comment gérer des paramètres, en passant par la méthode GET. La méthode POST sera vue dans les prochains chapitres. Requête GET et paramètres Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected] Les Servlets Reprenons ce programme et modifions-le pour qu'il prenne en compte un paramètre envoyé par une requête GTTP de type GET et affiche la valeur de ce paramètre. Pour ce faire, nous allons reprendre le code de la Servlet HelloWorld que nous avions précédemment écrite et modifier la méthode doGet. Elle aura désormais le comportement suivant: si un paramètre "nom" est passé dans l'url, la page Web affichera "Bonjour nom-saisi!" sinon, la page Web affichera le message "Il manque le paramètre nom!" Pour ce faire, nous modifions la classe HelloWorld.java comme indiqué aux lignes : package fr.mistra.helloworld.servlets; import java.io.IOException; import java.io.PrintWriter; import javax.servlet.ServletException; import javax.servlet.http.HttpServlet; import javax.servlet.http.HttpServletRequest; import javax.servlet.http.HttpServletResponse; public class HelloWorld extends HttpServlet{ private static final long serialVersionUID = 1L; Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected] Les Servlets public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException { response.setContentType("text/html"); PrintWriter out = response.getWriter(); // On récupère le nom passé en paramètre dans l'URL String nomSaisi = request.getParameter("nom"); out.println(""); if (nomSaisi == null) out.println("Il manque le paramètre nom!"); else out.println("Bonjour " + nomSaisi + "!"); out.println(""); } } Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected] Les Servlets A la ligne 19, la méthode getParameter() renvoie la valeur du paramètre dont le nom est donné en attribut. Dans notre navigateur, testons les URLs suivantes: 1. 2. 3. 4. http://localhost:8080/HelloWorld_V1/hello.htm http://localhost:8080/HelloWorld_V1/hello.htm?nom=Mistra http://localhost:8080/HelloWorld_V1/hello.htm?nom=Michel http://localhost:8080/HelloWorld_V1/hello.htm?name=Mistra Les tests 1 et 4 doivent afficher le message d'erreur, alors que les tests 2 et 3 doivent afficher respectivement "Bonjour Mistra!" et "Bonjour Michel!". . Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected] Powered by TCPDF (www.tcpdf.org)
Documents pareils
TP 5 JSTL, MVC - LRDE
un contact, rechercher un contact, modifier un contact, ...). Cette application doit être conforme au
design pattern MVC (i.e, des JSPs pour les vues, une Servlet comme contrôleur et des classes Ja...
Développement Web
"http://java.sun.com/dtd/web-app 2 3.dtd">
SERVLET TP 1 Installation du JDK Installation de Glassfish
you want to distribute the web module. You package a web module into a WAR by executing
the jar command in a directory laid out in the format of a web module, by using the Ant utility,
or by using ...
Les servlets
La classe GenericServlet implémente l'interface ServletConfig
une méthode log() standard pour envoyer des informations dans le journal du conteneur
objet RequestDispatcher pour le transfert du trai...