Les Servlets

Transcription

Les Servlets
Les Servlets
Qu'est-ce qu'une Servlet?
Les servlets sont l'un des composants JEE les plus utilisés. Elles permettent de gérer
des requêtes HTTP et de fournir au client une réponse HTTP et forment ainsi la base de la
programmation Web JEE.
Les Servlets s’exécutent toujours dans un moteur de Servlet ou conteneur de Servlet
permettant d’établir le lien entre la Servlet et le serveur Web. Dans ce tutoriel, nous utiliserons
Apache Tomcat.
Une Servlet est invoquée lorsqu'un navigateur appelle l'URL qui lui est liée. Dans notre
programme, nous allons créer une Servlet HelloWorld.java, qui sera exécutée lorsque le
navigateur demandera à charger la page hello.htm et qui affichera le texte "Bonjour tout le
monde".
Ecrire une Servlet HelloWorld
Dans notre projet HelloWorld V1 créé au chapitre précédent, nous allons donc créer notre
première Servlet, appelée HelloWorld et insérée dans un package fr.mistra.helloworld.servlets :
Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected]
Les Servlets
Le code de la classe HelloWorld est le suivant :
package fr.mistra.helloworld.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected]
Les Servlets
import javax.servlet.http.HttpServletResponse;
public class HelloWorld extends HttpServlet{
private static final long serialVersionUID = 1L;
public HelloWorld() {
super();
}
public void doGet(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
out.println("");
out.println("Bonjour tout le monde");
out.println("");
}
}
Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected]
Les Servlets
A la ligne 11, nous indiquons que la Servlet écrite dérive de la classe HTTPServlet, appartenant
au package javax.servlet.http.HttpServlet, ce qui signifie qu'elle est prévue pour fonctionner
avec le protocole HTTP. De ce fait, notre Servlet gère la réception de requêtes HTTP et l'envoi
de réponses HTTP.
Lorsque le navigateur client demande le chargement d'une page, le serveur Web Tomcat reçoit
une requête HTTP de type GET ou POST. Il crée un objet de type HttpServletRequest, qui
pourra ensuite être traité par la Servlet. Il en va de même pour la réponse : c'est Tomcat qui se
charge de transformer l'objet HttpServletResponse manipulé par la Servlet en une réponse
HTTP compréhensible par le navigateur.
Toutefois, il existe différents types de requêtes HTTP. Les plus courantes sont GET et POST.
Puisqu'elles fonctionnent différemment, les Servlets implémentent des méthodes différentes
pour les traiter. Si la servlet a été appelée par la méthode GET, la méthode doGet est appelée
pour traiter la requête du client. Si la servlet a été appelée par la méthode POST, la méthode
doPost est appelée pour traiter la requête du client :
doPost(HttpServletRequest request, HttpServletResponse response);
doGet(HttpServletRequest request, HttpServletResponse response);
Les autres méthodes existantes sont listées dans la documentation JEE, mais nous ne les
utiliserons pas dans ce tutoriel.
Il n'est pas obligatoire de toutes les implémenter, mais une au moins est nécessaire.
Dans le cas de notre exercice, nous cherchons simplement à charger la page hello.htm, et
aucun paramètre n'est pour l'instant pris en compte : c'est donc la méthode GET qui sera
utilisée.
Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected]
Les Servlets
La ligne 20 indique le type de réponse à renvoyer : dans notre cas, c'est une page HTML.
A la ligne 21, nous créeons un objet de type PrintWriter qui nous permettra d'écrire dans la
page HTML à renvoyer.
Enfin, les lignes 23 à 25 correspondent au contenu de cette page. Ici, c'est une page
simplissime, contenant une simple ligne de texte :
Bonjour tout le monde!
Lier la servlet à une url
L'application Web est configurée à l'aide du fichier web.xml présent dans le répertoire
/WebContent/WEB-INF. Il contient la description de chaque Servlet, ainsi que les liens existants
entre Servlets et URL.
Dans le cas de notre programme, nous avons créé une nouvelle Servlet nommée
HelloWorld.java, que nous voulions lier à l'url hello.htm. Le fichier web.xml correspondant est
donc celui-ci :
xmlns="http://java.sun.com/xml/ns/javaee"
Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected]
Les Servlets
xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee
http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"
id="WebApp_ID" version="2.5">
HelloWorld V1
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
HelloWorld
fr.mistra.helloworld.servlets.HelloWorld
HelloWorld
Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected]
Les Servlets
/hello.htm
Les lignes 1 à 14 sont celles écrites par défaut lors de la création du projet : elles indiquent,
entre autres, quelles URLs sont susceptibles d'être reconnues comme URL par défaut lors du
chargement du contexte de HelloWorld_V1. Si l'une des pages listées existe dans le répertoire
WEB-INF, elle sera chargée lorsque le n avigateur client demandera à charger la
page http://localhost:8080/HelloWorld_V1/
Les lignes 16 à 19 décrivent la Servlet que nous venons de créer : son nom est HelloWorld et le
fichier .class généré lors de la compilation du programme se trouve à
l'emplacement fr.mistra.helloworld.servlets.HelloWorld
Aux lignes 20 à 23, nous trouvons un mapping de Servlet, c'est-à-dire un lien entre une Servlet
et une URL. Dans notre cas, la Servlet nommée HelloWorld sera liée à
l'URL http://localhost:8080/HelloWorld_V1/hello.htm
Afin que Tomcat prenne en compte les modifications faites sur le fichier web.xml, redémarrons
le serveur en cliquant droit sur le serveur dans l'onglet Serveur et en choisissant la
ligne Restart. Notez qu'il faudra effectuer ce redémarrage chaque fois que vous modifierez le
fichier web.xml.
Charger la page hello.htm
Pour tester le programme Hello World maintenant terminé, lancez le navigateur de votre choix
Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected]
Les Servlets
et tapez ensuite l'url :
http://localhost:8080/HelloWorld_V1/hello.htm
Vous devriez obtenir une page Web contenant le texte "Bonjour tout le monde" semblable à
celle-ci :
Nous savons désormais comment créer une page Web à l'aide d'un programme Java et des
Servlets. Voyons maintenant comment gérer des paramètres, en passant par la méthode GET.
La méthode POST sera vue dans les prochains chapitres.
Requête GET et paramètres
Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected]
Les Servlets
Reprenons ce programme et modifions-le pour qu'il prenne en compte un paramètre envoyé par
une requête GTTP de type GET et affiche la valeur de ce paramètre.
Pour ce faire, nous allons reprendre le code de la Servlet HelloWorld que nous avions
précédemment écrite et modifier la méthode doGet. Elle aura désormais le comportement
suivant:
si un paramètre "nom" est passé dans l'url, la page Web affichera "Bonjour nom-saisi!"
sinon, la page Web affichera le message "Il manque le paramètre nom!"
Pour ce faire, nous modifions la classe HelloWorld.java comme indiqué aux lignes :
package fr.mistra.helloworld.servlets;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
public class HelloWorld extends HttpServlet{
private static final long serialVersionUID = 1L;
Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected]
Les Servlets
public void doGet(HttpServletRequest request, HttpServletResponse response) throws
ServletException, IOException {
response.setContentType("text/html");
PrintWriter out = response.getWriter();
// On récupère le nom passé en paramètre dans l'URL
String nomSaisi = request.getParameter("nom");
out.println("");
if (nomSaisi == null)
out.println("Il manque le paramètre nom!");
else
out.println("Bonjour " + nomSaisi + "!");
out.println("");
}
}
Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected]
Les Servlets
A la ligne 19, la méthode getParameter() renvoie la valeur du paramètre dont le nom est donné
en attribut.
Dans notre navigateur, testons les URLs suivantes:
1.
2.
3.
4.
http://localhost:8080/HelloWorld_V1/hello.htm
http://localhost:8080/HelloWorld_V1/hello.htm?nom=Mistra
http://localhost:8080/HelloWorld_V1/hello.htm?nom=Michel
http://localhost:8080/HelloWorld_V1/hello.htm?name=Mistra
Les tests 1 et 4 doivent afficher le message d'erreur, alors que les tests 2 et 3 doivent afficher
respectivement "Bonjour Mistra!" et "Bonjour Michel!".
.
Mistra Formation - 19 rue Béranger 75003 Paris - Métro République - 01 82 52 25 25 - [email protected]
Powered by TCPDF (www.tcpdf.org)

Documents pareils

TP 5 JSTL, MVC - LRDE

TP 5 JSTL, MVC - LRDE un contact, rechercher un contact, modifier un contact, ...). Cette application doit être conforme au design pattern MVC (i.e, des JSPs pour les vues, une Servlet comme contrôleur et des classes Ja...

Plus en détail

Développement Web

Développement Web "http://java.sun.com/dtd/web-app 2 3.dtd"> bonjour HelloWorld bonjour Plus en détail

SERVLET TP 1 Installation du JDK Installation de Glassfish

SERVLET TP 1 Installation du JDK Installation de Glassfish you want to distribute the web module. You package a web module into a WAR by executing the jar command in a directory laid out in the format of a web module, by using the Ant utility, or by using ...

Plus en détail

Les servlets

Les servlets La classe GenericServlet implémente l'interface ServletConfig une méthode log() standard pour envoyer des informations dans le journal du conteneur objet RequestDispatcher pour le transfert du trai...

Plus en détail