0% ont trouvé ce document utile (0 vote)
15 vues67 pages

Servlets Java : Guide Complet et Comparaison

Transféré par

sichinounou
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPT, PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
15 vues67 pages

Servlets Java : Guide Complet et Comparaison

Transféré par

sichinounou
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PPT, PDF, TXT ou lisez en ligne sur Scribd

Programmation d’Application

Web avec Java

Walid MAHDI
[Link]@[Link]

MAHDI Walid
© Université de Sfax, 2004-2005
Application Web en Java ISIMS 2004 1
- 2005
Chapitre

2
Servlets java
( Le dessous cachés du JSP)

MAHDI Walid Application Web en Java ISIMS 2004 2


- 2005
1- Qu’est ce qu’une Servlet ? (1/6)

Servlet : Server-side applet

Une Servelt est un composant Web du coté serveur


Web :
2. Servlets Java

Qui permet d’étendre les possibilités d’un serveur Web.


Possibilité de générer du contenu dynamique en réponse à des
requêtes clients.

Un peu comme les scripts CGI (Common Gateway Interface).

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,
Elle est exécutée par une machine virtuelle Java (JVM).

Elle est mise en œuvre est gérée par un conteneur Web


MAHDI Walid (Tomcat par exemple).
Application Web en Java ISIMS 2004 3
- 2005
2- Servlet vs. Applet (1/2)

Applets :
Interface graphique utilisateur,
Nécessite un browser adéquat,
Traitements sur le client (Client lourd),
2. Servlets Java

Limites de services dues aux problèmes de sécurité.

Servlets
pas d’interface graphique utilisateur (Langage HTML),
pas de limitations de sécurité :
possibilité d’établissement de connexions avec d ’autres
machines que le serveur (utilisation comme pont JDBC-ODBC ),
possibilité d’appels systèmes (JDBC)
manipulation de ressources locales du serveur
MAHDI Walid Application Web en Java ISIMS 2004 4
- 2005
2- Servlet vs. Applet (2/2)

Avantage Servlet:
inhérents à Java :
JSDK ou JDK1.2 gratuit et portable
2. Servlets Java

par rapport aux Applets :


plus facile à développer,
meilleures performances,
client léger ,

Inconvénient Servlet :
interface graphique utilisateur limitée à HTML.

MAHDI Walid Application Web en Java ISIMS 2004 5


- 2005
3- Servlet vs. CGI (1/2)

Principe CGI :
Un processus par requête est lancé sur le serveur.

Avantages CGI :
2. Servlets Java

Gratuit, pris en charge par tous les serveurs Web


actuels,
Peut être écrit dans n'importe quel langage (C, perl).

Inconvénients CGI :
Manque d évolutivité (plusieurs processus créés),
Serveur très sollicité si plusieurs requêtes au même
moment,
MAHDI Walid
- 2005 Assez lent et parfois difficile à développer.
Application Web en Java ISIMS 2004 6
3- Servlet vs. CGI (2/2)

Les Servlets sont portable plus efficaces, plus


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

etc.),
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 applets situées sur le client (utilisation


d ’un protocole à objets distribués RMI),

gestion des sessions,


faible coût : kit de développement des Servlets gratuit
MAHDI Walid (Apache/Tomcat reste Application
la solution Web en Java la plus efficace... 100% gratuite).
ISIMS 2004 7
- 2005
4- L’API Servlet (1/5)

L’API Servlet fournit un certain


nombre de classes et
d’interfaces permettant : Mapremiè[Link]
le développement des Servlets, import [Link].*
2. Servlets Java

import
leur déploiement, [Link].*

et leur mise en œuvre au sein public class ……………{


du conteneur Web. ……………..
……………….
L’API Servlet est contenue ……………….
principalement dans deux }
packages :
[Link]
[Link]
MAHDI Walid Application Web en Java ISIMS 2004 8
- 2005
4- L’API Servlet (2/5)

Le package [Link] :
Contient les classes pour un support des Servlets
génériques et indépendant du protocole.
2. Servlets Java

Le package [Link] :
Contient des extensions des classes du package
[Link].
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.
MAHDI Walid Application Web en Java 9 ISIMS 2004
- 2005
4- L’API Servlet (3/5)

Chaque Servlet utilisateur doit implémenter l’interface


[Link] soit directement soit par l’extension de la
classe spéciale [Link] ou
[Link].
2. Servlets Java

[Link]

Servlet
Servlet interface

Généralisation
[Link]
Spécification

vlet
GenericServlet
GenericServlet classe abstraite

[Link]
HttpServlet
HttpServlet classe abstraite

MapremiereServlet classe définie par


l ’utilisateur
MAHDI Walid Application Web en Java ISIMS 2004 10
- 2005
4- L’API Servlet (4/5)

L’interface [Link] 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.
MAHDI Walid Application Web en Java ISIMS 2004 11
- 2005
4- L’API Servlet (5/5)

Une Servlet utilisateur peut implémenter l’interface


[Link] 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 {
MAHDI Walid
…. Application Web en Java ISIMS 2004 12
- 2005
5- Modèle de programmations (1/4)

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 invoquer automatiquement à chaque fois
2. Servlets Java

que 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: [Link]

contient les informations nécessaires pour une communication du


client vers le serveur (Requête).
Un objet2: [Link]

contient les informations nécessaires pour une communication du


13
MAHDI Walid
- 2005 serveur vers le client (Réponse).
Application Web en Java ISIMS 2004
5- Modèle de programmations (2/4)

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


pour une Servlet Générique
2. Servlets Java

Requêt
e Serveu Service(…, …)
r
Réponse

Une Servlet générique doit surcharger sa méthode


service(ServletRequest obj1, ServletResponse obj2).

MAHDI Walid Application Web en Java ISIMS 2004 14


- 2005
5- Modèle de programmations (3/4)

Une Servlet Http ne surcharge pas la méthode


service().
Cette méthode service() de la classe mère est remplacée
avantageusement par 2 méthodes ayant la même signature
2. Servlets Java

:
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’appelle automatique de la
bonne méthode doXXX() en fonction du type de requêtes.15
MAHDI Walid Application Web en Java ISIMS 2004
- 2005
5- 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

Service(…, …)
doGet( )
Réponse
Serveur

Requête POST Web


doPost(
Réponse
)

Notre objectif

MAHDI Walid Application Web en Java ISIMS 2004 16


- 2005
6- Cycle de vie d’une Servlet HTTP

Instanciation et
chargement

Initialisation
invocation de
2. Servlets Java

Le conteneur
L’instance Web
de la Servlet la méthode
exécute
Lereste
La classel’instance
en
conteneur mémoire
Java Web de
de la init()
lajusqu’à
Servlet
Servletuneest
initialise
crée la dans
l’arrêt duun
déployée
instance
Servlet de
en
Classe de au serveur.
contexte
la La
seinutilisant
classede de méthode
multitâche.
conteneur
Servlet Requêtes clients
Servlet destory()
Chaque est ainsi
thread
et Web
éventuellement
la charge enle
invoquée
invoque indiquant
la méthode que En service
fichier
mémoire.
[Link].
la Servlet n’est plus en
service() qui s’occupe invocation de
L’initialisation se
service et l’instance de fait la méthode
Destruction d’exécuter
une seul
la Servlet la
fois.
est supprimée service()
invocation de méthode doGet() ou .
la méthode par le garbage collector
destory() doPost().
Arrêt du serveur
puis finalize()

MAHDI Walid Application Web en Java ISIMS 2004 17


- 2005
7- Modèles d’implémentation d’une
Servlet Http (1/3)

[Link]
import [Link].*;
import [Link].*;
import [Link].*;
2. Servlets Java

public class Hello extends HttpServlet{


public void doGet(HttpServletRequest req, HttpServletResponse res)
throws ServletException, IOException {
[Link]("text/html");
PrintWriter out = [Link]();
[Link]("<HTML>");
[Link]("<HEAD> <TITLE>Hello</TITLE> </HEAD>" );
[Link]("<BODY>");
[Link]("<H1>Hello Isimsien</H1>" );
[Link]("<BODY> </HTML>");
}
}
MAHDI Walid Application Web en Java ISIMS 2004 18
- 2005
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 [Link].
L’exception ServletException est définie dans le paquetage
[Link].*;
2. Servlets Java

L’exception IOException est définie dans le paquetage


[Link];

Les objets HttpServletRequest, HttpServletResponse utilisés


comme paramètres des méthodes doGet() ou doPost sont
définies dans le paquetage [Link].*;

ServletException, IOException sont des déclaration


19
d’exceptions levées mais non traitées.
MAHDI Walid
- 2005
Application Web en Java ISIMS 2004
7- Modèles d’implémentation d’une
Servlet Http (3/3)

L’instruction [Link]("text/html")
initialise l’objet res qui est de type
HttpServletResponse comme étant une réponse de
type « texte/html », le type MIME standard pour le
2. Servlets Java

contenu de pages HTML.


Exemples de types MIM image/gif, image/jpeg,
text/html, text/plain, text/*, */*.

L’objet PrintWriter permet à une Servlet Http de


construire la page HTML destinée à l’utilisateur.
L’instruction « printWriter out = [Link]() » permet de
retrouver un flux de sortie « out » (un printWriter) à travers
l’objet res pour envoyer le message « HelloIsimsien » au
MAHDI Walid Application Web en Java ISIMS 2004 20
- 2005 client.
8- Déclaration d’une Servlet au sein
d’une application Web (1/5)

[Link]
<web-app>
<servlet>
<servlet-name>……..</servlet-name>
La déclaration
2. Servlets Java

<servlet-class>……..</servlet-class>
<init-param> d’une Servlet dans
< param-name> …….. </param-name> une application
< param-value> …….. </param-value>
</init-param>
Web se fait dans le
descripteur de
</servlet> déploiement
<servlet-mapping> «[Link]».
<servlet-name>…….</servlet-name>
<url-pattern>/servlet/…….</url-pattern>
</servlet-mapping>

</web-app>
MAHDI Walid Application Web en Java ISIMS 2004 21
- 2005
8- Déclaration d’une Servlet au sein
d’une application Web (2/5)

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


encapsule l’ensemble des éléments servant à la
configuration de l’application Web.
2. Servlets Java

<servlet> ……… </servlet>:


encapsule l’ensemble des éléments servant à la
configuration de chaque Servlet.

<servlet-name> ………… </servlet-name>:


contient une chaîne de caractère identifian la Servlet
au sein de l’application web.
MAHDI Walid Application Web en Java ISIMS 2004 22
- 2005
8- Déclaration d’une Servlet au sein
d’une application Web (3/5)

<servlet-class> ………… </servlet-class>:


contient le nom complet de la classe de Servlet
(package compris).
2. Servlets Java

<init-param> …. </init-param> :
Encapsule les paramètres d’initialisation de la Servlet.
Chaque éléments <init-param> ….. </init-param>
corresspond à un paramètre représenté par une paire
nom/valeur avec les éléments :
<param-name> ….. </param-name>,
<param-value> ….. </param-value>.
MAHDI Walid Application Web en Java ISIMS 2004 23
- 2005
8- Déclaration d’une Servlet au sein
d’une application Web (4/5)

<servlet-mapping> ………… </servlet-mapping>:


contient des informations permettant de définir la
relation entre les URL et les servlets.
2. Servlets Java

<servlet-name> ………… </servlet-name>:


contient une chaîne de caractère identifian la Servlet
au sein de l’application web.

<url-pattern>/servlet/…….</url-pattern>
définit comment une Servlet est invoquée.
MAHDI Walid Application Web en Java ISIMS 2004 24
- 2005
8- Déclaration d’une Servlet au sein
d’une application Web (5/5)

[Link]
<web-app>
2. Servlets Java

<servlet>
<servlet-name>Hello</servlet-name> Déclaration de la
<servlet-class>Hello</servlet-class>
Servlet « Hello »
</servlet>
dans le
<servlet-mapping> descripteur de
<servlet-name>Hello</servlet-name>
déploiement
<url-pattern>/servlet/Hello</url-pattern>
</servlet-mapping> «[Link]»

</web-app>

MAHDI Walid Application Web en Java ISIMS 2004 25


- 2005
9- Invocation d’une Servlet à partir
d’un navigateur Web (1/8)

Invoquer une Servlet c’est utiliser tout d’abord un


conteneur Web (exp : Apache TOMCAT 5.0) pour sa mise
en œuvre.
2. Servlets Java

Déployer la Servlet au sein d’une application Web.


Crée un nouveau dossier nommée MaWebApp dans le
dossier webapps de TOMCAT.
Le dossier MaWebApp doit contenir un sous dossier nommé
Web-INF, qui lui-même contient le descripteur de
déploiement [Link] un sous-dossier nommé classes, qui
contient le fichier compilé [Link] de la Servlet.

Deux possibilités d’invocation d’une Servlet :


invocation de la méthode doGet(…),
invocation de la méthode doPost(..).
MAHDI Walid Application Web en Java ISIMS 2004 26
- 2005
9- Invocation d’une Servlet à partir
d’un navigateur Web (2/8)

1ère Invocation de la méthode doGet(…) :


Saisie de l’URL de la Servlet dans la barre d’adresse du
navigateur.
2. Servlets Java

[Link]

[Link]
Hello

[Link]
Hello

Hello Isimsien

MAHDI Walid Application Web en Java ISIMS 2004 27


- 2005
9- Invocation d’une Servlet à partir
d’un navigateur Web (3/8)

2ième Invocation de la méthode doGet(…):


Clique sur un lien hypertexte qui pointe sur l’URL de la
Servlet.
2. Servlets Java

[Link]
<HTML>
<HEAD>
<TITLE>
Test de la servlet Heloo par clic sur lien Cliquer pour tester la Servlet Hello
</TITLE>
</HEAD>
<BODY>
<P>
<A href="/MaWebApp/servlet/Hello">
Cliquer pour tester la Servlet Hello
</A>
</P>
</BODY>
</HTML> Hello Isimsien

MAHDI Walid Application Web en Java ISIMS 2004 28


- 2005
9- Invocation d’une Servlet à partir
d’un navigateur Web (5/8)

Invocation de la méthode doPost(…) :

La méthode doPost() d’une Servlet est invoquée


2. Servlets Java

principalement lors de l’envoie des données saisies


dans un formulaire HTML (par un clic sur un bouton de
type submit).

Exemple de méthode doPost() qui retourne une chaîne


de caractères concaténée avec les valeurs des
paramètres transmis par le client.

MAHDI Walid Application Web en Java ISIMS 2004 29


- 2005
9- Invocation d’une Servlet à partir
d’un navigateur Web (6/8)

Invocation de la méthode doPost(…) :


[Link] Test de la Servlet Hello
<HTML>
<HEAD>
2. Servlets Java

<TITLE> Test de la servlet Hello </TITLE>


</HEAD>

<BODY> [Link]
<FORM action = "/test/servlet/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>
MAHDI Walid Application Web en Java ISIMS 2004 30
- 2005
9- Invocation d’une Servlet à partir
d’un navigateur Web (7/8)

Invocation de la méthode doPost(…) :


[Link]
import [Link].*;
import [Link].*;
import [Link].*;
2. Servlets Java

public class Hello extends HttpServlet{


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

String prenom = [Link]("prenom");


String nom = [Link]("nom");

[Link]("text/html");
PrintWriter out = [Link]();
[Link]("<HTML><BODY>");
[Link]("<H1>Bonjour" +prenom+" "+ nom+"."+ "</H1>"
);
[Link]("</HTML><BODY> ");
}
}
MAHDI Walid Application Web en Java ISIMS 2004 31
- 2005
9- Invocation d’une Servlet à partir
d’un navigateur Web (8/8)

Invocation de la méthode doPost(…) :

Hello
2. Servlets Java

[Link]

Bonjour Benjamin AUMAILLE

MAHDI Walid Application Web en Java ISIMS 2004 32


- 2005
10- Configuration de Servlet :
Interface ServletConfig

Les informations de configuration d’une Servlet au sein


d’une application Web (non de la Servlet, les
paramètres sous formes de nom/valeur) sont
représentées par un objet de type
2. Servlets Java

[Link].

L’objet [Link] est crée par le


conteneur web pour chaque élément <servlet> déclaré
dans le descripteur de déploiement [Link] de
l’application web.

Les informations de configurations représentées par


l’objet [Link] peuvent ensuite être
récupérées par la Servlet de préférence lors de sa phase
d’initialisation au sein de la redéfinition de la méthode
33
- 2005init(…).
MAHDI Walid Application Web en Java ISIMS 2004
11- Méthodes de l’interface
ServletConfig
Méthodes de l’interface [Link]
dédiées à la récupération des paramètres d’une Servlet:
public String getServletName() :
Récupérer le nom de la Servlet déclaré au sein du descripteur de
2. Servlets Java

déploiement ou le nom de la classe de la Servlet.

public String getInitParameter(String nom) :


Récupérer une chaîne de caractères contenant la valeur d’un
paramètre nommé nom ou la valeur null si le paramètre n’existe pas.

public [Link] getInitParameterNames():


Récupérer sous la forme d’un objet de type [Link]
l’ensemble des noms des paramètres déclarés pour la Servlet.

public ServletContext getServletContext():


Récupérer une référence sur le contexte d’exécution de la Servlet qui
permet d’interagir avec le conteneur web de l’application Web.
MAHDI Walid Application Web en Java ISIMS 2004 34
- 2005
12- Initialisation d’une Servlet :
redéfinition de la méthode init() (1/3)

Syntaxe de la méthode init() :


public void init(ServletConfig config ) throws ServletExeption;
public void init() throws ServletExeption;

[Link]
<web-app>
2. Servlets Java

<servlet>
<servlet-name>InitServlet</servlet-name>
<servlet-class>InitServlet</servlet-class>
<init-param>
< param-name> param1 </param-name>
< param-value> value1 </param-value>
</init-param>

<init-param>
< param-name> param2 </param-name>
< param-value> value2 </param-value>
</init-param>
</servlet>
<servlet-mapping>
<servlet-name>InitServlet</servlet-name>
<url-pattern>/servlet/InitServlet</url-pattern>
</servlet-mapping>
</web-app>
MAHDI Walid Application Web en Java ISIMS 2004 35
- 2005
12- Initialisation d’une Servlet :
redéfinition de la méthode init() (2/3)

Exemple de manipulation :
[Link]
import [Link].*;
import [Link].*;
import [Link].*;
2. Servlets Java

import [Link].*;

public class InitServlet extends HttpServlet{


Vector vector=new Vector();
public void init()
init(ServletConfig
throws ServletException{
config) throws ServletException{
[Link](config);
ServletConfig config =getServletConfig();
Enumeration lstParams = [Link]( );
[Link](" Nom de la Servlet : " + [Link]());

while ([Link]() ) {
String nomParam = (String) [Link]();
[Link]("{nom" ++
[Link]("{nom=" nomParam+
nomParam+ " ," valeur="
, valeur=" +[Link](nomParam)+
+[Link](nomParam)+
"} ");
}
}
public void doGet(HttpServletRequest req, HttpServletResponse res) throws ServletException,
IOException {
PrintWriter out = [Link]();
[Link]([Link]());
}
MAHDI Walid Application Web en Java ISIMS 2004 36
- 2005 }
12- Initialisation d’une Servlet :
redéfinition de la méthode init() (3/3)

Exemple de manipulation (suite):

InitServlet
2. Servlets Java

[Link]

[Nom de la Servlet :InitServlet, {nom=param2 , valeur=value2} , {nom=param1 ,


valeur=value1} ]

MAHDI Walid Application Web en Java ISIMS 2004 37


- 2005
13- Paramètres de l’application Web (1/9)

De la même manière que pour chaque Servlet d’une


application Web, il est possible de déclarer des
paramètres globaux (informations de configuration)
pour toute l’application Web.
2. Servlets Java

Ces paramètres peuvent être utiles pour déclarer des


informations susceptible d’être utilisées par plusieurs
Servlets de l’application Web:
Nom et e-mail de l’administrateur, qui peuvent être utilisés
pour générer une page d’erreur à un client.
Nom d’hôte ou adresse IP de machines distantes, qui
peuvent être utiles pour l’accès à des ressources distantes
Nom de la base de données, nom du pilote JDBC à utiliser,
nom d’utilisateur et mot de passe pour établir la connexion,
38
MAHDI Walid
- 2005 Etc, Application Web en Java ISIMS 2004
13- Paramètres de l’application Web (2/9)

Les informations de configuration d’une application


Web sont représentées par un objet de type
[Link].
Chaque Servlet d’une même application Web a donc accès à
2. Servlets Java

ces informations.

L’objet [Link] propose des


méthodes permettant de travailler principalement avec
deux catégories de données :
Accéder à des paramètres globaux de l’application Web
déclarés dans son descripteur de déploiement [Link].
Créer, lire et supprimer des attributs de façon logicielle,
permettant le partage de ressources entre les Servlets
MAHDI Walid d’une même application Web.
Application Web en Java 39
ISIMS 2004
- 2005
13- Paramètres de l’application Web (3/9)

Configuration des paramètres globaux dans le


descripteur de déploiement : [Link]

[Link]
<web-app>
2. Servlets Java

<context-param>
<param-name>……</param-name>
<param-value>……..</param-value>
</context-param>

<servlet>
<servlet-name>InitServlet</servlet-name>
<servlet-class>InitServlet</servlet-class>
……………
</servlet>

<servlet-mapping>
<servlet-name>InitServlet</servlet-name>
<url-pattern>/servlet/InitServlet</url-pattern>
</servlet-mapping>
</web-app>
MAHDI Walid Application Web en Java ISIMS 2004 40
- 2005
13- Paramètres de l’application Web (4/9)

Méthodes de l’interface [Link]


dédiées à la récupération des paramètres globaux
d’initialisation:
2. Servlets Java

public String getInitParameter(String nom) :


Récupérer une chaîne de caractères contenant la valeur
d’un paramètre nommé nom ou la valeur null si le
paramètre n’existe pas.

public [Link] getInitParameterNames():


Récupérer sous la forme d’un objet de type
[Link] l’ensemble des noms des
paramètres déclarés pour la Servlet.
MAHDI Walid Application Web en Java ISIMS 2004 41
- 2005
13- Paramètres de l’application Web (5/9)

Exemple de manipulation :
[Link]
<web-app>
<context-param>
2. Servlets Java

<param-name>nomAdmin</param-name>
<param-value> Walid MAHDI</param-value>
</context-param>

<context-param>
<param-name>emailAdmin</param-name>
<param-value>[Link]@[Link]</param-value>
</context-param>
…………………

<servlet>
<servlet-name>ErreurServlet</servlet-name>
<servlet-class>ErreurServlet</servlet-class>
</servlet>
<servlet-mapping>
<servlet-name>ErreurServlet</servlet-name>
<url-pattern>/servlet/ErreurServlet</url-pattern>
</servlet-mapping>
</web-app>
MAHDI Walid Application Web en Java ISIMS 2004 42
- 2005
13- Paramètres de l’application Web (6/9)

Exemple de manipulation :
[Link]
import [Link].*;
import [Link].*;
import [Link].*;
2. Servlets Java

public class ErreurServlet extends HttpServlet{


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

ServletContext application=getServletContext();
String nom= [Link] ("nomAdmin");
String email= [Link] (" emailAdmin");
[Link](" text/html");
PrintWriter out = [Link]();

[Link]("<HTML><BODY>");
[Link]("<H1>Erreur de l’application</H1>" );
[Link]("<BR><H4>Veuillez contacter <B>" + nom + "</B>" );
[Link]("<A href =\"[Link] email + "\" >"+email+"</A>" );
[Link]("<H4></BODY></HTML> ");
}
}

MAHDI Walid Application Web en Java ISIMS 2004 43


- 2005
13- Paramètres de l’application Web (7/9)

Exemple de manipulation (suite):

ErreurServlet
2. Servlets Java

[Link]

Erreur de l’application
Veuillez contacter MAHDI Walid à l’adresse suivnate : [Link]@[Link]

MAHDI Walid Application Web en Java ISIMS 2004 44


- 2005
13- Paramètres de l’application Web (8/9)

Méthodes de l’interface [Link]


dédiées à la gestion logicielle des attributs du contexte
d’application:
public String setAttribute(String nom, Object objet) :
2. Servlets Java

Créer un attribut dans le contexte de l’application Web. Si le nom de


l’attribut existe déjà, la valeur existante est remplacée par la nouvelle.

public Object getAttribute(String nom) :


Récupérer la valeur d’un attribut dont le nom est passé en paramètre, ou
la valeur null si l’attribut n’existe pas.

public [Link] getAttributeNames():


Récupérer sous la forme d’un objet de type [Link] le nom
de tous les attributs stockées dans l’application Web.

public void removeAttribute(String nom):


Supprimer un attribut du contexte de l’application Web, dont le nom est
45
MAHDI Walid
- 2005 passé en paramètre. Application Web en Java ISIMS 2004
13- Paramètres de l’application Web (9/9)

Exemple de manipulation :
……..

Employé emp1 = new Employé (" Walid ", "MAHDI ");


Employé emp2 = new Employé ("toto ", "titi ");
Employé emp3 = new Employé (" tata ", "tatou ");
………
2. Servlets Java

[Link] contextApp = getServletContext();

[Link](" Employé1 ", emp1);


[Link](" Employé2 ", emp2);
[Link](" Employé3 ", emp3);
……

[Link] contextApp = getServletContext();
[Link] nomAttributs = [Link]( );

while ( [Link]() ) {
String nom = (String) [Link]();
Employé e = (Employé) [Link](nom);
……….

[Link](nom);
……

MAHDI Walid Application Web en Java ISIMS 2004 46


- 2005
14- Interfaces ServletRequest et
HttpServletRequest (1/7)

Méthodes de Récupération d’informations sur l’URL de


la requête
public String getScheme( ) :
Retourne le nom du protocole utilisé par le client pour émettre
2. Servlets Java

sa requête. Par exemple : http, ftp, etc.

public String getContextPath( ) :


Retourne sous la forme d’une chaîne de caractères
commençant par un /, la portion de l’URL de la requête
correspondant au nom du contexte de l’application Web . Par
exemple : /MaWebApp.

public String getMethod():


Retourne le nom de la méthode HTTP(GET, POST, etc) utilisée
MAHDI Walid par le client pour émettre
Application Websa requête.
en Java ISIMS 2004 47
- 2005
14- Interfaces ServletRequest et
HttpServletRequest (2/7)

Méthodes de récupération d’informations sur l’URL de


la requête (suite)

public String getRequestURL( ) :


2. Servlets Java

Retourne l’URL que le client a utilisée pour émettre sa requête.


L’URL retournée contient le nom du protocole, le nom du
serveur, le numéro de port et le chemin d’invocation de la
ressource web, mais pas les paramètres de la chaîne de
requête. Par exemple :
[Link]

public String getServletPath( ) :


Retourne la partie de l’URL qui invoque la Servlet/JSP,
composée du chemin et du nom ou de l’alias de la Servlet/JSP.
MAHDI Walid
Par exemple : /servlet/Hello.
Application Web en Java ISIMS 2004 48
- 2005
14- Interfaces ServletRequest et
HttpServletRequest (3/7)

Méthodes de récupération d’informations sur le client

public String getRemoteAddr( ) :

Retourne l’adresse IP du client qui a émis la requête. Par


2. Servlets Java

exemple : [Link]

public String getRemoteHost( ) :

Retourne le nom complet du client qui a émis la requête. Par


exemple : [Link]

public String getRemoteUser( ) :


Retourne le nom de l’utilisateur qui a envoyé la requête si celui
s’est authentifié au préalable, sinon retourne la valeur null.
MAHDI Walid Application Web en Java ISIMS 2004 49
- 2005
14- Interfaces ServletRequest et
HttpServletRequest (4/7)

Méthodes de récupération d’informations sur le serveur

public String getServerName( ) :

Retourne le nom d’hôte du serveur qui a reçu la requête. Par


2. Servlets Java

exemple : loclahost

public String getServerPort( ) :

Retourne le numéro de port d’écoute du serveur qui a reçu la


requête. Par exemple : 8080

MAHDI Walid Application Web en Java ISIMS 2004 50


- 2005
14- Interfaces ServletRequest et
HttpServletRequest (5/7)

Méthodes de récupération d’informations dans l’en-tête


HTTP

public String getHeader(String nom ) :


2. Servlets Java

Retourne la valeur de l’entête nommé, passé en paramètre ou la


valeur null si l’entête n’existe pas. Le nom de l’entête est
sensible à la casse. Par exemple : getHeader("Accept-
Language") retourne fr.

public [Link] getHeaders(String nom ) :


Retourne sous la forme d’un objet de type [Link]
l’ensemble des valeurs de l’en-tête de la requête spécifié en
paramètre.

public [Link] getHeaderNames() :


Retourne sous la forme d’un objet de type [Link]
MAHDI Walid
l’ensemble des noms des en-têtes contenus dans la requête
Application Web en Java ISIMS 2004
. 51
- 2005
14- Interfaces ServletRequest et
HttpServletRequest (6/7)

Exemple de manipulation :

[Link]
import [Link].*;
2. Servlets Java

import [Link].*;
import [Link].*;
import [Link].*;

public class AfficheHeaders extends HttpServlet{

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


{
PrintWriter out = [Link]();
[Link]("Text/plain");
Enumeration enum = [Link]( );

while ([Link]() ) {
String headerNom = (String) [Link]();
[Link](headerNom+" = "+ [Link](headerNom));
}

}
}

MAHDI Walid Application Web en Java ISIMS 2004 52


- 2005
14- Interfaces ServletRequest et
HttpServletRequest (7/7)

Exemple de manipulation (suite):

AfficheHeaders
2. Servlets Java

[Link]

accept = image/gif, image/x-xbitmap, image/jpeg, image/pjpeg, application/x-


shoc
accept-language = fr
accept-encoding = gzip, deflate
user-agent = Mozilla/4.0 (compatible; MSIE 6.0; Windows NT 5.0; ESB{27A4ABBB-
B657
host = localhost:8080
connection = Keep-Alive

MAHDI Walid Application Web en Java ISIMS 2004 53


- 2005
15- Interfaces ServletResponse et
HttpServletResponse (1/7)

Méthodes de déclaration du type du contenu et de la


taille de la réponse

public void setContentType(String type ) :


2. Servlets Java

Spécifier le type MIMIE de contenu du corps de la réponse


HTTP. Par exemple text/html pour du HTML, text/plain pour du
texte brut, application/pdf pour un document Adobe pdf …

public void setContentLength(int taille) :


Spécifier la taille du contenu de la réponse HTTP. Autrement dit
définir l’en-tête HTTP Content-Length.

MAHDI Walid Application Web en Java ISIMS 2004 54


- 2005
15- Interfaces ServletResponse et
HttpServletResponse (2/7)

Méthodes de renseignement des informations dans


l’en-tête HTTP

public void setHeader(String nom, String Valeur) :


2. Servlets Java

Initialiser un en-tête dans la réponse HTTP, avec le nom et la


valeur spécifiés en paramètres. Si l’en-tête existe déjà, la
nouvelle valeur remplace l’ancienne

public void addHeader(String nom, String Valeur) :


Ajouter un en-tête dans la réponse HTTP, avec le nom et la
valeur spécifiés en paramètres. Cette méthode permet à un en-
tête d’avoir plusieurs valeurs.

public boolean containsHeader(String nom) :


Retourne un booléen indiquant si un entête existe ou non.
MAHDI Walid Application Web en Java ISIMS 2004 55
- 2005
15- Interfaces ServletResponse et
HttpServletResponse (3/7)

Méthodes d’envoi d’erreurs et d’états HTTP

public void sendError(int sc) throws [Link]


2. Servlets Java

public void sendError(int sc,String message) throws


[Link]
Envoyer un code d’erreur HTTP au client. Par exemple SC-NOT-
FOUND(404) ou SC-SERVICE-UNAVAILABLE(503).

public void sendStatus(int sc) :


Appliquer un code d’état à la réponse HTTP quand il n’y a pas
d’erreur, comme par exemple SC-OK(200) ou SC-
CONTINUE(100).

MAHDI Walid Application Web en Java ISIMS 2004 56


- 2005
15- Interfaces ServletResponse et
HttpServletResponse (4/7)

Méthodes de redirection d’URL

public void sendRedirect(String url) throws [Link]


2. Servlets Java

Envoyer au navigateur du client un ordre de redirection sur une


autre ressources Web, qui peut être de la même application
Web ou nom.
L’URL de la ressources Web passée en paramètre peut être
relative ou absolue.
Exemple d’URL relative :
[Link]("/MaWebApp/[Link]" )
Exemple d’URL absolue :
[Link]("[Link] );

MAHDI Walid Application Web en Java ISIMS 2004 57


- 2005
15- Interfaces ServletResponse et
HttpServletResponse (5/7)

Méthodes pull client

Le pull client est similaire à la redirection, avec une


2. Servlets Java

différence principale : le navigateur affiche le contenu de la


première page et attends un certain temps avant de
retrouver et afficher le contenu de la page suivante.

Utilités :
Le contenu de la première page peut expliquer au client que la
page demandée a été déplacée avant que la page suivante ne
soit automatiquement chargée.

Les pages peuvent être retrouvées en séquence, rendant ainsi


possible une animation de mouvements de âges lent.

MAHDI Walid Application Web en Java ISIMS 2004 58


- 2005
15- Interfaces ServletResponse et
HttpServletResponse (6/7)

Méthodes pull client (suite)


L’information de pull client est envoyée au client via l’en-
tête HTTP Refresh.
2. Servlets Java

La valeur de cet en-tête indique le nombre de secondes


pendant lesquelles la page doit être affichée avant d’aller
chercher la prochaine et elle peut aussi inclure l’URL
indiquant où aller la chercher.
[Link]("Refresh", "3" );
Indique au client de recharger la même Servlet après avoir
affiché son contenu courant pendant trois secondes

[Link]("Refresh",
"3;URL=[Link]
Indique au client d’afficher la page d’accueil Tunisie après trois
MAHDI Walid
- 2005
secondes. Application Web en Java ISIMS 2004 59
15- Interfaces ServletResponse et
HttpServletResponse (7/7)

Exemple de manipulation : Mise à jour de l’heure


courante

[Link]
2. Servlets Java

import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;

public class ClientPull extends HttpServlet{

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


{
[Link]("Text/plain");
PrintWriter out = [Link]();

[Link] ("Refresh", "60");

[Link](new Date().toString());

}
}

MAHDI Walid Application Web en Java ISIMS 2004 60


- 2005
16- Synchronisation des traitements :
L’Interface SingleThreadModel (1/5)

Par défaut une Servlet fonctionne dans un


environnement multitâche.
C’est-à-dire qu’à chaque requête reçue pour une Servlet, le
conteneur Web crée un thread qui va exécuter la méthode
2. Servlets Java

de service d’une instance de la Servlet.

Si la méthode de service travaille avec des variables


d’instance de la Servlet; chaque thread peut modifier la
valeur de ces variables indépendamment de la logique de
traitement des autres threads.

Obligation de garantir dans un certain cas un


fonctionnement isolé de chaque thread.
MAHDI Walid Application Web en Java ISIMS 2004 61
- 2005
16- Synchronisation des traitements :
L’Interface SingleThreadModel (2/5)

Exemple d’application posant un problème :


Deux client désirent s’enregistrer sur votre site par l’intermédiaire d’un
formulaire HTML. Ils envoient leurs données en même temps à destination
d’une Servlet dont le rôle est de créer un enregistrement dans la tables
clients d’une base de données.
2. Servlets Java

La Servlet doit donc procéder en deux étapes :


Récupérer la plus grande valeur de clé primaire actuellement présente
dans la Table.
Créer un nouvel enregistrement dans la table avec les données du
client, en donnant à la clé primaire la valeur maximale récupérée
précédemment, plus un.

Que se passe-t-il si deux instances de la Servlet effectuent la


première étape du traitement en même temps ?
Une seule des deux instances pourra exécuter la deuxième étape.
L’autre instance obtient une erreur de la base de données, car elle
tente de créer un doublon de clé primaire. Un seul des deux clients est
donc enregistré sur votre site.
MAHDI Walid Application Web en Java ISIMS 2004 62
- 2005
16- Synchronisation des traitements :
L’Interface SingleThreadModel (3/5)

Solution du problème :
Avec l’implémentation de l’interface [Link],
un conteneur Web prend en charge le fait qu’une instance de Servlet
ne peut être exécutée par un seul thread à la fois.
2. Servlets Java

import [Link].*;
…………….
public class MaServlet extends HttpServlet implements
SingleThreadModel
{…………}
L’utilisation de l’interface [Link] implique
que le conteneur Web invoque la méthode de service dans un bloc
synchronisé.
Bien souvent, seules quelques instructions sont réellement critiques.
Au lieu de synchroniser toute la méthode service, il est possible d’améliorer
les performances en synchronisant uniquement les quelques instructions
sensibles en utilisant tout simplement un ou plusieurs blocs synchronisés.

MAHDI Walid Application Web en Java ISIMS 2004 63


- 2005
16- Synchronisation des traitements :
L’Interface SingleThreadModel (4/5)

Solution du problème :
Avec l’implémentation de l’interface [Link],
un conteneur Web prend en charge le fait qu’une instance de Servlet
ne peut être exécutée par un seul thread à la fois.
2. Servlets Java

import [Link].*;
…………….
public class MaServlet extends HttpServlet implements
SingleThreadModel
{…………}
L’utilisation de l’interface [Link] implique
que le conteneur Web invoque la méthode de service dans un bloc
synchronisé.
Bien souvent, seules quelques instructions sont réellement critiques.
Au lieu de synchroniser toute la méthode service, il est possible d’améliorer
les performances en synchronisant uniquement les quelques instructions
sensibles en utilisant tout simplement un ou plusieurs blocs synchronisés.

MAHDI Walid Application Web en Java ISIMS 2004 64


- 2005
16- Synchronisation des traitements :
L’Interface SingleThreadModel (5/5)

Exemple de syntaxe d’un bloc synchronisé dans une


Servlet
………
Object obj = new Object();
2. Servlets Java

public void doXXXX(HttpServletRequest req, HttpServletResponse res)


throws ServletException, IOException {
………

Synchronized(obj) {
………….
}

}
}

MAHDI Walid Application Web en Java ISIMS 2004 65


- 2005
17- Collaboration entre Servlets :
L’Interface RequestDispatcher (1/2)

Agrégation de résultats fournis par des Servlets :

meilleure modularité,
meilleure réutilisation.
2. Servlets Java

servlet4
servlet1

servlet5

Servlet servlet2

servlet3

MAHDI Walid Application Web en Java ISIMS 2004 66


- 2005
17- Collaboration entre Servlets :
L’Interface RequestDispatcher (1/2)

Obtention d’un RequestDispatcher :

dans la méthode de traitement de requête de Servlet


……………..
2. Servlets Java

RequestDispatcher rd;
rd =
getServeletContext().getRequestDispatcher("/servlet/MaServlet
");
if(rd==null) [Link](404);
Redirection d’une requête
………….

dans méthode de traitement de requête, demande à une autre


Servlet de répondre au client

[Link](req, res);

MAHDI Walid Application Web en Java ISIMS 2004 67


- 2005

Vous aimerez peut-être aussi