Médiaforma

Java – Deuxième approche – Servlets

Print Friendly

Les servlets sont des classes Java qui gèrent les requêtes http et implémentent l’interface javax.servlet.Servlet. Généralement, les développeurs d’applications Web écrivent des servlets qui étendent la classe abstraite javax.servlet.http.HttpServlet. Cette classe implémente l’interface Servlet et est spécialement conçue pour gérer les requêtes http.

Voici une servlet Hello World. Lorsqu’elle sera invoquée, elle se contentera d’afficher « Hello World » dans le navigateur. Tapez les instructions suivantes dans votre éditeur de code et sauvegardez le fichier sous le nom HelloWorld.java dans votre dossier de travail :

// Importation des bibliothèques Java nécessaires
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

// Extension de la classe HttpServlet
public class HelloWorld extends HttpServlet {

  private String message;

  public void init() throws ServletException {
      // Initialisation de la servlet
      message = "Hello World";
      // Ici, vous pourriez par exemple extraire des données
      // depuis une base de données pour créer la réponse http
  }

  public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
      // Définition du type de la réponse
      response.setContentType("text/html");

      // Actions à effectuer dans la servlet
      PrintWriter out = response.getWriter();
      out.println("<h1>" + message + "</h1>");
  }

  public void destroy() {
      // Dans cette servlet, il n'y a rien à faire ici
  }
}

Examinons ce code.

Les premières lignes importent les bibliothèques Java nécessaires à l’exécution d’une servlet.

Pour qu’une classe Java soit une servlet, elle doit :

1) étendre la classe HttpServlet :

 public class HelloWorld extends HttpServlet

2) surcharger la classe doGet ou la classe doPost (selon si les données sont passées par une requête GET ou POST).
 public void doGet(HttpServletRequest request, HttpServletResponse response)

La méthode init() est exécutée une fois, au démarrage de la servlet. Ici, elle initialise le private String message :

public void init() throws ServletException {
message = "Hello World";

Dans cet exemple, nous surchargeons la méthode doGet().

public void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

Ici :

  • request permet de lire les en-têtes http (les cookies) et les données entrées par l’utilisateur (ici, aucune donnée n’est transmise par GET).
  • response définit la réponse HTTP, c’est-à-dire :
    • le status http (200,404, etc.),
    • l’en-tête (content-type, cookies, etc.),
    • les données à retourner au client, à travers l’objet PrinterWriter.

 

Remarque

Toutes les servlets ont un squelette identique. Seuls changent :

  • le contenu de la méthode init() ;
  • la ou les classes surchargées : doGet() ou/et doPost() ;
  • les traitement effectués dans les classes doGet() et/ou doPost().

 

Autre remarque :

Vous pourriez retourner un code HTML complet au client en remplaçant l’instruction suivante :

out.println("<h1>" + message + "</h1>");

Par ces instructions :

out.println("<HTML>");
out.println("<HEAD><TITLE>Ma première servlet</TITLE></HEAD>");
out.println("<BODY>");
out.println("Hello World");
out.println("</BODY>");
out.println("</HTML>");
out.close();

 

Compilez la classe HelloWorld.java. Pour cela, ouvrez une Invite de commande dans le dossier où se trouve HelloWorld.java et lancez cette commande :

javac -cp %CLASSPATH%;"c:\Program Files\Apache Software Foundation\Tomcat 8.0\lib\servlet-api.jar" HelloWorld.java

Si tout se passe bien, vous devriez obtenir le fichier HelloWorld.class. Les serlvets se trouvent par défaut dans le dossier c:\Program Files\Apache Software Foundation\Tomcat 8.0\webapps\ROOT\WEB-INF\classes\.

Copiez HelloWorld dans ce dossier.

 

Pour que la servlet soit accessible, vous devez lui associer une URL.

Ouvrez le fichier web.xml dans votre éditeur de code (ce fichier se trouve dans c:\Program Files\Apache Software Foundation\Tomcat 8.0\webapps\ROOT\WEB-INF\) et complétez-le avec les instructions en gras :

 

<?xml version="1.0" encoding="ISO-8859-1"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
http://xmlns.jcp.org/xml/ns/javaee/web-app_3_1.xsd"
version="3.1"
metadata-complete="true">

<display-name>Welcome to Tomcat</display-name>
<description>
Welcome to Tomcat
</description>

  <servlet>
    <servlet-name>HelloWorld</servlet-name>
    <servlet-class>HelloWorld</servlet-class>
  </servlet>
 
  <servlet-mapping>
    <servlet-name>HelloWorld</servlet-name>
    <url-pattern>/HelloWorld</url-pattern>
  </servlet-mapping>

</web-app>

Le bloc <servlet></servlet> définit le nom et la classe de la servlet.

Le bloc <servlet-mapping></servlet-mapping> définit l’URL associée à la servlet. Ici /HelloWorld.

 

Il ne vous reste plus qu’à naviguer vers l’URL http://localhost:8080/HelloWorld pour lancer la servlet et obtenir un Hello World en retour :

 

 

Vous avez aimé cet article ? Partagez-le avec vos réseaux...
 
Comments

No comments yet.

Leave a Reply