TUTORIELS 
Débuter avec les servlets Java
Un exemple simple pour démarrer dans l'écriture de servlets Java et traiter des données de formulaire.  (31 août 2001)
 

Nous allons nous intéresser dans cet article à l'écriture de servlets Java simples. La première étape est bien sûr de disposer d'un serveur web permettant d'exécuter de tels servlets. Une implémentation libre, Tomcat (développée au sein du projet Jakarta par l'Apache Software Foundation), adossée à un serveur web comme Apache, existe à cette fin. L'installation de Java est évidemment un pré-requis.

La structure de base d'un servlet Java est la suivante:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class monServlet extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletRequest response)
                          throws ServletException, IOException {

    // analyse de la requête HTTP (request)
    // lecture éventuelle des données de formulaire HTML
    // production de la réponse HTTP (response)
   
    PrintWriter out = response.getWriter();

    // Envoi de contenu au navigateur
  }
}

Par exemple, si nous souhaitons récupérer les données concernant la commande d'un utilisateur, et lui afficher ensuite sur son navigateur, nous allons bâtir un formulaire HTML permettant de saisir les données et faisant appel à notre servlet. Au sein de ce dernier, on récupèrera les noms (attribut "name") des paramètres par:

String[] noms = request.getParameterNames();

Nous allons ensuite imbriquer le traitement des données et l'envoi de la réponse:

response.setContentType("text/html"); // type de contenu renvoyé au navigateur

PrintWriter out = response.getWriter();

out.println("<BODY><H>Votre commande:<H><TABLE>");
while(noms.hasMoreElements()) {
  String nom = (String)noms.nextElement();
  out.println("<TR><TD>" + nom + "</TD><TD>");

  String[] valeurs = request.getParameterValues(nom);
  if (valeurs.length == 1) {
    String valeur = valeurs[0];
    if (valeur.length() == 0)
      out.print("-");
    else
      out.print(valeur);
    }
  else {
    out.println("<UL>");
    for(int i=0; i<valeurs.length; i++) {
      out.println("<LI>" + valeurs[i]);
    }
    out.println("</UL>");
  }
  out.println("</TD></TR>");
}
out.println("</TABLE></BODY>"); 


Evidemment, le code HTML produit est ici extrêmement simplifié. On distingue tout de même trois types d'affichage des valeurs, selon que la valeur n'est pas précisée, simple ou multiple.
Nous achèverons notre servlet avec une petite astuce (communément utilisée) pour s'affranchir de la méthode d'envoi des données de formulaire (GET ou POST): nous avons en effet (re)défini jusqu'à présent des méthodes doGet exclusivement. Nous allons rajouter ce qui suit:

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


afin d'appeler également la méthode doGet en cas d'envoi par la méthode POST.
Notre servlet sera alors le suivant:

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;

public class monServlet extends HttpServlet {
  public void doGet(HttpServletRequest request, HttpServletRequest response)
                          throws ServletException, IOException {


  String[] noms = request.getParameterNames();
  response.setContentType("text/html");
  PrintWriter out = response.getWriter();

  out.println("<BODY><H>Votre commande:</H><TABLE>\n");
  while(noms.hasMoreElements()) {
    String nom = (String)noms.nextElement();
    out.println("<TR><TD>" + nom + "</TD><TD>");

    String[] valeurs = request.getParameterValues(nom);
    if (valeurs.length == 1) {
      String valeur = valeurs[0];
      if (valeur.length() == 0)
        out.print("-");
      else
        out.print(valeur);
      }
    else {
      out.println("<UL>");
      for(int i=0; i<valeurs.length; i++) {
        out.println("<LI>" + valeurs[i]);
      }
      out.println("</UL>");
    }
    out.println("</TD></TR>\n");
  }
  out.println("</TABLE></BODY></HTML>");

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


Il s'agit là d'un exemple simple, mais l'intérêt des servlets réside aussi, et surtout, dans la manipulation de bases de données via JDBC.

 
[ Jérôme MorlonJDNet
 
Accueil | Haut de page