Les Servlets

Demander un devis
Je souhaite télécharger le programme ou imprimer le programme
  • Imprimer
tutoriel_vers_formation_jee6

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 : 

servlet_hello_world_arborescence

 

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;
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("");
      }
}

 

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.

 

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" 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
            /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 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 :

servlet_hello_world_result

 

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

 

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;
 
      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("");
      }
}

 

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. http://localhost:8080/HelloWorld_V1/hello.htm
  2. http://localhost:8080/HelloWorld_V1/hello.htm?nom=Mistra
  3. http://localhost:8080/HelloWorld_V1/hello.htm?nom=Michel
  4. 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!".

 

tutoriel_precedent

tutoriel_suivant

.
X
 
 
 
 
 

You havecharacters left.