![]() |
![]() |
![]() |
![]() |
![]() |
![]() |
Architecture du package Servlet |
Les servlet sont des classes Java implémentant des classes et des interfaces provenant des packages :
import javax.servlet.*; import javax.servlet.http.*; import java.io.*;Le package javax.servlet est fourni dans le JSDK (Java Servlet Development Kit, c'est-à-dire l'API Java Servlet) de Sun, disponible sur http://java.sun.com/products/servlets.
Ainsi toutes les servlets implémentent directement ou indirectement l'interface Servlet, en dérivant une classe qui l'implémente: c'est-à-dire généralement la classe HTTPServlet, elle-même issue de GenericServlet.
La classe GenericServlet (javax.servlet.GenericServlet) définit une classe abstraite (implémentation de base de l'interface Servlet).
Fonctionnement d'une servlet |
Lorsqu'une servlet est appelée par un client, la méthode service() est exécutée. Celle-ci est le principal point d'entrée de toute servlet et accepte deux objets en paramètres:
Développer une servlet |
Afin de développer un servlet fonctionnant avec le protocole HTTP, il suffit de créer une classe étendant HttpServlet (qui implémente elle-même l'interface Servlet).
La classe HttpServlet (dérivant de GenericServlet) permet de fournir une implémentation de l'interface Servlet spécifique à HTTP. La classe HttpServlet surcharge la méthode service en lisant la méthode HTTP utilisée par le client, puis en redirigeant la requête vers une méthode appropriée. Les deux principales méthodes du protocole HTTP étant GET et POST, il suffit de surcharger la méthode adéquate afin de traiter la requête :
Développer une servlet |
import javax.servlet.*;
import javax.servlet.http.*;
public class ServletDeBase extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException {
// lecture de la requete
// traitements
// envoi de la reponse
}
}
Lire la requête |
A l'intérieur de la méthode DoXXX() (Doget() ou DoPost() selon la méthode invoquée) la requête de l'utilisateur est passée en paramètres sous forme d'objet (ou plus exactement l'interface) HttpServletRequest .
Afin de comprendre son fonctionnement, il est essentiel de connaître la façon de laquelle les requêtes sont transmises du client au serveur par le protocole HTTP.
Voici les différentes méthodes de l'objet HttpServletRequest
Méthode | Description |
---|---|
String getMethod() | Récupère la méthode HTTP utilisée par le client |
String getHeader(String Key) | Récupère la valeur de l'attribut Key de l'en-tête |
String getRemoteHost() | Récupère le nom de domaine du client |
String getRemoteAddr() | Récupère l'adresse IP du client |
String getParameter(String Key) | Récupère la valeur du paramètre Key (clé) d'un formulaire. Lorsque plusieurs valeurs sont présentes, la première est retournée |
String getParameterValues(String Key) | Récupère les valeurs correspondant au paramètre Key (clé) d'un formulaire, c'est-à-dire dans le cas d'une sélection multiple (cases à cocher, listes à choix multiples) les valeurs de toutes les entités sélectionnées |
Enumeration getParameterNames() | Retourne un objet Enumeration contenant la liste des noms des paramètres passés à la requête |
String getServerName() | Récupère le nom du serveur |
String getServerName() | Récupère le nom du serveur |
String getServerPort() | Récupère le numéro de port du serveur |
Créer la réponse |
De la même façon, la réponse à fournir à l'utilisateur est représentée sous forme d'objet HttpServletResponse.
Voici les différentes méthodes de l'objet HttpServletRequest
Méthode | Description |
---|---|
String setStatus(int StatusCode) | Définit le code de retour de la réponse |
void setHeader(String Nom, String Valeur) | Définit une paire clé/valeur dans les en-têtes |
void setContentType(String type) | Définit le type MIME de la réponse HTTP, c'est-à-dire le type de données envoyées au navigateur |
void setContentLength(int len) | Définit la taille de la réponse |
PrintWriter getWriter() | Retourne un objet PrintWriter permettant d'envoyer du texte au navigateur client. Il se charge de convertir au format approprié les caractères Unicode utilisés par Java |
ServletOutputStream getOutputStream() | Définit un flot de données à envoyer au client, par l'intermédiaire d'un objet ServletOutputStream, dérivé de la classe java.io.OutpuStream |
void sendredirect(String location) | Permet de rediriger le client vers l'URL location |