Servlets Java : Guide Complet et Comparaison
Servlets Java : Guide Complet et Comparaison
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)
Applets :
Interface graphique utilisateur,
Nécessite un browser adéquat,
Traitements sur le client (Client lourd),
2. Servlets Java
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
Inconvénient Servlet :
interface graphique utilisateur limitée à HTML.
Principe CGI :
Un processus par requête est lancé sur le serveur.
Avantages CGI :
2. Servlets Java
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)
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,
import
leur déploiement, [Link].*
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.
[Link]
Servlet
Servlet interface
Généralisation
[Link]
Spécification
vlet
GenericServlet
GenericServlet classe abstraite
[Link]
HttpServlet
HttpServlet classe abstraite
Requêt
e Serveu Service(…, …)
r
Réponse
:
doGet() : pour traiter des requêtes Http de type GET
doPost() : pour traiter des requêtes Http de type POST
Requête GET
Service(…, …)
doGet( )
Réponse
Serveur
Notre objectif
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()
[Link]
import [Link].*;
import [Link].*;
import [Link].*;
2. Servlets Java
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
[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)
<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)
<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>
[Link]
[Link]
Hello
[Link]
Hello
Hello Isimsien
[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
<BODY> [Link]
<FORM action = "/test/servlet/Hello" method
="post">
<P>
Prenom : <INPUT type ="text" name="prenom">
<BR>
</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)
[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)
Hello
2. Servlets Java
[Link]
[Link].
[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].*;
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)
InitServlet
2. Servlets Java
[Link]
ces informations.
[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)
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
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> ");
}
}
ErreurServlet
2. Servlets Java
[Link]
Erreur de l’application
Veuillez contacter MAHDI Walid à l’adresse suivnate : [Link]@[Link]
Exemple de manipulation :
……..
while ( [Link]() ) {
String nom = (String) [Link]();
Employé e = (Employé) [Link](nom);
……….
[Link](nom);
……
exemple : [Link]
exemple : loclahost
Exemple de manipulation :
[Link]
import [Link].*;
2. Servlets Java
import [Link].*;
import [Link].*;
import [Link].*;
while ([Link]() ) {
String headerNom = (String) [Link]();
[Link](headerNom+" = "+ [Link](headerNom));
}
}
}
AfficheHeaders
2. Servlets Java
[Link]
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.
[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)
[Link]
2. Servlets Java
import [Link].*;
import [Link].*;
import [Link].*;
import [Link].*;
[Link](new Date().toString());
}
}
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.
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.
Synchronized(obj) {
………….
}
}
}
meilleure modularité,
meilleure réutilisation.
2. Servlets Java
servlet4
servlet1
servlet5
Servlet servlet2
servlet3
RequestDispatcher rd;
rd =
getServeletContext().getRequestDispatcher("/servlet/MaServlet
");
if(rd==null) [Link](404);
Redirection d’une requête
………….
[Link](req, res);