Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
Benoît VILLA
Ingénieur R&D – Ilex International
benoit.villa@ilex-international.com
1
Introduction
2/54
Introduction
Java Server Page (JSP)
3/54
Exemples de site Web
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
7/54
Architecture MVC
Dialogie servlet/JSP
8/54
Architecture MVC
Dialogie servlet/JSP
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>
10/54
Moteurs JSP et servlet
11/54
Tomcat
http://tomcat.apache.org/
12/54
Exécution d’une JSP
13/54
Exécution d’une JSP
Déroulement
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
Non
Non
Non
Cherger la servlet
Exécuter la servlet
Réponse au client
Conteneur de JSP
16/54
Description d’une servlet
17/54
API servlet
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
20/54
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
21/54
API servlet
Méthodes d’accès aux données encapsulées
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 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
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
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
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
33/54
Objets prédéfinis dans une JSP
34/54
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>
35/54
Exemple complet
36/54
Enchainement de pages
37/54
JSP et JavaBeans
...
</ 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
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
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 ” %>
44/54
Expression language
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
47/54
Packaging et déploiement
48/54
Packaging et déploiement
49/54
Fichier web.xml
50/54
Fichier web.xml
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
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