Vous êtes sur la page 1sur 40

Java pour le développement

d’application Web : Java EE


Les Servlets
Partie 1

Mastère GLDRA
Par Chiheb Chaieb
chaieb.chiheb@gmail.com
1- Qu’est ce qu’une Servlet ? (1/6)

• Servlet : Server-side applet

• Une Servlet est un composant Web du coté serveur Web :


– Un programme Java compilé (.class) s’exécutant par un serveur
web dédié invoqué à travers une URL.
2. Servlets Java

– Permet d’étendre les possibilités d’un serveur Web :


• Permet de créer dynamiquement des données au sein d'un serveur HTTP.
présentées au format HTML (aussi XML).
• Permet l'extension des fonctions de ce dernier, typiquement :
accès à des bases de données, transactions etc.
– C’est une classe Java exécutée sur un serveur multi-threadé (comme un
serveur Web)
• Elle est compilée sous forme de byte-code, (exécutée par une JVM)
• Elle est mise en œuvre et gérée par un conteneur Web (Apache Tomcat
, Websphere (IBM) , GlassFish (SUN), Jboss …)

29/09/2016 2
2- Servlet

• Avantage Servlet:
– inhérents à Java :
• JSDK ou JDK gratuit et portable
• facile à développer,
2. Servlets Java

• meilleures performances,
• client léger,
• Inconvénient Servlet :
– Pas d’interface graphique utilisateur : interface graphique
utilisateur limitée à HTML.

29/09/2016 3
3- Servlet - Caractéristiques

 Une servlet est chargée lors de la première requête


du client. Une fois chargées, les servlets restent
actives dans l'attente d'autres requêtes du client.
 L'utilisation de servlets se fait par le biais
2. Servlets Java

d'un conteneur de servlets côté serveur. Celui-ci


constitue l'environnement d'exécution de la servlet et
lui permet de persister entre les requêtes des clients :
 Ce serveur d'applications ou ce conteneur web
(Tomcat ) doit utiliser ou inclure un serveur http
(comme Apache) : Apache-Tomcat
 Une servlet peut être invoquée plusieurs fois en même
temps pour répondre à plusieurs requêtes simultanées

29/09/2016 4
3- Servlet - Apports

• Les Servlets sont portables plus efficaces, plus pratiques et


plus puissantes :
– indépendance des OS, c’est du Java !,
– indépendance des serveurs web (Apache, Microsoft IIS, WebStar, etc.),
2. Servlets Java

– efficacité (connexion multi-threads avec les utilisateurs, un seul chargement,


permanence en mémoire),
– super API ( Application Programming Interface) pour gérer les formulaires
HTML,
– dialogue possible avec des applications clientes via l’utilisation d ’un
protocole à objets distribués RMI,
– gestion des sessions,
– faible coût : kit de développement des Servlets gratuit (Apache/Tomcat reste
la solution la plus efficace... 100% gratuite).

29/09/2016 5
4- Architecture Servlet (1/2)
2. Servlets Java

Threads
Les Servlets peuvent
être toutes gérées par
des threads séparés
29/09/2016 dans la JVM 6
4- Le Fonctionnement d'une Servlet (cas d'utilisation de http) 2/2

 Un serveur d'applications permet de charger et d'exécuter les servlets


dans une JVM. Il contient un moteur de servlets qui se charge de leur
management.
 Le serveur reçoit du navigateur la requête http qui a recours à une servlet
Si c'est sa première sollicitation, le serveur l'instancie. Les servlets sont
stockées dans un répertoire particulier du serveur.
 La servlet reste en mémoire jusqu'à l'arrêt du serveur. Au fil des requêtes,
la servlet peut être appelée par plusieurs threads lancés par le serveur. Ce
principe de fonctionnement évite d'instancier un objet de type servlet à
chaque requête et permet de maintenir un ensemble de ressources actives
telles qu'une connexion à une base de données.
 Le serveur crée un objet qui représente la requête http ainsi que l'objet
qui contiendra la réponse et les envoie à la servlet.
 La servlet crée dynamiquement la réponse sous forme de page html
transmise via un flux dans l'objet contenant la réponse.
 Le serveur récupère l'objet réponse et envoie la page html au client.

29/09/2016 7
3- Mais à quoi ça sert ?

Créer des pages HTML dynamiques, générer des


images, ...
 Effectuer des tâches de type CGI qui sont des
2. Servlets Java

traitements applicatifs coté serveur WEB


 Manipulation d’une base de données
 Gestion d’un système de surveillance, ...
 Respecter les principes d’une architecture : écrire
une application en Java dont l’interface utilisateur est
dans le client
 Applet (SWING)
 Téléphone portable (WAP)
 Navigateur (HTML)

29/09/2016 8
5- L’API Servlet (1/5)

• L’API Servlet fournit un certain nombre


de classes et d’interfaces permettant :
– le développement des Servlets, MapremièreServlet.java
– leur déploiement, import javax.servlet.*
2. Servlets Java

– et leur mise en œuvre au sein du import javax.servlet.http.*


conteneur Web. public class MaServlet
extends HttpServlet {
• L’API Servlet est contenue ……………..
principalement dans deux packages :
……………….
– javax.servlet
– javax.servlet.http ……………….
}

29/09/2016 9
5- L’API Servlet (2/5)

• Le package javax.servlet :
– Contient les classes pour un support des Servlets génériques et
indépendant du protocole.
2. Servlets Java

• Le package javax.servlet.http :
– Contient des extensions des classes du package javax.servlet.
• Ces extensions consistent à ajouter des fonctionnalités spécifiques au protocole
HTTP.

• Le nom du package le plus haut « javax » au lieu du « java » plus


familier, indique que l’API Servlet est une extension standard.

29/09/2016 10
5- L’API Servlet (3/5)

Chaque Servlet utilisateur doit implémenter l’interface javax.servlet.Servlet


soit directement soit par l’extension de la classe spéciale
javax.servlet.GenericServlet ou javax.servlet.http.HttpServlet.
2. Servlets Java

javax.servlet.Servlet

Servlet interface

Généralisation
javax.servlet.GenericServlet
Spécification

GenericServlet classe abstraite

javax.servlet.HttpServlet

HttpServlet classe abstraite

MapremiereServlet classe définie par l ’utilisateur


29/09/2016 11
5- L’API Servlet :du générique à l’HTTP(3/5)
2. Servlets Java

29/09/2016 12
5- L’API Servlet (4/5)

• L’interface javax.servlet.Servlet possède les


méthodes :
– init( ) :
2. Servlets Java

• pour initialiser la Servlet.


– Service ( ) :
• pour recevoir et répondre aux requêtes des clients.
– destroy()
• détruire la servlet et ses ressources.

• Ces 3 méthodes sont tous héritées donc par une


Servlet utilisateur.
29/09/2016 13
5- L’API Servlet (5/5)

• Une Servlet utilisateur peut implémenter l’interface


javax.servlet.Servlet directement
public class MapremiereServlet implements Servlet {
….
2. Servlets Java

• Une Servlet utilisateur indépendante du protocole devait


être une sous classe de GenericServlet
public class MapremiereServlet extends GenericServlet {
….

• Une Servlet Http devait être une sous classe de HttpServlet.


public class MapremiereServlet extends HttpServlet {
….

29/09/2016 14
6- Modèle de programmations (1/3)

• Une Servlet suit un modèle de programmation


requête-service-réponse.
– A la place d’une méthode main( ), elle possède une méthode
service( ) qui sera invoquée automatiquement à chaque fois que
2. Servlets Java

la Servlet reçoit une requête par le serveur.


– La méthode service(objet1, objet2 ) accepte deux paramètres et
permet de recevoir et de répondre aux requêtes des clients :
• Un objet1: javax.servlet.ServletRequest
– contient les informations nécessaires pour une
communication du client vers le serveur (Requête).
• Un objet2: javax.servlet.ServletResponse
– contient les informations nécessaires pour une
communication du serveur vers le client (Réponse).

29/09/2016 15
6- Modèle de programmations (2/3)

• Dans la suite du cours nous utilisons uniquement des


Servlets http (Classe HttpServlet).
• Une Servlet Http définit (implémente) la méthode service().
2. Servlets Java

– Cette méthode service() de la classe mère est remplacée


avantageusement par 2 méthodes ayant la même signature :
• doGet() : pour traiter des requêtes Http de type GET
• doPost() : pour traiter des requêtes Http de type POST

– Une Servlet Http doit obligatoirement contenir l’une ou l’autre de ces


2 méthodes.
– La méthode service() de HttpServlet n’est pas surcharger mais elle
prend en charge l’appel automatique de la bonne méthode doXXX()
en fonction du type de requêtes.
29/09/2016 16
6- Modèle de programmations (4/4)

Modèle de programmation requête-service-réponse


pour une Servlet Http
2. Servlets Java

Requête GET
doGet( )

Service(…, …)
Réponse
Serveur

Requête POST Web


doPost( )
Réponse

Notre objectif

29/09/2016 17
7- Modèles d’implémentation d’une
Servlet Http (1/3)

Hello.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
2. Servlets Java

public class Hello extends HttpServlet{


public void doGet(HttpServletRequest req,
HttpServletResponse res)
throws ServletException, IOException {
res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<HTML>");
out.println("<HEAD> <TITLE>Hello</TITLE> </HEAD>" );
out.println("<BODY>");
out.println("<H1>Hello Iset</H1>" );
out.println("<BODY> </HTML>");
} }
29/09/2016 18
7- Modèles d’implémentation d’une
Servlet Http (2/3)

• Sans les imports nécessaires le compilateur javac ne peut pas compiler la


classe Hello.java.
– L’exception ServletException est définie dans le paquetage javax.servlet.*;
– L’exception IOException est définie dans le paquetage javax.io;
2. Servlets Java

– Les objets HttpServletRequest, HttpServletResponse utilisés comme


paramètres des méthodes doGet() ou doPost sont définies dans le
paquetage javax.servlet.http.*;
• ServletException, IOException sont des déclaration d’exceptions levées mais
non traitées.
• L’instruction res.setContentType("text/html") initialise l’objet res qui est de type
HttpServletResponse comme étant une réponse de type « text/html ».
• L’objet PrintWriter permet à une Servlet Http de construire la page HTML
destinée à l’utilisateur.
– L’instruction « printWriter out = res.getWriter() » permet de retrouver un flux
de sortie « out » (un printWriter) à travers l’objet res pour envoyer le
29/09/2016 19
message « Hello Iset » au client.
7- Modèles d’implémentation d’une
Servlet Http (3/3)

 Deux principales méthodes sont fournies pour traiter les les


requêtes GET ou POST.
 doPost(…) est la méthode pour traiter les requêtes de
type POST
2. Servlets Java

 doGet(…) est la méthode pour traiter les requêtes de


type GET
 Elles sont appelées méthodes de traitement de requêtes
 D’autres méthodes disponibles pour autres types de
requete :
doHead(…),
doTrace(…), …
 Selon le type de requête (GET ou POST) le concepteur
redéfinit la méthode abstraite concernée. Nous utilisons
doPost et le doGet.
29/09/2016 20
8- Déclaration d’une Servlet au sein
d’une application Web (1/3)

Web.xml
<web-app>
<servlet>
<servlet-name>Hello</servlet-name>
La déclaration d’une
2. Servlets Java

<servlet-class>Hello</servlet-class>
<init-param> Servlet dans une
< param-name> …….. </param-name> application Web se
< param-value> …….. </param-value> fait dans le
</init-param>
descripteur de
</servlet> déploiement
<servlet-mapping>
«web.xml». V2.5 et -
<servlet-name>Hello</servlet-name>
<url-pattern>/servlet/Hello</url-pattern>
</servlet-mapping>
</web-app>
29/09/2016 21
8- Déclaration d’une Servlet au sein
d’une application Web (2/3)

• <web-app> ……. </web-app>:


– encapsule l’ensemble des éléments servant à la configuration de
l’application Web.
• <servlet> ……… </servlet>:
2. Servlets Java

– encapsule l’ensemble des éléments servant à la configuration de


chaque Servlet.
• <servlet-name> ………… </servlet-name>:
– contient une chaîne de caractère identifiant la Servlet au sein de
l’application web.

29/09/2016 22
9- HttpServlet : requête et réponse (1/6)

 Les méthodes de traitement de requêtes (doPost () , doGet () ..) utilisent


deux objets : un objet requête et un objet réponse
public class hello extends HttpServlet {
public void doGet (HttpServletRequest req, HttpServletResponse rep ) throws ..
2. Servlets Java

{…
…}
public void doPost (HttpServletRequest req, HttpServletResponse rep ) throws ..
{…
….}

Objet Request :
 HttpServletRequest hérite de ServletRequest
 Cet objet encapsule la requête HTTP et fournit des méthodes pour
accéder aux informations du client de l'environnement du serveur
29/09/2016 23
9- HttpServlet : requête et réponse (2/6)

Exemples de méthodes de request :

 String getMethod() : retourne le type de requête


 String getServerName() : retourne le nom du serveur
2. Servlets Java

 String getParameter(String name) : retourne la valeur d'un


paramètre
 String[] getParameterNames() : retourne le nom des les
paramètres
 String getRemoteHost() : retourne l'IP du client
 String getServerPort() : retourne le port sur lequel le serveur
écoute .
Void Request.Dispatcher (String Url) : redirection vers une page
 String getQueryString() : retourne la chaîne d’interrogation
 … (voir l'API Servlets pour le reste)
29/09/2016 24
9- HttpServlet : requête et réponse (2/6)

Exemples de méthodes de request :



2. Servlets Java

29/09/2016 25
9- HttpServlet : request (3/6)

Exemples de Servlet qui affiche un certain nombre


d’informations issuse de HttpServletRequest
public class InfosServlet extends HttpServlet {
public void doGet(HttpServletRequest request, HttpServletResponse
2. Servlets Java

response) throws ServletException, IOException {


response.setContentType("text/html");
PrintWriter out= response.getWriter();
out.println("Protocol: " + request.getProtocol());
out.println("Scheme: " + request.getScheme());
out.println("ServerName: " + request.getServerName());
out.println("ServerPort: " + request.getServerPort());
out.println("RemoteAddr: " + request.getRemoteAddr());
out.println("RemoteHost: " + request.getRemoteHost());
out.println("Method: " + request.getMethod());

29/09/2016 26
9- HttpServlet : response (4/6)

 HttpServletResponse hérite de ServletResponse


 Cet objet est utilisé pour construire un message de réponse
HTTP renvoyé au client, il contient :
 les méthodes nécessaires pour définir le type de contenu, en-tête
2. Servlets Java

et code de retour
 un flot de sortie pour envoyer des données (par exemple HTML)
au client
 Exemples de méthodes
 void setStatus(int) : définit le code de retour de la réponse
 void setContentType(String) : définit le type de contenu MIME
 ServletOutputStream getOutputStream() : flot pour envoyer des
données binaires au client
 void sendRedirect(String) : redirige le navigateur vers l'URL
 void setHeader ("Refresh", "n") : Indique au client de recharger la même
Servlet après avoir affiché son contenu courant pendant n seconde.

29/09/2016 27
9- HttpServlet : response (5/6)

Exemple 1 : écrit un message de type TEXT au client


 Utilisation de la méthode PrintWriter getWriter()
public class HelloWorldPrintWriter extends HttpServlet {
public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
2. Servlets Java

res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<html> <head><title>Ma servlet response
</title></head> <body>");
out.println("Premier Message");
out.println(" GLDRA voilà comment écrire un message");
out.println("Second Message");
}
}

29/09/2016 28
9- HttpServlet : response (6/6)

 response.sendRedirect (String) : effectue une redirection


vers un site web .
Exemple : servlet redirige l’user vers l’un ou l’autre site selon un
contexte donné :
public class SendRedirect extends HttpServlet {
2. Servlets Java

public void doGet(HttpServletRequest req, HttpServletResponse resp)


throws ServletException, IOException {
If (…)
resp.sendRedirect(« www.Mes.rnu.tn »
Else
resp. sendRedirect(«www.edunet.rnu.tn » );
}}

29/09/2016 29
9- HttpServlet Response : Application (6/6)

Exercice 1 : Mise à Jour de l’heure courante à chaque refresh de la


page (refresh toute les 5 secondes) : out.println(new Date().toString());
Exercice 2 : Refresh de la page chaque 5 secondes (au max dix fois) +
affichage d’une nouvelle image chargée depuis le serveur.
2. Servlets Java

Exercice 3 : Télécharger sur le poste client un fichier depuis le serveur


Indication :
InputStream fileServer = new FileInputstream («chemin /toto.txt »); //
le fichier à télécharger
outputTsream out = resp.getOutputStream(); // création flus de sortie
resp.setHeader (“Content-Disposition”, “attachment:filename=toto.txt”);
byte buf[] = new byte[4096];
while ((count=fileServer.read(buf)) > -1 )
out.write(buf,0,count);

29/09/2016 30
10- Servlets et formulaires : du côté
HTML

Utilisation de la balise <FORM> </FORM>


 Option METHOD : type de requête GET ou POST
 Option ACTION : l’URL où envoyer les données
 Utilisation de composants IHM pour saisir des informations Contenu à
l’intérieur de la balise FORM
2. Servlets Java

 Chaque composant est défini au moyen d’une balise particulière


SELECT, INPUT, TEXTAREA, …
 A l’intérieur de chaque balise du composant (SELECT par exemple)
plusieurs options et notamment une (NAME) qui permet d’identifier le
composant : NAME="mon_composant"
 Les données sont envoyées quand l’utilisateur clique sur un bouton
de type SUBMIT
29/09/2016 31
10- Servlets et formulaires : du côté
HTML

• Invocation de la méthode doPost(…) :


Index.html
<HTML>
2. Servlets Java

<HEAD>
<TITLE> Test de la servlet Hello </TITLE> Le formulaire
</HEAD> appelle la servlet
avec la requête post
<BODY>
<FORM action = " Hello " method ="post">
<P>
Prenom : <INPUT type ="text" name="prenom">
<BR>

Nom : <INPUT type ="text" name="nom">


<BR>

<INPUT type ="submit" value="Valider">


</P>

</FORM>
</BODY>
</HTML>
29/09/2016 32
10- Servlets et formulaires : du côté
HTML

• Invocation de la méthode doPost(…) :


Hello.java
import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
2. Servlets Java

public class Hello extends HttpServlet{


public void doPost(HttpServletRequest req, HttpServletResponse
res)
throws ServletException, IOException {

String prenom = req.getParameter("prenom");


String nom = req.getParameter("nom");

res.setContentType("text/html");
PrintWriter out = res.getWriter();
out.println("<HTML><BODY>");
out.println("<H1>Bonjour" +prenom+" "+ nom+"."+ "</H1>" );
out.println("</HTML><BODY> ");
}
29/09/2016 } 33
10- Servlets et formulaires : du côté
HTML

Exemple Form avec doGet:


<body>
<p>Formulaire de satisfaction du cours Servlet/JSP </p>
<form method="get" action=“......">
<p>
2. Servlets Java

Nom : <input type="text" name="nom">


Prénom : <input type="text" name="prenom">
</p>
<p>
Sexe :
<input type="radio" name="radio1" value= " Lui" checked>masculin
<input type="radio" name="radio1" value= " Elle">féminin
</p>
<p>Commentaire :<br>
<textarea name="textarea" cols="50" rows="10"> </textarea><br>
<input type="submit" name="Submit“ value="Soumettre“></form>
29/09/2016 34
10- Servlets et formulaires : du côté
HTML

Exercice 1 :
Développer la servlet qui exécutée par le formulaire précédent et qui affiche :
Nom : Ben Zaied
Prénom : Ali
2. Servlets Java

Sexe : Homme, il a écrit : « commentaire … »


Exercice 2 : Calcul Surface et périmètre d’un Rectangle
* soit la page Html qui comporte un formulaire pour la saisie des longueur
et la largeur d’un rectangle (ou le rayon d’un cercle) en utilisant la
méthode Post.
* L’envoi du formulaire appelle une sevlet CalculSurface qui calcule et
affiche la surface du rectangle/cercle.
Exercice 3 :
Formulaire pour le choix d’un article depuis une liste déroulante, le PU est
envoyé avec le code Tva (3 boutons 10%, 18% ou 25%) , calcul du prix
net par la servlet Calcprix. 35
29/09/2016
Help pour la Correction
// doGet(request,response); pour travailler avec doGet , même le form est
envoyé avec Post
int n;
double prix, tva;
// récupérer ls données depuis request
prix=Double.parseDouble(request.getParameter("prix"));
tva=Double.parseDouble(request.getParameter("tva"));
// préparer le flus de sortie
PrintWriter out= response.getWriter();
n=Integer.parseInt(request.getParameter("nombre"));
out.println ("<b> Prix TTC = "+prix*(1+tva));
out.println ("<p><b> Nombre pour tester ParseInt = "+n);

29/09/2016 36
QuiZ
• Quels sont les éléments logiciels constitutifs nécessaires
à la réalisation et l'exécution d'une application web/JEE
serveur HTTP, serveur d'applications, conteneur JSP,
conteneur servlet, plate forme J2EE
• Quelle est la différence entre les GET et POST?
Les paramètres transmis par la commande GET sont
visibles dans le navigateur et ont une taille limitée à 240 C
• Par quelle méthode de servlet est traitée une
commande GET du protocole HTTP ? Donner
sa signature
doGet(HttpServletRequest,HttpServletResponse)
29/09/2016 37
QuiZ

• De quel type est l'objet fourni par une servlet qui porte la
réponse au client ?
HttpServletResponse
• De quel type est le flot de sortie sur lequel est écrit le
code de la page HTML retournée au client ?
PrintWriter
• A quoi sert le fichier web.xml ? Quelles informations y
trouve-t-on ?
Permet de déployer l'application sur une plate forme
d'exécution. On peut spécifier les servlets par un nom et
une URL, définir un contexte pour l'application, définir
des pages d'erreur, des caractéristiques de session, ...
29/09/2016 38
QuiZ
• Quelles balises doivent-elles être introduites dans un
fichier web.xml pour qu'une servlet (contenue dans le
fichier Hello.java du package servlets) soit initialisée
avec des paramètres (année et mot) ayant
respectivement les valeurs "2009" et "world" ?
<servlet>
<servlet-name>Hello</servlet-name>
<servlet-class>servlets.Hello</servlet-class>
<init-param>
<param-name>annee</param-name>
<param-value>2009</param-value> </init-param>
<init-param>
<param-name>mot</param-name>
<param-value>world</param-value> </init-param> </servlet>
29/09/2016 39
Fin Partie I

29/09/2016 40

Vous aimerez peut-être aussi