Vous êtes sur la page 1sur 54

Programmation Web Avancée

J2EE : JSP et Servlet


Sup Galilée – INFO2 / INFO3
Année 2019/2020

Benoît VILLA
Ingénieur R&D – Ilex International
benoit.villa@ilex-international.com

1
Introduction

Pages HTML dynamiques créées lors de la requête


Code à exécuter inclus dans la page HTML
Gestion de la partie dynamique coté serveur : server side
include
Principe général (coté serveur Web) :
Réception d’une requête
Passage au programme qui traite la partie de la page le
concernant
Génération de la partie dynamique de la page par le programme
Renvoi de l’ensemble de la page HTML créée au client Web

2/54
Introduction
Java Server Page (JSP)

Page HTML contenant du code Java (extension .jsp)


Division entre la présentation générale réalisée par des
graphistes et la partie dynamique réalisée par des
programmeurs Java
Principe :
Conversion des pages HTML en servlet
Traitement de la servlet par le moteur Java intégré au serveur
Web
Renvoie de la page générée

3/54
Exemples de site Web

(parfois difficile à savoir)


Mairie(s) de Paris (http://www.paris.fr/)
Mon compte ameli (http://www.ameli.fr/)
Pfizer (http://www.pfizer.com/home/)
France2 (http://www.france2.fr/)
IMSCG (http://www.imsconsultinggroup.com)
Wells Fargo ( ? – https://www.wellsfargo.com/)
Gmail ( ? – www.gmail.com)

4/54
JSP et Servlet
JSP : Page HTML contenant du code Java
Partie statique de la page Web
Rôle :
Inclusions d’autres JSP / intégration de composants
Appel à des JavaBeans
Utilisation de taglibs
Servlet : Code Java contenant des données HTML
Partie dynamique de la page Web
Rôle :
Aiguillage des données
Accès aux autres méthodes que celles de service
Définition d’autres méthodes
Globalement, répartition en fonction du volume de code Java et
HTML, et de la couche dans laquelle on se trouve

5/54
JSP et Servlet
Architecture globale (n-tiers)

(http://www-igm.univ-mlv.fr/~dr/XPOSE2003/tomcat/tomcat.php?rub=25)

6/54
Architecture MVC

Modèle : données accédées par le code Java (JDBC, RMI, EJB,...)


Vue : JSP
Contrôleur : servlets

7/54
Architecture MVC
Dialogie servlet/JSP

Lancement de la JSP dans la servlet :


p u b l i c v o i d d o P o s t ( H t t p S e r v l e t R e q u e s t r e q u e s t , H t t p S e r v l e t R e s p o n s e r e s p o n s e ){
S e r v l e t C o n t e x t c o n t e x t = g e t S e r v l e t C o n t e x t ( ) ; // h e r i t e e de G e n e r i c S e r v l e t
RequestDispatcher dispatcher =
c o n t e x t . g e t R e q u e s t D i s p a t c h e r ( ” / maPageMiseEnForme . j s p ” ) ;
dispatcher . forward ( request , response ) ;
}

Passage de valeurs à la JSP par la servlet (setAttribute()) :


p u b l i c void doPost ( H t t p S e r v l e t R e q u e s t r e q u e s t , H t t p S e r v l e t R e s p o n s e r e s p o n s e ) {
// a p p e l d e s methodes s u r l e s o b j e t s
A r r a y L i s t t h e L i s t = // un o b j e t a p a s s e r
// a j o u t e a l a r e q u e t e
r e q u e s t . s e t A t t r i b u t e ( ” nomDelObjet ” , t h e L i s t ) ;
ServletContext context = getServletContext ( ) ;
RequestDispatcher dispatcher =
c o n t e x t . g e t R e q u e s t D i s p a t c h e r ( ”/ j s p A A p p e l e r . j s p ” ) ;
dispatcher . forward ( request , response ) ;
}

8/54
Architecture MVC
Dialogie servlet/JSP

Extraction par la JSP des objets de la requête


(getAttribute()) :
<% ArrayList theList = ( ArrayList )
r e q u e s t . g e t A t t r i b u t e ( ” nomDelObjet ” ) ;
%>

9/54
Exemple de JSP

Date.jsp :
<html><head><t i t l e >Obtenu p a r une JSP</ t i t l e ></head>
<body>
<h3>Exemple de JSP </h3> <hr>
Date du j o u r&nbs p ; : <%= new j a v a . u t i l . Date ( ) %>
</body>
</html>

Traitement de Date.jsp lorsque le client demande l’URL


http://serveurWeb:<port>/<chemin>/Date.jsp

Ports par défaut :


• HTTP : 8080
• HTTPS : 8443

10/54
Moteurs JSP et servlet

Moteur : nécessaire à l’exécution des JSP et servlet


Intégration du moteur au serveur Web
• Tomcat (http://tomcat.apache.org/)
• Jetty (http://www.mortbay.org/jetty/)
• IBM WebSphere (ibm.com/software/websphere/)
• WebLogic
• GlassFish
• ...

11/54
Tomcat
http://tomcat.apache.org/

Projet de la fondation Apache


Référence en matière de moteurs de servlets
Disponible sur plateformes UNIX, Windows, MacOS, ...
Composants :
Serveur web : Apache
Connecteur : mod_jk (Jakarta) + AJP13
Moteur de servlets : Catalina
Compilateur de JSP : Jasper
Exemples de JSP :
.../webapps/examples/jsp/index.html

12/54
Exécution d’une JSP

Stockage des pages JSP dans un endroit particulier du serveur


Web
Tomcat :
REP_INSTAL_TOMCAT/webapps/examples/jsp/Date.jsp
(http://serveurWeb/examples/jsp/Date.jsp)
Exécution de
<html><head><t i t l e >Obtenu p a r une JSP</ t i t l e ></head>
<body>
<h3>Exemple de JSP </h3> <hr>
Date du j o u r&nbsp ; : <%= new j a v a . u t i l . Date ( ) %>
</body>
</html>

affiche la date courante.


Une autre exécution affiche une autre date

13/54
Exécution d’une JSP
Déroulement

Construction par le moteur de JSP d’une servlet (Traduction


de la JSP)
_0002fjsp_0002fdate_0002ejspdate_jsp_0.java dans le
répertoire
REP_INSTALL_TOMCAT/work/localhost_8080/examples
Compilation et exécution de la servlet

14/54
Exécution d’une JSP
Servlet construite
package j s p ;
...
public class 0 0 0 2 f j s p 0 0 0 2 f j s p 0 0 0 2 f d a t e 0 0 0 2 e j s p d a t e j s p 1 extends
HttpJspBase {
...
public void j s p S e r v i c e ( HttpServletRequest request , HttpServletResponse
r e s p o n s e ) throws IOException , S e r v l e t E x c e p t i o n {
...
jspx init ();
...
pageContext = j s p x F a c t o r y . getPageContext ( . . . ) ;
s e s s i o n = pageContext . g e t S e s s i o n ( ) ;
out = pageContext . getOut ( ) ;
// HTML
// b e g i n [ f i l e = ” / . . . / e x a m p l e s / j s p / d a t e . j s p ” ; from = ( 0 , 0 ) ; t o = ( 4 , 2 4 ) ]
o u t . w r i t e ( ”<html><head><t i t l e >Obtenu p a r une JSP</ t i t l e ></head>\r \n
<body>\r \n\ r \n<h3>B o n j o u r de ma p a r t </h3> < hr>\r \n
La d a t e c o u r a n t e e s t : ” ) ;
// end
// b e g i n [ f i l e = ” / . . . / e x a m p l e s / j s p / d a t e . j s p ” ; from = ( 4 , 2 7 ) t o = ( 4 , 4 9 ) ]
o u t . p r i n t ( new j a v a . u t i l . Date ( ) ) ;
// end
// HTML
// b e g i n [ f i l e = ” / . . . / e x a m p l e s / j s p / d a t e . j s p ” ; from = ( 4 , 5 1 ) ; t o = ( 6 , 7 ) ]
o u t . w r i t e ( ”\ r \n</body>\r \n</html>” ) ; // end
...
}
}

15/54
Exécution d’une JSP
Processus d’exécution de la JSP

la servlet associée à la JSP demandée est−elle Oui

Requête du client chargée dans la mémoire du moteur de servlet ?

Non

Oui la servlet précomilée


est−elle disponible ?

Non

Le fichier JSP a−t−il


Traduction de la JSP en servlet Oui été modifié depuis la
et la compiler dernière traduction
de la servlet ?

Non

Cherger la servlet

Exécuter la servlet
Réponse au client
Conteneur de JSP

16/54
Description d’une servlet

Définition d’une servlet : implémentation Java d’un


mécanisme requête/réponse, conçue indépendemment des
protocoles
Possibilité d’encapsulation de données dans
des objets génériques (requête, réponse, contexte)
des objets spécifiques au protocole HTTP (méthode, type
MIME, headers, session, cookies)
Objet Java dans un conteneur (Mappage de la servlet à une
URL sur le serveur sans accès direct)

17/54
API servlet

Paquetages Java : javax.servlet, javax.servlet.http


Méthodes :
de gestion du cycle de vie
de service

18/54
API servlet
Méthodes de gestion du cycle de vie

Paquetage javax.servlet.GenericServlet :
appelées par le conteneur, après instanciation et en fin de
service
permettant les traitements spécifiques à l’application :
Chargement et déchargement des données de configuration,
mise en place de services annexes (logs, etc.)
public void init(ServletConfig config) throws
ServletException : nécessite un appel à
super.init(config) en surchageant la méthode.
public void init( ) throws ServletException
public void destroy( )

19/54
API servlet
Méthodes de service

Traitement de la requête et génération de la réponse


Implémentation différente avec/sans protocole HTTP
GenericServlet propose une seule méthode (abstraite) de
service, nécessitant une surcharge : paquetage
javax.servlet.GenericServlet
p u b l i c a b s t r a c t v o i d s e r v i c e ( S e r v l e t R e q u e s t re q ,
ServletResponse res )
throws S e r v l e t E x c e p t i o n , I O E x c e p t i o n

20/54
API servlet
Méthodes de service

HttpServlet propose une méthode (de classe) par méthode


HTTP, nécessitant la surchage d’une des méthodes de
service : paquetage javax.servlet.http.HttpServlet
p r o t e c t e d v o i d doGet ( H t t p S e r v l e t R e q u e s t re q ,
HttpServletResponse resp )
throws S e r v l e t E x c e p t i o n , I O E x c e p t i o n

p r o t e c t e d v o i d d o P o s t ( H t t p S e r v l e t R e q u e s t re q ,
HttpServletResponse resp )
throws S e r v l e t E x c e p t i o n , I O E x c e p t i o n
Autres méthodes : doDelete, doHead, doOptions, doPut,
doTrace

21/54
API servlet
Méthodes d’accès aux données encapsulées

Accès à travers les objets requête et réponse passés en paramètres


des méthodes de service :
ServletRequest : getParameter
ServletResponse : getWriter
HttpServletRequest : getCookies, getHeader,
getMethod, getSession
HttpServletResponse : addCookie, addHeader,
sendError, sendRedirect

22/54
Exemple de code de servlet
protocole HTTP

import j a va x . s e r v l e t . ∗ ;
import j a va x . s e r v l e t . http . ∗ ;

p u b l i c c l a s s NewServlet extends HttpServlet {


p u b l i c void i n i t ( S e r v l e t C o n f i g c o n f i g ) throws S e r v l e t E x c e p t i o n {
super . i n i t ( c o n f i g ) ; . . . }
public void destroy () { . . . }

p r o t e c t e d v o i d doGet ( H t t p S e r v l e t R e q u e s t r e q u e s t , H t t p S e r v l e t R e s p o n s e r e s p o n s e )
throws S e r v l e t E x c e p t i o n , IOException {
r e s p o n s e . setContentType ( ” t e x t / html ” ) ;
P r i n t W r i t e r out = r e s p o n s e . g e t W r i t e r ( ) ;
o u t . p r i n t l n ( ”<html><head><t i t l e >H e l l o page</ t i t l e ></head>” ) ;

o u t . p r i n t l n ( ”<body><h1>H e l l o ”+ r e q u e s t . g e t P a r a m e t e r ( ”name” ) +
</h1></body></html>” ) ;

}
p r o t e c t e d v o i d doPost ( H t t p S e r v l e t R e q u e s t r e q u e s t , H t t p S e r v l e t R e s p o n s e r e s p o n s e )
throws ServletException , IOException { . . . }
}

23/54
Réflexion sur l’utilisation des servlet

Avantages : composants
Simples : Classes Java
Pratiques : Code minimum (uniquement gestion du cycle de
vie et du traitement de la requête – prise en charge des autres
aspects par le conteneur)
Sûrs : isolation du serveur par le conteneur.
Inconvénients :
Production de la réponse peu pratique : Beaucoup de
out.println( )
Difficulté de compréhension du code HTML généré

24/54
Description d’une JSP

Principe : Rédaction d’une page Web dynamique comme si


elle était statique, en incluant que le code nécessaire
Fonctionnalités identiques à HttpServlet :
Mécanisme de requête/réponse avec accès aux mêmes
données et objets qu’une servelet, et possibilité d’inclusion ou
de redirection de la requête version une autre JSP ou servlet
Spécificité du protocole HTTP :
Génération de différents types de contenus : HTML, XML,
SVG, etc.
Gestion des méthodes, headers, cookies, sessions, etc.

25/54
Description d’une JSP
Format des JSP

(X)HTML standard
Scripts permettant l’inclusion de code Java avec
Bibliothèques de tags spécifiques
Définition de balises personnalisées
Code Java directement traité par la machine virtuel Java du
serveur

26/54
Description d’une JSP
API JSP

Paquetages : javax.servlet.jsp, javax.servlet.jsp.el,


javax.servlet.jsp.tagext
Méthodes identiques à celles de l’API servlet pour la gestion
du cycle de vie et le service

27/54
Description d’une JSP
Syntaxe d’une JSP

2 syntaxes standards :
XML avec plusieurs espaces de noms (jsp, ou définis par
l’utilisateur – JSTL, etc.)
Expression language (voir plus loin)
Possibilité de les combiner

28/54
Description d’une JSP

Une JSP est composée de 3 parties :


Scriptlets <% %>
Déclarations <%! %>
Expressions <%= %>

29/54
Scriptlets
Balises : <% code %>
Inclusion de code Java dans la page
Syntaxe XML :
<j s p : s c r i p t l e t >
response . setContentType ( ” t e x t / p l a i n ” ) ;
</ j s p : s c r i p t l e t >

Syntaxe script :
<% r e s p o n s e . s e t C o n t e n t T y p e ( ” t e x t / p l a i n ” ) ; %>

Exemple :
<%
S t r i n g [ ] l a n g a g e s = {” J a v a ” , ”C++” , ” S m a l l t a l k ” , ” S i m u l a 67 ” } ;
o u t . p r i n t l n ( ”<h3>P r i n c i p a u x l a n g a g e s o r i e n t e s o b j e t s : </h3>” ) ;
f o r ( i n t i =0; i < l a n g a g e s . l e n g t h ; i ++) {
o u t . p r i n t l n ( ”<p>” + l a n g a g e s [ i ] + ”</p>” ) ;
}
%>

30/54
Déclarations
Balises : <%! %>
Code Java
Définition de méthodes ou de données
Insertion dans le corps de la servlet
Syntaxe XML :
<j s p : d e c l a r a t i o n >
p r i v a t e i n t nombreEtudiants = 23;
</ j s p : d e c l a r a t i o n >

Syntaxe script :
<%! p r i v a t e i n t n o m b r e E t u d i a n t s = 2 3 ; %>

Exemple :
<%!
i n t random4 ( ) {
r e t u r n ( i n t ) ( Math . random ( ) ∗ 4 ) ;
}
%>

31/54
Expression
Balises : <% code %>
Expressions Java insérées dans le code de la page
Expressions évaluées, renvoyant un objet String ou un type
primitif
Syntaxe XML
<j s p : e x p r e s s i o n >
new j a v a . u t i l . d a t e ( )
</ j s p : e x p r e s s i o n >

Syntaxe script
<%= new j a v a . u t i l . d a t e ( ) %>

Equivalent à
<% o u t . p r i n t l n ( new j a v a . u t i l . d a t e ( ) ) ; %>

32/54
Directives

Balises : <%@ code %>


Regroupement des informations globales relatives à la page
3 types :
page : modification des données de la page (importation de
paquetages, gestion des sessions, etc.
<%@ page i m p o r t=” j a v a . u t i l . ∗ ” %>

include : inclusion de fichiers, de jsp ou de servlets


<%@ i n c l u d e page=” /monJSP . j s p ” f l u s h=” t r u e ” %>

taglib : utilisation de bibliothèques de balises personnalisées


<%@ t a g l i b u r i=” . . . ” p r e f i x =” . . . ” %>

33/54
Objets prédéfinis dans une JSP

out : flux de sortie


request : objet correspondant à la requête
(HttpServletRequest)
response : objet correspondant à la réponse
(HttpServletResponse)
Mais aussi : session, application, page

34/54
Exemple de JSP
comptabilisation du nombre d’appels de la page

<html>

<head><t i t l e >D e c l a r a t i o n s e t e x p r e s s i o n s </ t i t l e ></head>

<body>

<h1>D e c l a r a t i o n s JSP</h1>

<%! p r i v a t e i n t a c c e s s C o u n t = 0 ; %>

<p>C e t t e page a e t e a c c e d e e <%= ++a c c e s s C o u n t %> f o i s d e p u i s l e


d e m a r r a g e du s e r v e u r </p>

</body>
</html>

35/54
Exemple complet

<html><head><t i t l e >JSP c o m p l e t </ t i t l e ></head>


<body>
<%! S t r i n g [ ] l a n g a g e s = {” J a v a ” , ”C++” , ” S m a l l t a l k ” , ” S i m u l a 67 ” } ;
i n t random4 ( ) {
r e t u r n ( i n t ) ( Math . random ( ) ∗ 4 ) ;
}
%>
<p>Parmi t o u s l e s l a n g a g e s o r i e n t e s o b j e t s :</p>
<o l>
<%
f o r ( i n t i =0; i < l a n g a g e s . l e n g t h ; i ++) {
o u t . p r i n t l n ( ”<l i >” + l a n g a g e s [ i ] + ”</ l i >” ) ;
}
%>
</o l>
<p>Le p r o c h a i n l a n g a g e que j ’ a p p r e n d s e s t
<b><%= l a n g a g e s [ random4 ( ) ] %> </b></p>
</body>
</html>

36/54
Enchainement de pages

Appel d’une JSP par une autre :


<j s p : f o r w a r d page=” p a g e S u i v a n t e ” />

NB : Après un <jsp:forward> le traitement est entièrement


pris en charge par la nouvelle page
Exemple
<% S t r i n g r e p U t i l i s a t e u r = r e q u e s t . g e t P a r a m e t e r ( ” r e p T e x t F i e l d ” ) ;
i n t rep = I n t e g e r . p a r s e I n t ( r e p U t i l i s a t e u r ) ;
i f ( ( r e p % 2 ) == 0 ) {
%>
<j s p : f o r w a r d page=” gagne . j s p ”/>
<% } e l s e { %>
<j s p : f o r w a r d page=” p e r d u . j s p ”/>
<% } %>
C e t t e l i g n e ne s ’ a f f i c h e j a m a i s !

37/54
JSP et JavaBeans

Objectif de l’utilisation des JavaBeans : écrire le moins de


code possible dans une JSP
Sous-traitement du code Java par un JavaBean
Définition d’un JavaBean :
<j s p : useBean i d=” n o m I n s t a n c e J a v a B e a n ” c l a s s=” nomClasseDuBean ”
s c o p e=” r e q u e s t | s e s s i o n | a p p l i c a t i o n | page ”>

...

</ j s p : useBean>

Utilisation :
Accès à l’aide de l’identifiant nomInstanceJavaBean
Balise sans corps <jsp:useBean ... />

38/54
JSP et JavaBeans
Attribut scope

Indication de la portée du JavaBean


request : Bean valide pour la requête et utilisable dans les
pages de redirection de la requête. Destruction à la fin de la
requête.
page (portée par défaut) : similaire à request mais sans
transmission aux pages de redirection.
session : Bean valide pour la session courante (créé s’il
n’existe pas et associé à la session). Réutilisation jusqu’à
l’invalidation de la session.
application : Bean valide pour l’application courante (une
création et partage par tous les clients des JSP).

39/54
JSP et JavaBeans
Exemple

Bean :
p u b l i c c l a s s SimpleBean implements j a v a . i o . S e r i a l i z a b l e
{
p r i v a t e i n t compter ;
p u b l i c SimpleBean ( ) {
compter = 0 ;
}
p u b l i c void setCompter ( i n t theValue ) {
compter = theValue ;
}
p u b l i c i n t getCompter ( ) {
r e t u r n compter ;
}
public void increment () {
c o m p t e r++;
}
}

40/54
JSP et JavaBeans
Exemple

JSP (extrait) :
<p> on r e p e r e l e bean p a r l e nom nomBean<br>
<j s p : us eBean i d=”nomBean” c l a s s=” S i m p l e B e a n ” s c o p e=” s e s s i o n ”>
</ j s p : useBean>
<p> On a c c e d e a une p r o p r i e t e a v e c une e x p r e s i o n :
<br> c o m p t e u r = <%= nomBean . g e t C o m p t e r ( ) %>
<hr>
On i n c r e m e n t e l e c o m p t e u r <% nomBean . i n c r e m e n t ( ) ; %>
<p>On p e u t a c c e d e r à l a p r o p r i e t e p a r une b a l i s e :<br>
<j s p : g e t P r o p e r t y name=”nomBean” p r o p e r t y=” c o m p t e r ” />

41/54
JSP et JavaBeans
Utilisation

Accès à l’aide du nom


Récupération des propriétés :
Appel à la méthode associée getXXX()
Balise <jsp:getProperty ...>
Postionnement des propriétés :
Appel à la méthode associée setXXX()
Balise <jsp:setProperty ...>

42/54
Bibliothèques de tags
Survol
Prise en charge de fonctionnalités sans écrire de code Java
Liaison à des classes Java, mappage des tags à l’exécution
Exemples (Java Standard Tag Library – JSTL) :
Core :
<%@ t a g l i b p r e f i x =” c ” u r i=” h t t p : / / j a v a . s u n . com/ j s p / j s t l / c o r e ” %>

XML :
<%@ t a g l i b p r e f i x =” x ” u r i=” h t t p : / / j a v a . s u n . com/ j s p / j s t l / xml ” %>

Internationalisation :
<%@ t a g l i b p r e f i x =” fmt ” u r i=” h t t p : / / j a v a . s u n . com/ j s p / j s t l / fmt ” %>

SQL :
<%@ t a g l i b p r e f i x =” s q l ” u r i=” h t t p : / / j a v a . s u n . com/ j s p / j s t l / s q l ” %>

Fonctions :
<%@ t a g l i b p r e f i x =” f n ” u r i=” h t t p : / / j a v a . s u n . com/ j s p / j s t l / f u n c t i o n s ” %>

43/54
Bibliothèques de tags
Survol

Autres :
<%@ t a g l i b u r i=” h t t p : / / j a k a r t a . a p a c h e . o r g / s t r u t s / t a g s−bean ”
p r e f i x =” bean ” %>

<%@ t a g l i b u r i=” h t t p : / / j a k a r t a . a p a c h e . o r g / s t r u t s / t a g s−h t m l ”


p r e f i x =” h t m l ” %>

<%@ t a g l i b u r i=” h t t p : / / j a k a r t a . a p a c h e . o r g / s t r u t s / t a g s−l o g i c ”


p r e f i x =” l o g i c ” %>

Définis par l’utilisateur : voir http:


//jakarta.apache.org/taglibs/site/tutorial.html

44/54
Expression language

JSP 2.1 (mai 2006) : Unified EL (commun avec les JSF)


Utilisation dans les attributs des tags JSP ou dans le corps de
la page
Syntaxe générale : ${expression_el}
Exemple :
<c : f o r E a c h v a r=” c u s t o m e r ” i t e m s=” ${ c u s t o m e r s }”
Customer : <c : o u t v a l u e=” ${ c u s t o m e r }”/>
</c : f o r E a c h>

45/54
Expression language
Description

Accès aux :
objets de la page : ${monbean}
propriétés des beans : <c:out value="${monBean.nom}" />
opérateurs, fonctions variables, etc.
objets implicites (composants d’une page JSP ) :
pageContext, initParam, param, paramValues, header,
headerValues, cookie, pageScope, requestScope,
sessionScope, applicationScope
Exemple :
${ h e a d e r [ ’ User−Agent ’ ] }

46/54
Expression language
Description

Types primaires : Conversion en objet du type de la classe


wrapper correspondante (java.lang.Long,
java.lang.String, etc.)
Opérateurs unaires et binaires classiques
Suppression de l’interprétation des EL :
Dans toute la page : <%@ page isELIgnored="false" %>
Ponctuellement : ${pas interprété comme une EL }

47/54
Packaging et déploiement

Création d’un fichier .war (Web Archive)


Contenu du fichier :
Fichiers Web de l’application (HTML, JSP, js, css...)
Fichiers de configuration : Répertoire META-INF (fichier
MANIFEST.MF : informations sur l’archive)
Contenu de l’application : Répertoire WEB-INF
Descripteur de déploiement : web.xml
Répertoire classes : autres classes de l’application (beans,
etc.)
Répertoire lib : bibliothèques supplémentaires (jars) –
optionnel
Répertoire src : sources Java – optionnel

48/54
Packaging et déploiement

Objectif : Exécution d’une application par un conteneur Web


Dépôt dans le répertoire dédié du serveur (webapps pour
Tomcat)
Lecture des fichiers .war au (re)démarrage du serveur :
Analyse du fichier .war et des paramètres de configuration du
descripteur de déploiement
Création du répertoire correspondant dans webapps
Mapage des URL de l’application vers le répertoire créé
Autres méthodes de déploiement : http://tomcat.apache.
org/tomcat-6.0-doc/appdev/deployment.html

49/54
Fichier web.xml

Rôle : Descripteur de déploiement


Liste des servlets avec leur comportement : servlet
identifiant de la servlet : servlet-name (interne à Tomcat)
classe de la servlet : servlet-class
texte décrivant la servlet : description
balise identique pour la description du contexte (webapp)
paramètres d’initialisation : init-param
nom : param-name ; valeur : param-value
Récupération à l’aide de la méthode
getServletConfig().getInitParameter("nom")
chargement lors du démarrage du serveur (et non à la première
sollicitation) : load-on-startup (valeur : 1)

50/54
Fichier web.xml

Correspondance (Mapping ) des servlets avec une URL


(relative au contexte webapp) : servlet-mapping
identifiant de la servlet : servlet-name
URL ou patron d’URL : url-pattern
le patron d’URL permet d’indiquer un ensemble d’URL
pouvant correspondre à la servlet :
<url-pattern>/Data/*</url-pattern>

51/54
Fichier web.xml
exemple

...
<web−app>
<s e r v l e t>
<s e r v l e t −name>Date</ s e r v l e t −name>
<s e r v l e t −c l a s s>Date</ s e r v l e t −c l a s s>
</ s e r v l e t>

<s e r v l e t −mapping>
<s e r v l e t −name>Date</ s e r v l e t −name>
<u r l −p a t t e r n>/</ u r l −p a t t e r n>
</ s e r v l e t −mapping>

</web−app>

52/54
Conclusions

Utilisation des JSP avec d’autres technologies Web : CSS,


JavaScript, XML, AJAX, etc.
Technologies complémentaires : JSF, EJB
Importance de la réflexion sur la structure de l’application
Utilisation de frameworks : Aide à la mise en place de services
complexes et assurance de rigueur dans le développement

53/54
Bibliographie

JSP : http://java.sun.com/products/jsp/ et
http://java.sun.com/products/jsp/docs.html
Technologie Apache/Tomcat : http://tomcat.apache.org
JSTL et EL : http://java.sun.com/developer/
technicalArticles/javaserverpages/faster/

54/54

Vous aimerez peut-être aussi