Introduction aux servlets et JSP

publicité
Introduction aux servlets et JSP
M. Belguidoum
Université Mentouri de Constantine
Département Informatique
M. Belguidoum (UMC)
Servlets et JSP
1 / 78
Plan
1
Introduction
2
Servlet et JSP
3
Quelques fonctionnalités
4
JavaBeans
5
Conclusion
M. Belguidoum (UMC)
Servlets et JSP
2 / 78
Introduction
1
Introduction
2
Servlet et JSP
3
Quelques fonctionnalités
4
JavaBeans
5
Conclusion
M. Belguidoum (UMC)
Servlets et JSP
3 / 78
Introduction
Application web
Une application web est une extension dynamique d'un serveur web ou
applicatif.
Il y a deux types d'applications web :
les applications web orientées présentation qui génèrent des pages web
(HTML, XML) dynamiquement
les applications web orientées service : ce sont les web services
http:
//java.sun.com/javaee/5/docs/tutorial/doc/bnadr.html
Les servlets sont une des techniques utilisées pour construire des
applications web.
M. Belguidoum (UMC)
Servlets et JSP
4 / 78
Introduction
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 (Common Gateway Interface) : le serveur
Web demande à lancer un programme par le protocole CGI
principe : au lieu d'envoyer le contenu d'un chier (page HTML,
image...), un serveur HTTP utilisant une interface CGI exécute un
programme puis retourne le contenu généré, comme s'il s'agissait d'un
contenu de chier.
CGI est le standard industriel qui indique comment transmettre la
requête du serveur HTTP au programme et comment récupérer la
réponse générée.
CGI permet de passer des paramètres au programme, de telle manière
qu'il puisse en tenir compte pour générer les données. Exemple : une
chaîne de caractères recherché auprès d'un moteur de recherche.
Inconvénient : une nouvelle copie du programme doit être lancée à
chaque requête, surcharge rapideles serveurs
M. Belguidoum (UMC)
Servlets et JSP
5 / 78
Introduction
Servlet et JSP
Les servlets constituent la réponse Java aux programmes CGI.
Exécutées sur un serveur d'applications
elles interceptent les requêtes des navigateurs web et génèrent des
réponses (souvent en DHTML) construites dynamiquement à l'aide du
langage Java.
Les JSP sont l'extension des servlets et se rapprochent du modèle
J2EE qui sépare :
Les contenus statiques et dynamiques
La présentation et la logique métier, notamment grâce aux JavaBeans.
M. Belguidoum (UMC)
Servlets et JSP
6 / 78
Servlet et JSP
1
Introduction
2
Servlet et JSP
3
Quelques fonctionnalités
4
JavaBeans
5
Conclusion
M. Belguidoum (UMC)
Servlets et JSP
7 / 78
Servlet et JSP
JSP et Servlet
servlet
:
du code Java produisant une page HTML
programme autonome stocké dans un chier .class sur le serveur
exemple : out.println("<H1>titre niveau 1</H1>");
JSP
:
page HTML contenant du code Java qui sera exécuté pour produire la
page
programme source Java embarqué dans une page .html
.class autonome
embarqué dans .html
M. Belguidoum (UMC)
côté client
applet
JavaScript
Servlets et JSP
côté serveur
servlet
JSP
8 / 78
Servlet et JSP
Conteneur
Un conteneur est un composant logiciel système qui contrôle d'autres
composants, dits métier
Tomcat est un exemple de conteneur
Les servlets n'ont pas de méthode main(), ils sont contrôlés par le
conteneur Tomcat
Les requêtes ne sont pas adressées aux servlets mais au conteneur dans
lequel ils sont déployés
Tous les conteneurs de servlets doivent supporter le protocole HTTP et
peuvent aussi supporter le protocole HTTPS.
Un conteneur de JSP (JSP container) fournit les mêmes services qu'un
conteneur de servlets.
M. Belguidoum (UMC)
Servlets et JSP
9 / 78
Servlet et JSP
Pourquoi un conteneur ?
Un conteneur fournit pour les Servlets
Un support pour la communication : pas besoin de ServerSocket,
Socket, Stream, ...
La gestion du cycle de vie
Un support pour le Multithreading : création automatique des Threads
Un support pour la sécurité
Un support pour les JSP
M. Belguidoum (UMC)
Servlets et JSP
10 / 78
Servlet et JSP
Apache Tomcat
Tomcat est un conteneur libre de servlets Java 2 Enterprise Edition,
issu du projet Jakarta.
Implémente les spécications des servlets et des JSP du Java
Community Process.
Il est paramétrable par des chiers XML et de propriétés, et inclut des
outils pour la conguration et la gestion.
Il comporte également un serveur HTTP.
Tomcat est un serveur Web qui gère les servlets et les JSP.
le compilateur Jasper compile les pages JSP pour en faire des servlets.
Le moteur de servlet Tomcat est souvent employé en combinaison
avec un serveur Web Apache ou d'autres serveurs Web.
Tomcat a été écrit en langage Java, il s'exécuter via la machine
virtuelle Java sur n'importe quel système d'exploitation la supportant.
M. Belguidoum (UMC)
Servlets et JSP
11 / 78
Servlet et JSP
Organisation des repertoires de Tomcat
M. Belguidoum (UMC)
Servlets et JSP
12 / 78
Servlet et JSP
Application web avec un conteneur
M. Belguidoum (UMC)
Servlets et JSP
13 / 78
Servlet et JSP
Principe de fonctionnement JSP-Servlet
M. Belguidoum (UMC)
Servlets et JSP
14 / 78
Servlet et JSP
Algorithme d'exécution de la JSP
M. Belguidoum (UMC)
Servlets et JSP
15 / 78
Servlet et JSP
Quel code dans une JSP ?
: entre <% et %>
code Java inséré dans _jspservice() de la servlet : utilisation de
out, request, response.
scriptlet
<\%
\% >
String [] langages = {" Java " , "C ++ " , " Smalltalk " , " Simula 67 " }
out . println ( " <h3 > Principaux langages orientés objets : </h3 >"
for ( int i =0; i < langages . length ; i ++) {
out . println ( " <p >" + langages [i] + " </p >" );
}
: entre <%= et %> : retourne une String qui est passée à
out.println dans _jspService : <%= SALUT %> équivalent <%
out.println(SALUT) ; %>
expressions
: entre <% ! et %> : déclaration de variables et de
méthodes d'instances.
déclarations
M. Belguidoum (UMC)
Servlets et JSP
16 / 78
Servlet et JSP
Une page jsp est traitée par le serveur (tomcat par exemple) crée le
code d'une classe java associée.
Par exemple, pour une page jsp nommée helloworld.jsp, tomcat
crée uneclasse helloworld$jsp.java.
À chaque page jsp correspond donc une classe java.
Le code html et une partie du code jsp sont utilisés par le serveur pour
produire la méthode _jspService appelée à l'exécution de jsp pour
créer la page résultat.
M. Belguidoum (UMC)
Servlets et JSP
17 / 78
Servlet et JSP
Génération de servlet à partir de JSP
M. Belguidoum (UMC)
Servlets et JSP
18 / 78
Servlet et JSP
Servlets
L'API pour les servlets constituée de deux packages :
javax.servlet
javax.servlet.http
JSDK (Java Servlet Development Kit) téléchargeable à
http://java.sun.com/products/servlet
M. Belguidoum (UMC)
Servlets et JSP
19 / 78
Servlet et JSP
Variable JSP prédénies
Nom de la
variable
Classe
exception
java.lang.Throwable
Description
application javax.servlet.ServletContext
config
javax.servlet.ServletConfig
out
javax.servlet.jsp.JspWriter
page
java.lang.Object
pageContext javax.servlet.jsp.PageContext
request
response
session
javax.servlet.ServletRequest
javax.servlet.ServletResponse
javax.servlet.http.HttpSession
M. Belguidoum (UMC)
Servlets et JSP
l'application Web de la page JSP
informations d'initialisation de la
servlet JSP
accessible seulement depuis les pages
d'erreur
le ot de sortie
l'instance de la servlet JSP
les composants web en rapport avec
une requête
la requête courante
la réponse
la session courante
20 / 78
Servlet et JSP
Utilisation d'une servlet
Une servlet doit implémenter l'interface javax.servlet.Servlet
soit directement,
soit en dérivant d'une classe qui implémente déjà cette interface
(comme GenericServlet ou HttpServlet)
L'interface javax.servlet.Servlet possède les méthodes pour :
initialiser la servlet : init()
recevoir et répondre aux requêtes des clients : service()
Contient deux paramètres :
protected void service ( HttpServletRequest req ,
HttpServletResponse resp )
throws ServletException , java . io . IOException
Cette méthode écrite dans
HttpServlet
redirige la requête suivant son
type http.
Méthode HTTP GET =>
doGet(...)
doPost(...)
Méthode HTTP POST =>
détruire la servlet et ses ressources : destroy()
M. Belguidoum (UMC)
Servlets et JSP
21 / 78
Servlet et JSP
doGet(...), doPost(...)
Ont les mêmes paramètres que service(...) de HttpServlet :
public void doXXX ( HttpServletRequest request ,
HttpServletResponse response )
throws ServletException , java . io . IOException
En général on spécialise l'une des deux méthodes et la seconde appelle
la première.
M. Belguidoum (UMC)
Servlets et JSP
22 / 78
Servlet et JSP
ServletsHTTP
M. Belguidoum (UMC)
Servlets et JSP
23 / 78
Servlet et JSP
Requêtes et réponses HTTP
M. Belguidoum (UMC)
Servlets et JSP
24 / 78
Servlet et JSP
Récupérer des paramètres 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 à travers l'objet request en utilisant la
méthode String getParameter(String
nomComposantFormulaire) qui cherche la valeur d'un paramètre d'un
formulaire
Exemple : <% String MotDePasse=
request.getParameter("MotDePasse">)
la méthode : getParameterValues() est utilisée pour récupérer un
paramètre avec une valeur multiple, elle renvoie un tableau de chaîne
de caractères.
Exemple : String[] sportsFavoris =
request.getParameterValues("sport");
Les paramètres peuvent être indiqués directement dans l'URL de la
requête (réécriture d'URL) :
http://serveur/servlet?param1=valeur1&param2=valeur2
M. Belguidoum (UMC)
Servlets et JSP
25 / 78
Servlet et JSP
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()
// le résultat est en HTML
response . setContentType ( " text / html " );
// récupère un flux pour générer le résultat
PrintWriter out = response . getWriter ();
quelques types MIME courants
text/html
image/gif
video/mpeg
audio/mp3
application/pdf
M. Belguidoum (UMC)
Servlets et JSP
26 / 78
Servlet et JSP
Correspondance JSP/Servlet
JSP d'origine
<h1 >Un nombre aléatoire </ h1 >
<%=
Math . random () %>
Code du servlet résultant de la traduction
public void _jspService ( HttpServletRequest request ,
HttpServletResponse response )
throws ServletException , IOException {
response . setContentType (" text / html " );
HttpSession session = request . getSession ();
JspWriter out = response . getWriter ();
out . println ( " <h1 > Un nombre aléatoire </ h1 >" );
out . println ( Math . random ());
...
}
M. Belguidoum (UMC)
Servlets et JSP
27 / 78
Servlet et JSP
Cycle de vie d'une servlet
M. Belguidoum (UMC)
Servlets et JSP
28 / 78
Servlet et JSP
Exemple servlet
import java . io .*;
import javax . servlet .*;
import javax . servlet . http .*;
public class HelloServlet extends HttpServlet {
public void doGet ( HttpServletRequest request ,
HttpServletResponse response )
throws ServletException , IOException {
// 1. Spécifier le type MIME du contenu de la réponse
response . setContentType (" text / html " );
// 2. Récupère le PrintWriter pour envoyer des données au client
PrintWriter out = response . getWriter ();
// 3. Envoyer l ' information au client
out . println ( " <html >" );
out . println ( " <head >< title > Bonjour </ title > </ head >" );
out . println ( " <body >" );
out . println ( " <h1 > Bonjour à tous </h1 >" );
out . println ( " </ body > </ html >" );
}
public void doPost ( HttpServletRequest request ,
HttpServletResponse response )
throws ServletException , IOException {
doGet ( request , response );}
}
M. Belguidoum (UMC)
Servlets et JSP
29 / 78
Servlet et JSP
Notion de module Web (.war)
Un servlet ne peut pas être déployé directement dans un conteneur, il
doit faire partie d'un module Web
Un module Web est un ensemble de librairies, de chiers de
congurations, de code Java (bytecode des servlets), JavaServer
Pages, servlets, classes Java, chiers XML, et des pages web statiques
(HTML, Javascript, ...)
le tout constituant une application web.
Le module Web (chier WAR, pour Web Application ARchive, est
utilisé pour déployer une application web sur un serveur d'application
(Tomcat ou GlassFish)
WEB-INF/
web.xml
lib/
Classes/
M. Belguidoum (UMC)
Servlets et JSP
30 / 78
Servlet et JSP
Notion de module Web (.war)
M. Belguidoum (UMC)
Servlets et JSP
31 / 78
Servlet et JSP
Notion de module Web (.war)
web.xml
Est un chier XML dénissant la structure et le paramétrage de
l'application web qui a une syntaxe précise
Par exemple : il contient le nom de la Classe (implémentant l'interface
Servlet) à utiliser pour tel ou tel chemin d'une URL Web
Si l'application est fondée uniquement sur des chiers JSP, alors
web.xml peut être omis.
Si l'application est fondée sur des servlets, alors web.xml indique
quelles sont les URL associées à chaque servlet.
Lib/ : contient tous les .jar dont notre programme a besoin
Classes/ : contient toutes les .class que lon produit
Le serveur d'applications va savoir, pour chaque application qu'il
héberge, lire le web.xml et créer automatiquement un classpath
spécique à l'application à partir des répertoires lib et classes
M. Belguidoum (UMC)
Servlets et JSP
32 / 78
Servlet et JSP
Notion de module Web (.war)
Problématique : comment diuser une application à base de servlets ?
souvent plusieurs servlet (chiers .class)
des ressources additionnelles (.gif, .jpeg, .html, .xml, ...)
Solution
chier .war qui représente une archive pour les applications web
diusion d'un seul chier prêt à l'emploi
chiers .war se manipulent (création, extraction, ...) avec la
commande jar
création : jar cvf app.war app
ache le contenu : jar tf app.war
extraction : jar xvf app.war
M. Belguidoum (UMC)
Servlets et JSP
33 / 78
Servlet et JSP
Descripteur de déploiement web.xml
Chaque archive .war doit être accompagnée d'un chier web.xml
décrivant les servlets inclues dans l'archive
2 balises principales : <servlet> et <servlet-mapping>
<web - app >
< servlet >
< servlet - name > HelloServlet </ servlet - name >
< servlet - class > mypackage . MaPremiereServlet </ servlet - class >
</ servlet >
< servlet - mapping >
< servlet - name > HelloServlet </ servlet - name >
<url - pattern >/ version / beta / Hello </ url - pattern >
</ servlet - mapping >
</ web - app >
M. Belguidoum (UMC)
Servlets et JSP
34 / 78
Servlet et JSP
Descripteur de déploiement web.xml
une balise <servlet> par servlet
un nom et une classe par servlet
le chier .class de la servlet doit être stockés dans WEB-INF/classes
éventuellement sous-répertoires correspondant aux packages :
WEB-INF/classes/mypackage/HelloServlet.class
une balise <servlet-mapping> par servlet
un nom (doit correspondre à une balise <servlet> existante)
une URL relative permettant d'accéder à la servlet
plusieurs autres balises peuvent être utilisées voir
http://java.sun.com/j2ee/dtds/web-app_2_2.dtd
M. Belguidoum (UMC)
Servlets et JSP
35 / 78
Servlet et JSP
Installation d'une archive .war dans Tomcat
dans le répertoire <tomcat_root>/webapps
webapps
|-> myapp.war
|-> myapp
|-> index.html
|-> WEB-INF
|-> web.xml
|-> classes
|-> mypackage
|-> HelloServlet.class
URL pour accéder à la servlet :
http://machine.com:8080/myapp/version/beta/Hello
dépend <url-pattern> fournit dans web.xml
M. Belguidoum (UMC)
Servlets et JSP
36 / 78
Servlet et JSP
Descripteur de déploiement web.xml
Paramètres d'initialisation
possibilité d'inclure des paramètres d'initialisation de la servlet dans
web.xml
avantage : peuvent être changés sans avoir à recompiler
< servlet >
< servlet - name > HelloServlet </ servlet - name >
< servlet - class > mypackage . HelloServlet </ servlet - class >
<init - param >
< param - name > nom </ param - name >
< param - value > valeur </ param - value >
</ init - param >
</ servlet >
Dans le code de la servlet (par ex. méthode init)
String valeur = getInitParameter("nom");
M. Belguidoum (UMC)
Servlets et JSP
37 / 78
Quelques fonctionnalités
1
Introduction
2
Servlet et JSP
3
Quelques fonctionnalités
4
JavaBeans
5
Conclusion
M. Belguidoum (UMC)
Servlets et JSP
38 / 78
Quelques fonctionnalités
Session
Session
le web n'ore par défaut aucun suivi de session.
Cette fonctionnalité est supportée par les servlets à l'aide de l'objet
HttpSession obtenu à l'aide de request.getSession()
Objectif : être capable de "suivre" l'activité du client sur plusieurs
pages
HttpSession session = request.getSession(true) : retourne la
session courante pour cet utilisateur ou une nouvelle session
HttpSession session = request.getSession(false) : retourne
la session courante pour cet utilisateur ou null
Les méthodes public void putValue(String name, Object
value) et public Object getValue(String name) permettent
respectivement d'attribuer (i.e. modier) et consulter une valeur de
session identiée par son nom.
M. Belguidoum (UMC)
Servlets et JSP
39 / 78
Quelques fonctionnalités
Session
Session
Méthodes d'un objet de type HttpSession
void setAttribute(String name, Object value) : ajoute un
couple (name, value) pour cette session
Object getAttribute(String name) : retourne l'objet associé à la
clé name ou null
void removeAttribute(String name) : enlève le couple de clé
name
java.util.Enumeration getAttributeNames() : retourne tous les
noms d'attributs associés à la session
void setMaxIntervalTime(int seconds) : spécie la durée de vie
maximum d'une session
long getCreationTime() / long getLastAccessedTime() :
retourne la date de création / de dernier accès de la session en ms
depuis le 1/1/1970, 00h00 GMT new Date(long)
M. Belguidoum (UMC)
Servlets et JSP
40 / 78
Quelques fonctionnalités
Session
Session : exemple
Suivi de session pour un compteur
public class HttpSessionServlet extends HttpServlet {
protected void doGet ( HttpServletRequest req , HttpServletResponse res )
throws ServletException , IOException {
res . setContentType (" text / plain " ); PrintWriter out = res . getWriter ();
HttpSession session = req . getSession ();
Integer count = ( Integer ) session . getAttribute (" count " );
if ( count == null )
count = new Integer (1);
else
count = new Integer ( count . intValue () + 1);
session . setAttribute (" count " , count );
out . println (" Vous avez visité cette page " + count + " fois ." );
}
}
M. Belguidoum (UMC)
Servlets et JSP
41 / 78
Quelques fonctionnalités
Cookies
Les cookies
Permettent à un serveur Web de stocker de l'information chez un client
Un cookie est une information envoyée au navigateur (client) par un
serveur WEB qui peut ensuite être relue par le client
Lorsqu'un client reçoit un cookie, il le sauve et le renvoie ensuite au
serveur chaque fois qu'il accède à une page sur ce serveur
Le client a la possibilité d'interdire leur dépôt dans son navigateur
La valeur d'un cookie pouvant identier de façon unique un client, ils
sont souvent utilisés pour le suivi de session
Les cookies ont été introduits par la première fois dans Netscape
Navigator
M. Belguidoum (UMC)
Servlets et JSP
42 / 78
Quelques fonctionnalités
Cookies
Les cookies
L'API Servlet fournit la classe javax.servlet.http.Cookie pour
travailler avec les Cookies :
Cookie(String name, String value) : construit un cookie
String getName() : retourne le nom du cookie
String getValue() : retourne la valeur du cookie
setValue(String new_value) : donne une nouvelle valeur au cookie
setMaxAge(int expiry) : spécie l'âge maximum du cookie
Pour la création d'un nouveau cookie, il faut l'ajouter à la réponse
(HttpServletResponse)
addCookie(Cookie mon_cook) : ajoute à la réponse un cookie
La Servlet récupère les cookies du client en exploitant la réponse
(HttpServletRequest)
Cookie[] getCookies() : récupère l'ensemble des cookies du site
M. Belguidoum (UMC)
Servlets et JSP
43 / 78
Quelques fonctionnalités
Cookies
Les cookies : exemples
Code pour créer un cookie et l'ajouter au client
Cookie cookie = new Cookie (" Id " , " 123 " );
res . addCookie ( cookie );
Code pour récupérer les cookies
Cookie [] cookies = req . getCookies ();
if ( cookies != null ) {
for ( int i = 0; i < cookies . length ; i ++) {
String name = cookies [ i ]. getName ();
String value = cookies [i ]. getValue ();
}
}
M. Belguidoum (UMC)
Servlets et JSP
44 / 78
Quelques fonctionnalités
Cookies
Les cookies
Le plus gros problème des cookies est que les navigateurs ne les
acceptent pas toujours
L'utilisateur peut congurer son navigateur pour qu'il refuse ou pas les
cookies
Les navigateurs n'acceptent que 20 cookies par site, 300 par utilisateur
et la taille d'un cookie peut être limitée à 4096 octets
M. Belguidoum (UMC)
Servlets et JSP
45 / 78
Quelques fonctionnalités
Upload
Upload
Par exemple dans le cas de récupération de chiers uploadés à partir
d'un fomulaire
Dénition des formulaires avec upload
<HTML > < BODY >
< FORM ACTION =" url servlet traitement du formulaire " METHOD = POST
ENCTYPE = " multipart / form - data " >
Sélectionner un fichier < INPUT TYPE = FILE NAME =" fichier " >
< INPUT TYPE = SUBMIT VALUE =" Envoi " >
< INPUT TYPE = RESET VALUE =" Remise à zéro " > <P >
</ FORM >
</ BODY > </ HTML >
M. Belguidoum (UMC)
Servlets et JSP
46 / 78
Quelques fonctionnalités
Upload
Upload
M. Belguidoum (UMC)
Servlets et JSP
47 / 78
Quelques fonctionnalités
Upload
Upload
Récupération des chiers uploadés à partir d'un formulaire
récupération du ux binaire, programmer le décodage /
librairie existante Commons FileUpload :
http://jakarta.apache.org/commons/fileupload/
le upload est traité dans la méthode service d'une servlet
import org . apache . commons . fileupload . FileItem ;
import org . apache . commons . fileupload . FileUploadBase ;
FileUploadBase fub = new FileUploadBase ();
List files = fub . parseRequest ( request );
for ( Iterator i = files . iterator () ; i. hasNext () ; ) {
FileItem fi = ( FileItem ) i. next ();
File monFichier = new File (" ... " );
fi . write ( monFichier );
}
M. Belguidoum (UMC)
Servlets et JSP
48 / 78
Quelques fonctionnalités
Chaînage et collaboration des servlets
Chaînage et collaboration des servlets
Les Servlets s'exécutant dans le même serveur peuvent dialoguer entre
elles
Deux principaux styles de collaboration :
Partage d'information : un état ou une ressource.
Exemple : un magasin en ligne pourrait partager les informations sur le
stock des produits ou une connexion à une base de données
Partage du contrôle : une requête. Réception d'une requête par une
Servlet et laisser l'autre Servlet une partie ou toute la responsabilité du
traitement
M. Belguidoum (UMC)
Servlets et JSP
49 / 78
Quelques fonctionnalités
Chaînage et collaboration des servlets
Partage d'information
La collaboration est obtenue par l'interface ServletContext
L'utilisation de ServletContext permet aux applications web de
disposer de son propre conteneur d'informations unique
Une Servlet retrouve le ServletContext de son application web par
un appel à getServletContext()
Exemples de méthodes
void setAttribute(String name, Object o) : lie un objet sous le
nom indiqué
Object getAttribute(String name) : retrouve l'objet sous le nom
indiqué
Enumeration getAttributeNames() : retourne l'ensemble des noms
de tous les attributs liés
void removeAttribute(String name) : supprime l'objet lié sous le
nom indiqué
M. Belguidoum (UMC)
Servlets et JSP
50 / 78
Quelques fonctionnalités
Chaînage et collaboration des servlets
Exemple : partage d'information
public class PizzasAdmin extends HttpServlet {
protected void doGet ( HttpServletRequest req , HttpServletResponse res )
throws ServletException , IOException {
res . setContentType (" text / plain " );
PrintWriter out = res . getWriter ();
ServletContext context = this . getServletContext ();
context . setAttribute (" Specialite " , "4 Fromage " );
context . setAttribute (" Date " , new Date ());
out . println (" La pizza du jour a été définie . " );}}
public class PizzasClient extends HttpServlet {
protected void doGet ( HttpServletRequest req , HttpServletResponse res )
throws ServletException , IOException { ...
ServletContext context = this . getServletContext ();
String pizza_spec = ( String ) context . getAttribute ( " Specialite " );
Date day = ( Date ) context . getAttribute ( " Date " );
DateFormat df = DateFormat . getDateInstance ( DateFormat . MEDIUM );
String today = df . format ( day );
out . println (" Aujourd ' hui (" + today + ") ,
notre specialite est : " + pizza_spec );}}
M. Belguidoum (UMC)
Servlets et JSP
51 / 78
Quelques fonctionnalités
Chaînage et collaboration des servlets
Partage du contrôle
Les Servlets peuvent partager ou distribuer le contrôle de la requête
Deux types de distribution
Distribuer un renvoi : une Servlet peut renvoyer une requête entière
Distribuer une inclusion : une Servlet peut inclure du contenu généré
Les avantages sont :
aggrégation des résultats fournis par plusieurs servlets : meilleure
modularité et meilleure réutilisation
La délégation de compétences
Une meilleure abstraction et une plus grande souplesse
Architecture logicielle MVC (Servlet = contrôle et JSP = présentation)
M. Belguidoum (UMC)
Servlets et JSP
52 / 78
Quelques fonctionnalités
Chaînage et collaboration des servlets
Partage de contrôle
Utilisation d'un RequestDispatcher obtenu via un objet request
RequestDispatcher rd =
request.getRequestDispatcher(String path);
path est un chemin relatif ou absolu ne pouvant pas sortir du contexte
Inclusion du résultat d'une autre servlet :
rd.include(request, response);
Délégation
du traitement à une autre servlet :
rd.forward(request, response);
sendRedirect() est utilisée pour les redirections externes eectuées
par le client car aucune recherche getContext() n'est nécessaire
Pour distribuer en dehors du contexte courant il faut :
Identier le contexte extérieur (utilisation de getContext())
Utiliser la méthode getRequestDispatcher(String path)
Le chemin est uniquement en absolu
M. Belguidoum (UMC)
Servlets et JSP
53 / 78
Quelques fonctionnalités
Concurrence
Gestion de la concurrence
Par défaut les servlets sont exécutées de façon multi-threadée
Si une servlet doit être exécutée en exclusion mutuelle (ex. : accès à
des ressources partagées critiques) implantation de l'interface
marqueur SingleThreadModel
public class CompteurServlet
extends HttpServlet
implements SingleThreadModel {
public void service ( ServletRequest request ,
ServletResponse response )
throws ServletException , IOException {
/* * Du code en exclusion mutuelle avec lui - même */
}
}
Autre solution : dénir du code synchronized dans la servlet
M. Belguidoum (UMC)
Servlets et JSP
54 / 78
Quelques fonctionnalités
sécurité
Sécurité : authentication
Conserver les informations sensibles dans les mains des utilisateurs
Nous distinguons plusieurs types d'autorisation :
BASIC : fournit par le protocole HTTP basé sur un modèle simple de
demande/réponse (codage Base64)
FORM : authentication ne reposant pas celle du protocole HTTP
M. Belguidoum (UMC)
Servlets et JSP
55 / 78
Quelques fonctionnalités
sécurité
Sécurité : authentication
BASIC
FORM
M. Belguidoum (UMC)
Servlets et JSP
56 / 78
Quelques fonctionnalités
sécurité
Sécurité : identication par les Servlets
Gérée par le conteneur de Servlets (Ident 1) :
Spécication d'un domaine de sécurité dans le chier de conguration
web.xml
Les utilisateurs sont gérés (l'utilisateur existe-il, le mot de passe est-il
correct, etc.) uniquement par le conteneur de Servlets
Basée sur les rôles (BASIC) ou à base de formulaire (FORM)
Eectuée à l'intérieur des Servlets (Ident 2) :
Les utilisateurs sont stockés dans une base de données, un chier, etc.
La vérication est eectuée dans les Servlets (besoin d'un codage)
Personnalisée (BASIC) ou personnalisée à base de formulaire (FORM)
M. Belguidoum (UMC)
Servlets et JSP
57 / 78
Quelques fonctionnalités
sécurité
Authentication basée sur les rôles : Ident 1
Exemple : Servlet qui après identication ache un ensemble d'informations
M. Belguidoum (UMC)
Servlets et JSP
58 / 78
Quelques fonctionnalités
sécurité
Authentication basée sur les rôles : Ident 1
Besoin de modication du chier de conguration web.xml de l'application
WEB considérée
M. Belguidoum (UMC)
Servlets et JSP
59 / 78
Quelques fonctionnalités
sécurité
Authentication personnalisée à base de formulaire : Ident 2
Exemple : Servlet qui traite les autorisations de type FORM
M. Belguidoum (UMC)
Servlets et JSP
60 / 78
Quelques fonctionnalités
Accès aux bases de données
Exemple : connexion à une base de données
public class DataBaseServlet extends HttpServlet {
protected void doGet ( HttpServletRequest req , HttpServletResponse res )
throws ServletException , IOException {
res . setContentType (" text / html " );
PrintWriter out = res . getWriter ();
try {
Class . forName (" com . mysql . jdbc . Driver " );
Connection ma_connexion =
DriverManager . getConnection ( " jdbc : mysql :// localhost :1527/ PersonDB " );
Statement mon_statement = ma_connexion . createStatement ();
ResultSet mon_resultat = mon_statement . executeQuery ( " SELECT NAME ,
FIRSTNAME , OLDYEAR FROM PERSON " );
while ( mon_resultat . next ()) {
out . print (" Nom : " + mon_resultat . getString (1));
out . print (" Prénom : " + mon_resultat . getString (2));
out . println (" Age : " + mon_resultat . getInt (3));
out . println (" <br > " );
}
} catch ( SQLException e) {
...
}
}
M. Belguidoum (UMC)
Servlets et JSP
61 / 78
JavaBeans
1
Introduction
2
Servlet et JSP
3
Quelques fonctionnalités
4
JavaBeans
5
Conclusion
M. Belguidoum (UMC)
Servlets et JSP
62 / 78
JavaBeans
JSP et Java beans : motivation
Les protocoles web classiques ne gèrent pas de session : pas de
conservation sur le serveur des informations sur l'utilisateur, comme un
mot de passe utilisé pour interroger une base de données, etc.
L'architecture JSP/Servlets propose une solution simple et élégante les
javabeans.
avoir le moins de code Java possible dans une page JSP (HTML)
Sous-traiter le code à un Java bean
M. Belguidoum (UMC)
Servlets et JSP
63 / 78
JavaBeans
JSP et Java beans : motivation
Un javabean est un objet java, identié par un nom (une chaîne de
caractères), dont la durée de vie peut dépasser la simple requête http.
Les beans sont utilisables à partir des jsp : <jsp:useBean>
Pour qu'un objet java puisse être utilisé comme bean sa classe doit :
implémenter java.io.Serializable ;
disposer d'un constructeur par défaut (i.e. sans argument) ;
avoir des accesseurs nommés setXX et getXX, où XX est le nom d'un
champ.
la classe doit être explicitement située dans un package.
M. Belguidoum (UMC)
Servlets et JSP
64 / 78
JavaBeans
Exemple de bean : le bean Compteur
package test ;
public class Compteur implements java . io . Serializable
private int valeur ;
public Compteur ( int v) {
valeur = v;
}
public Compteur () {
valeur = 0;
}
public void incremente () {
valeur ++;
}
public int getValeur ()
{
return this . valeur ;
}
public void setValeur ( int argValeur ) {
this . valeur = argValeur ;
}
}
M. Belguidoum (UMC)
Servlets et JSP
{
65 / 78
JavaBeans
Accès aux beans depuis les jsp
Les balises spéciques au beans sont :
<jsp:useBean ... /> : déclarer un bean avec un nom (id), une
durée de vie (scope) et le nom de la classe utilisée pour implémenter
le bean (class) de la forme nompackage.NomClasse
la durée peut être xée à : page, request, session ou application.
request : le bean est détruit lorsque le client demande une nouvelle
page. Le passage des paramètres de suivi de session doit ainsi être
réalisé manuellement.
page : rarement employée, cette portée est limitée à la page en cours
(aucune information de session ne peut être récupérée) : ce bean est
accessible à n'importe quel endroit de la page.
session : commence à la connexion, et se termine quand l'utilisateur
arrête son navigateur, ou après un temps d'inactivité paramétrable
(xable par la méthode setMaxInactiveInterval(int interval)
de la classe HttpSession. Chaque utilisateur connecté aura sa propre
version d'un bean session.
application signie que le bean existe pour toute la durée de vie du
serveur tomcat ; le bean est alors unique pour tous les utilisateurs.
M. Belguidoum (UMC)
Servlets et JSP
66 / 78
JavaBeans
Accès aux beans depuis les jsp
Les balises spéciques au beans sont :
<jsp:getProperty ... /> permet de remplir les valeurs des champs
du bean :
name : nom du bean (id="...")
property : nom de la propriété, qui doit être un des champs dénis par
le bean.
<jsp:setProperty ... /> permet de xer la valeur d'un champ du
bean :
name : nom du bean ;
property : nom du champ ;
value : valeur à donner au champ.
M. Belguidoum (UMC)
Servlets et JSP
67 / 78
JavaBeans
Accès aux beans depuis les jsp
<! doctype html PUBLIC ' -// W3C // DTD HTML 3.2// EN '>
<html >
<head >
< title > test Beans 1 </ title >
</ head >
<body >
<!-- déclaration du bean -->
< jsp : useBean id =" cpt " scope =" application " class =" test . Compteur "/>
<!-- utilisation du bean -->
Le compteur vaut : < jsp : getProperty name = " cpt " property = " valeur "/>
Quand on fixe la valeur , on utilise en plus l ' attribut <tt > param </ tt >.
<%
// Utilisation du bean par du code java :
cpt . incremente ();
%>
</ body >
</ html >
M. Belguidoum (UMC)
Servlets et JSP
68 / 78
JavaBeans
accès aux beans depuis les servlets
La création et la lecture des beans depuis des servlets dièrent selon la
portée (scope) du bean : session et application.
session : On doit procéder en deux temps.
Il faut d'abord récupérer un objet de classe HttpSession
HttpSession session= request.getSession(true);
:
On peut ensuite récupérer ou donner une valeur d'un bean en utilisant :
les méthodes
getAttribute
et
setAttribute
application : la méthode getServletContext() de la classe
GenericServlet (dont hérite toute servlet) renvoie un objet de classe
ServletContext, qui représente l'application. Cet objet dispose lui
aussi de méthodes setAttribute et getAttribute.
M. Belguidoum (UMC)
Servlets et JSP
69 / 78
JavaBeans
Architecture JSP : modèle 1
M. Belguidoum (UMC)
Servlets et JSP
70 / 78
JavaBeans
Architecture JSP : modèle 2
M. Belguidoum (UMC)
Servlets et JSP
71 / 78
JavaBeans
Architecture MVC
modèle
etc.)
= les données accédées par un code Java (JDBC, RMI, EJB,
= JSP
contrôleur = servlets
vues
M. Belguidoum (UMC)
Servlets et JSP
72 / 78
JavaBeans
Architecture MVC : principe de fonctionnement
1
2
3
4
5
Par le biais d'une page web, l'utilisateur émet une requête HTTP au
serveur web en cliquant sur un lien ou sur un bouton. Cette requête
est prise en charge par le contrôleur (servlet).
Le contrôleur exécute les traitements nécessaires (appelle un EJB
Stateless par exemple) et récupère le modèle, c'est-à-dire les entity
beans.
Le contrôleur sélectionne alors la JSP qui sera en charge de la
construction de la réponse et lui transmet les entity beans contenant
les données à acher.
La JSP construit la réponse en faisant appel aux accesseurs des entity
beans.
La réponse HTTP est transmise au navigateur qui l'ache sous forme
de page web.
M. Belguidoum (UMC)
Servlets et JSP
73 / 78
JavaBeans
Architecture MVC
Syntaxe dans la servlet pour lancer la JSP :
public void doPost ( HttpServletRequest request ,
HttpServletResponse response ){
// héritée de GenericServlet
ServletContext context = getServletContext ();
RequestDispatcher dispatcher =
context . getRequestDispatcher ( "/ maPageMiseEnForme . jsp " );
dispatcher . forward ( request , response );
}
La JSP extrait les objets de request grâce à getAttribute()
<%
ArrayList theList = ( ArrayList )
request . getAttribute (" nomDelObjet " );
// maintenant , utiliser l ' ArrayList
%>
M. Belguidoum (UMC)
Servlets et JSP
74 / 78
JavaBeans
Architecture MVC
La servlet peut passer des valeurs à la JSP appelé grâce à
setAttribute()
public void doPost ( HttpServletRequest request ,
HttpServletResponse response ) {
ArrayList theList = // un objet à passer
// ajoute à la requête
request . setAttribute (" nomDelObjet " , theList );
ServletContext context = getServletContext ();
RequestDispatcher dispatcher =
context . getRequestDispatcher ( "/ jspAAppeler . jsp " );
dispatcher . forward ( request , response );
}
M. Belguidoum (UMC)
Servlets et JSP
75 / 78
Conclusion
1
Introduction
2
Servlet et JSP
3
Quelques fonctionnalités
4
JavaBeans
5
Conclusion
M. Belguidoum (UMC)
Servlets et JSP
76 / 78
Conclusion
Conclusion
les Servlets permettent de développer des applications Web en Java
Plusieurs fonctionnalités
traitement des données fournies par les utilisateurs
gestion de session
gestion de cookies
Collabiration et partage d'information et de contrôle
format d'archivage .war
servlet : représente la partie contrôle de l'architecture MVC d'une
application web
intéraction avec JSP et java beans
M. Belguidoum (UMC)
Servlets et JSP
77 / 78
Conclusion
Références
JSP et servlets ecaces : production de sites dynamiques, cas
pratiques, Jean Luc Deleage
Documentation :
http://java.sun.com/javaee/5/docs/api/index.html
Tutorial à : http:
//java.sun.com/javaee/5/docs/tutorial/doc/bnafd.html
http://java.sun.com/products/servlet/index.html
basé sur les cours de : Lionel Seinturier, Mickaël BARON, Gaël
Thomas, etc.
M. Belguidoum (UMC)
Servlets et JSP
78 / 78
Téléchargement