Les servlets Le langage Java
Les Servlets
XVII-1 JMF
Les servlets Le langage Java
servlet = ?
• Une servlet est un programme (plug-in) à
ajouter à un serveur (quel qu'il soit).
• Ce cours a trait à la programmation Java
coté serveur (J2EE )
• Pour l'instant les serveurs acceptant des
servlets sont plutôt des serveurs Web.
• Contre-exemple : serveur de mail qui détruit
les mails contenant des virus.
XVII-2 JMF
Les servlets Le langage Java
Motivation et historique
• Nécessité d'avoir des pages HTML
dynamiques i.e. pages créées lors de la
requête (météo, cours de la bourse, vente
aux enchères, etc.)
• Technologie des scripts CGI.
• Le serveur Web demande à lancer un
programme par le protocole CGI
• Inconvénient : nécessite de créer un process
(sauf technique propriétaire)
XVII-3 JMF
Les servlets Le langage Java
CGI : la technique
• Le serveur Web, lorsqu'une URL de script
CGI est demandée, passe la main au
programme adéquat qui exécute le script.
• Ce programme génère la partie dynamique
en HTML.
• La page HTML est complétée par le serveur
Web et retournée au client Web.
XVII-4 JMF
Les servlets Le langage Java
Servlets
• La technique des CGI en Java
• MAIS
• Sans créer de processus + toute la puissance
de Java (accès aux divers domaines de
l'informatique : BD, multimédia, réseau,
objets distribués, composants, etc.)
• + indépendance de la plate-forme et du
serveur
XVII-5 JMF
Les servlets Le langage Java
Comment ça marche ?
• Le serveur (Web) possède désormais un
interpréteur Java
• => il n'y a pas de processus créé lors de
l'exécution de code Java
• Cf. les clients Web possèdent un
interpréteur Java permettant de lancer des
applets.
• D'où le nom de servlets.
XVII-6 JMF
Les servlets Le langage Java
Moteurs de servlets
• Pour exécuter des servlets, il faut un moteur
de servlets dans le serveur Web.
• Ces moteurs sont des plug-in pour des
serveurs Web existants
• ou bien des serveurs Web aux mêmes
• Plug-in : deux candidats : JRun
([Link]), tomcat
([Link])
XVII-7 JMF
Les servlets Le langage Java
Serveurs Web et servlets
• Il existe des serveurs Web qui traitent les
servlets (et JSP ) :
– IBM WebSphere
– iPlanet Enterprise 4.x (ex Netscape)
• Voir à
[Link]/products/servlet
XVII-8 JMF
Les servlets Le langage Java
Tomcat
• Développé par la communauté qui
implémente les spécifs servlets.
• Téléchargeable (en version d'utilisation
élémentaire) gratuitement à
[Link]
[Link]
• Plug-in de Apache v1.3 ou plus, Microsoft
IIS v4.0 ou plus, …
• Est aussi un mini-serveur Web.
XVII-9 JMF
Les servlets Le langage Java
Programmation des servlets
• Utilise deux paquetages :
– [Link] : paquetage générique
– [Link] : paquetage pour
serveurs Web
• Ces paquetages ne sont pas dans J2SE 1.4
• Sont des paquetages supplémentaires.
• Il sont intégrés dans J2EE voir à
[Link]
XVII-10 JMF
Les servlets Le langage Java
Documentation et tutorial
• Documentation à
[Link]
ee/techdocs/api/[Link]
• Tutorial à :
– [Link]
torial/servlets/[Link]
XVII-11 JMF
Les servlets Le langage Java
Les états d'une servlet
• Cf. les états d'une applet. Le passage d'un
état à un autre est automatique fait par le
conteneur de servlets. service(...)
init() puis service(...)
Avant chargement
de la servlet
Servlet chargé Servlet exécuté
destroy()
Servlet déchargé
• Chargement = chargement en mémoire du
moteur de servlets.
• Le conteneur de servlets lance la méthode
service(…) à chaque requête.
XVII-12 JMF
Les servlets Le langage Java
Méthodes fondamentales d'une
servlet
• Les trois méthodes
– public void init(),
– public void service(…),
– public void destroy()
– sont définies dans la classe abstraite de base
[Link].
• service(...) contient deux paramètres
qui modélisent la requête et la réponse
XVII-13 JMF
Les servlets Le langage Java
Servlet pour serveur Web
• On a de nouveau les trois méthodes
– public void init(),
– public void service(…),
– public void destroy()
• spécialisées dans la classe abstraite de base
[Link]
qui sont lancées automatiquement.
XVII-14 JMF
Les servlets Le langage Java
Construire une servlet pour
serveur Web
• Cf. construction des applets
• On construit une classe qui hérite de la
classe [Link]
• On spécialise les méthodes qui nous
intéressent
• On dépose cette classe « au bon endroit » du
serveur Web
XVII-15 JMF
Les servlets Le langage Java
service(...) dans HttpServlet
• Contient deux paramètres :
protected void
service(HttpServletRequest req,
HttpServletResponse resp) throws
ServletException, [Link]
• Cette méthode écrite dans HttpServlet
redirige la requête suivant son type http.
• Méthode HTTP GET => doGet(…)
• Méthode HTTP POST => doPost(…)
XVII-16 JMF
Les servlets Le langage Java
doGet(…), doPost(…)
• Ont les mêmes paramètres que service(…)
de HttpServlet :
public void doXXX(HttpServletRequest
request, HttpServletResponse
response) throws ServletException,
[Link]
• En général on spécialise l'une des deux
méthodes et la seconde appelle la première.
XVII-17 JMF
Les servlets Le langage Java
Récupérer les données de la
requête
• La requête envoie ses données par http
• Souvent des champs d'un formulaire
• On récupère ces données par
String getParameter(String
nomComposantFormulaire)
• sur request
• Cf. les applets
XVII-18 JMF
Les servlets Le langage Java
Envoyer une réponse
• On positionne le type MIME par :
void setContentType(String
type)
• On récupère le canal de sortie texte par :
PrintWriter getWriter()
• sur response
XVII-19 JMF
Les servlets Le langage Java
Une servlet : code complet
import [Link].*;
import [Link].*;
import [Link].*;
public class MaPremiereServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
// Etape 1. Spécifier le type MIME du contenu de la réponse
[Link]("text/html");
// Etape 2. Récupère le PrintWriter pour envoyer des données au client
PrintWriter out = [Link]();
// Step 3. Envoyer l’information au client
[Link]("<html>");
[Link]("<head><title>Bonjour</title></head>");
[Link]("<body>");
[Link]("<h1> Bonjour à tous </h1>");
[Link](“Il est : " + new [Link]());
[Link]("</body></html>");
}
public void doPost(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
doGet(request, response);
}
}
XVII-20 JMF
Les servlets Le langage Java
Démonstration
XVII-21 JMF
Les servlets Le langage Java
Bibliographie
• Tutorial servlets :
[Link]
/servlets/[Link]
• Page de départ de la technologie servlets :
[Link]
[Link]
XVII-22 JMF