Académique Documents
Professionnel Documents
Culture Documents
JSP
Thierry Hamon
1/50
Introduction
2/50
Introduction
Java Server Page (JSP)
3/50
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
4/50
JSP et Servlet
Architecture globale (n-tiers)
(http://www-igm.univ-mlv.fr/~dr/XPOSE2003/tomcat/
tomcat.php?rub=25)
5/50
Architecture MVC
6/50
Architecture MVC
Dialogie servlet/JSP
7/50
Architecture MVC
Dialogie servlet/JSP
8/50
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  ; : <%= new j a v a . u t i l . Date ( ) %>
</body>
</html>
9/50
Moteurs JSP et servlet
10/50
Tomcat
http://tomcat.apache.org/
11/50
Exécution d’une JSP
12/50
Exécution d’une JSP
Déroulement
13/50
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
...
}
}
14/50
Exécution d’une JSP
Processus d’exécution de la JSP
Non
Non
Non
Cherger la servlet
Exécuter la servlet
Réponse au client
Conteneur de JSP
15/50
Description d’une servlet
16/50
API servlet
17/50
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( )
18/50
API servlet
Méthodes de service
19/50
API servlet
Méthodes de service
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
20/50
API servlet
Méthodes d’accès aux données encapsulées
21/50
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 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 { . . . }
}
22/50
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é
23/50
Description d’une JSP
24/50
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
25/50
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
26/50
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
27/50
Description d’une JSP
28/50
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>” ) ;
}
%>
29/50
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 ) ;
}
%>
30/50
Expression
Balises : <% code %>
Expression 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 ( ) ) ; %>
31/50
Directives
32/50
Objets prédéfinis dans une JSP
33/50
Exemple de JSP
comptabilisation du nombre d’appels de la page
<html>
<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 ; %>
</body>
</html>
34/50
Exemple complet
35/50
Enchainement de pages
36/50
JSP et JavaBeans
...
</ j s p : useBean>
Utilisation :
Accès à l’aide de l’identifiant nomInstanceJavaBean
Balise sans corps <jsp:useBean ... />
37/50
JSP et JavaBeans
Attribut scope
38/50
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++;
}
}
39/50
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 ” />
40/50
JSP et JavaBeans
Utilisation
41/50
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 ” %>
42/50
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 ” %>
43/50
Expression language
44/50
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 ’ ] }
45/50
Expression language
Description
46/50
Packaging et déploiement
47/50
Packaging et déploiement
48/50
Conclusions
49/50
Bibliographie
JSP : http://java.sun.com/products/jsp/ et
http://java.sun.com/products/jsp/docs.html
Technologie Apache/Tomcat :
http://jakarta.apache.org
JSTL et EL : http://java.sun.com/developer/
technicalArticles/javaserverpages/faster/
50/50