Précédent Suivant

Les Servlets


Une servlet Java peut être définie comme suit (adresse).
Définition :Programme Java qui utilise des modules supplémentaires figurant dans l'API Java, qui s'exécute dynamiquement sur le serveur Web, et permet l'extension des fonctions du serveur. On peut les comparer aux CGI écrit en C, C++ ou PERL.
Note(s)
: En fait, les servlets sont aux serveurs ce que les applets sont aux navigateurs. Ainsi, de clients, les applets deviennent aussi serveurs. Un servlet peut être chargé automatiquement lors du démarrage du serveur Web ou lors de la première requête du client. Une fois chargés, les servlets restent actifs dans l'attente d'autres requêtes du client. Grâce à la création d'un environnement de prestation de services requête/réponse via le Web, les servlets permettent l'extension des fonctions du serveur. Lorsqu'un client envoie une requête au serveur, ce dernier transmet au servlet les informations relatives à la requête. Par la suite, le servlet crée une réponse que le serveur renvoie au client. Lors de la création de la réponse, le servlet peut utiliser toutes les fonctions du langage Java ou communiquer avec des ressources externes (fichiers, bases de données ou applications écrites en Java ou dans d'autres langages).

Le package JSDK (Java Servlet Development Kit) peut être téléchargé chez Javasoft à cette adresse. C'est grâce à lui qu'on pourra compiler nos servlets.
La deuxième chose dont on a besoin, c'est un serveur Web qui est capable d'interpréter les servlets, c'est à dire un serveur Web qui dispose d'une machine virtuelle. Je préconise un serveur Apache (www.apache.org) associé au composant JServ (java.apache.org) pour les servlets. Il est gratuit et marche vraiment bien. Sinon, Un mini serveur web est fourni avec le JSDK pour réaliser des tests.

Une des utilisations des servlets est de les coupler à JDBC pour interroger une base de données en fonction d'une requête émise par un formulaire HTML. Les résultats obtenus peuvent être retourné aux clients à l'aide d'une mise en page HTML. On peut donc créer dynamiquement des pages Web avec les servlet.

Le cycle de vie d'une servlet
Une servlet possède principalement 3 méthodes. Une méthode init(), une méthode service() et une méthode destroy().
Init()
Quand une servlet est chargée pour la première fois la méthode init() est invoquée. C'est ici qu'on ouvrira des fichiers ou qu'on etablira des connexions à des bases de données pour gagner du temps à chaque exécution de la servlet. En effet, alors qu'un CGI créera une connexion à un SGBD à chaque exécution, une servlets n'en créera qu'une une fois pour toute au départ.
Service()
La méthode service() est le coeur de la servlet. C'est cette méthode qui est invoquée à chaque exécution de la servlet. La méthode lit la requête et produit la réponse à l'aide de ses deux paramètres : ServletRequest et ServletResponse.
Quelques méthodes de ServletRequest :
java.lang.String getParameter(java.lang.String name)
java.lang.String getRemoteAddr()
int getContentLength()

Quelques méthodes de ServletResponse :
void setContentType(java.lang.String type)
java.io.PrintWriter getWriter()
ServletOutputStream getOutputStream()
Destroy()
La méthode destroy() est invoquée lorsque la servlet est descendue du serveur pour fermer proprement les différentes sources ouvertes dans le init().

Voici un exemple simple de servlet :

import java.io.*;
import javax.servlet.*;
public SampleServlet implements Servlet {
  private ServletConfig config;

  public void init (ServletConfig config)
    throws ServletException {
    this.config = config;
  }

  public void destroy() {} // do nothing
  
  public ServletConfig getServletConfig() {
    return config;
  }
  
  public String getServletInfo() {
    return "A Simple Servlet";
  }
  
  public void service (ServletRequest req,
    ServletResponse res 
  ) throws ServletException, IOException  {
    res.setContentType( "text/html" );
    PrintWriter out = res.getWriter();
    out.println( "<html>" );
    out.println( "<head> );
    out.println( "<title>A Sample Servlet</title>" );
    out.println( "</head>" );
    out.println( "<body>" );
    out.println( "<h1>A Sample Servlet</h1>" );
    out.println( "</body>" );
    out.println( "</html>" );
    out.close();
  }
}

Ecrire une servlet qui attaque une base Oracle en JDBC et restitue l'information récupérée sous forme d'une page Web.


Précédent Suivant