Upload
vuongtuong
View
232
Download
0
Embed Size (px)
Citation preview
Les Java Servlet Pages (JSP)
Thierry Lecroq(merci à Alexandre Pauchet (INSA Rouen))
Université de Rouen
FRANCE
Thierry Lecroq (Univ. Rouen) JSP 1 / 31
Plan
1 Introduction
2 Fonctionnement
3 Inclusion/Délégation
4 JSP & JavaBeans
5 Standard Tag Library
Thierry Lecroq (Univ. Rouen) JSP 2 / 31
Introduction (1/4)
Description d'une JSP
JSP = Java Servlet PagesLes JSP sont comparables à PHPLangage de script côté serveur
Une page JSP contient :
du contenu statique (texte simple, XHTML, XML, . . . )
du code JSP qui produit dynamiquement du contenu
Thierry Lecroq (Univ. Rouen) JSP 3 / 31
Introduction (2/4)
Premier exemple
hello.jsp
<%@ page contentType=" t e x t / html ; c h a r s e t=u t f 8 " %><!DOCTYPE html PUBLIC "−//W3C//DTD XHTML 1 .0 S t r i c t //EN" " ht tp : //www.w3 . org /TR/
xhtml1 /DTD/xhtml1−s t r i c t . dtd "><html>
<head>< t i t l e>Ma premi&eg rave ; r e page JSP</ t i t l e>
</head><body>
<% S t r i n g prenom=r equ e s t . ge tParamete r ( "prenom" ) ; %><h1>Bonjour <%=(prenom!= n u l l && prenom . l e n g t h ( ) !=0) ?prenom : " b e l ( l e ) inconnu ( e
) "%></h1><% i f ( prenom!= n u l l && prenom . e qua l s ( " l e monde" ) ) { %>
<h2>Bien jou&eacu te ; ! ! ! !</h2><% } %><form a c t i o n=" h e l l o . j s p " method=" pos t ">
< l a b e l>Pr&eacu te ; nom : </ l a b e l><inpu t t ype=" t e x t " name="prenom" s i z e="30"><inpu t t ype=" submit " v a l u e=" envoye r ">
</ form></body>
</html>
Thierry Lecroq (Univ. Rouen) JSP 4 / 31
Introduction (3/4)
Traduction, compilation, instanciation, . . .
Une JSP est transformée en servlet
Fonctionnement :
1 requête sur une JSP
2 une servlet compare les dates de la JSP et de sa servletsi la servlet de la JSP est plus ancienne que la page :
I traduction de la JSP en servlet (dérivation)I compilation de la servlet (cf. répertoire tomcat/work)
3 si la servlet de la page n'a pas encore été chargéeI chargement de la servletI instanciationI initialise la servlet avec la méthode jspInit
4 invocation de la méthode jspService
5 Appel de jspDestroy lors du déchargement de la servlet
Thierry Lecroq (Univ. Rouen) JSP 5 / 31
Introduction (4/4)
Quelques éléments JSP
<%@ ... %> : directives valables pour la page
<%! ... %> : déclarations
<% ... %> : scriptlet (= script : tests, itération, . . . )
<%= ... %> : récupération d'une valeur d'expression
<jsp: include ... /> : inclusion à l'exécution
<jsp:forward ... /> : délégation à un autre composant
<jsp:useBean ... /> : utilisation d'un java bean
Thierry Lecroq (Univ. Rouen) JSP 6 / 31
Fonctionnement (1/11)
Directives de page
Ces directives s'appliquent à la page
Syntaxe
<%@ page directive %>
Exemples
<%@ page isThreadSafe="false" %>
<%@ page contentType="text/plain; charset=UTF-8" %>
<%@ page import="java.io.*, java.util.*" %>
Thierry Lecroq (Univ. Rouen) JSP 7 / 31
Fonctionnement (2/11)
Paramètres d'exécution d'une page JSP
L'exécution d'une JSP est paramétrable via la directive page
<%@ page bu�er="none|xxxkb"%>spéci�e la taille du bu�er où est renvoyée la réponseun petit bu�er allège en charge le serveur d'application et envoie laréponse plus rapidement.
<%@ page errorPage="�le_name"%>spéci�e la page (JSP ou non) vers laquelle le serveur d'applicationrenvoie lorsqu'une exception non gérée est lancée par la JSP.La directive <%@ page isErrorPage="true|false"%> permet despéci�er si la page de renvoie est une page d'erreur et lui autorise ainsila transmission de l'exception pour un éventuel traitement.
Thierry Lecroq (Univ. Rouen) JSP 8 / 31
Fonctionnement (3/11)
Exemple
erreur.jsp
<%@ page contentType=" t e x t / html ; c h a r s e t=UTF−8" %><%@ page e r r o rPage=" e r r e u r . html " %><!DOCTYPE html PUBLIC "−//W3C//DTD XHTML 1 .0 S t r i c t //EN" " ht tp : //www.w3 . org /TR/
xhtml1 /DTD/xhtml1−s t r i c t . dtd "><html>
<head>< t i t l e>Ma pr em i e r e page j s p</ t i t l e>
</head><body>
<h1>1/0 = <%=1/0 %></h1></body>
</html>
erreur.html
<!DOCTYPE html PUBLIC "−//W3C//DTD XHTML 1 .0 S t r i c t //EN" " ht tp : //www.w3 . org /TR/xhtml1 /DTD/xhtml1−s t r i c t . dtd ">
<html><head>
<meta http−equ i v="Content−Type" c on t en t=" t e x t / html ; c h a r s e t=UTF−8" />< t i t l e>Page d ' e r r e u r </ t i t l e >
</head><body>
<h1>I l d o i t y a v o i r une e r r e u r dans l a JSP . . . </ h1></body>
</html>
Thierry Lecroq (Univ. Rouen) JSP 9 / 31
Fonctionnement (4/11)
Déclarations
Les déclarations permettent de dé�nir des classes, des variables, . . .Elles seront utilisables dans toute la JSP
Syntaxe
<%!
déclarations
%>
Ces déclarations, sont placées dans la classe au moment de la traduction dela JSP en Servlet⇒ les variables sont donc des attributs
Thierry Lecroq (Univ. Rouen) JSP 10 / 31
Fonctionnement (5/11)
Initialisation/Finalisation d'une JSP
Paramétrage de l'initialisation et de la �nalisation
Initilisation lors du chargement par le serveur d'application :public void jspInit()
Finalisation lors du déchargement par le serveur d'application :public void jspDestroy()
Redé�nition dans les déclarations JSP
<%! p u b l i c v o i d j s p I n i t ( ) {. . .
}p u b l i c v o i d j s pDe s t r o y ( ) {
. . .}
%>
Utilité : ouverture persistante d'une connexion à une BD, . . .
Thierry Lecroq (Univ. Rouen) JSP 11 / 31
Fonctionnement (6/11)
Scriptlets (scripts)
Utilisation des objets, variables, structures de contrôle, . . .
Syntaxe
<%s c r i p t
%>
Les scripts seront placées dans la méthode jspService() qui exécute larequête (GET, POST, . . . ) e�ectuée sur la page JSP
Thierry Lecroq (Univ. Rouen) JSP 12 / 31
Fonctionnement (7/11)
Expressions
Insertion de valeurs dans la page résultat
Syntaxe
<%= ex p r e s s i o n %>
L'expression doit retourner une valeur
Thierry Lecroq (Univ. Rouen) JSP 13 / 31
Fonctionnement (8/11)
Exemple
compteur.jsp<%@ page i sTh r e adSa f e=" f a l s e " %><%@ page contentType=" t e x t / p l a i n ; c h a r s e t=UTF−8" %><%@ page impo r t=" j a v a . i o .∗ " %>
<%!i n t compteur=0;S t r i n g f i c h i e r ;p u b l i c v o i d j s p I n i t ( ) {
t r y {f i c h i e r=g e t S e r v l e t C o n t e x t ( ) . ge tRea lPath ( "/ compteur . t x t " ) ;F i l eR e ad e r f i l e = new F i l eR e ad e r ( f i c h i e r ) ;Bu f f e r edReade r r e a d e r = new Buf f e r edReade r ( f i l e ) ;compteur = I n t e g e r . p a r s e I n t ( r e a d e r . r e adL i n e ( ) ) ;r e a d e r . c l o s e ( ) ;}c a t ch ( F i l eNotFoundExcep t i on e x c e p t i o n ) {}c a t ch ( IOExcept ion e x c e p t i o n ) {}c a t ch ( NumberFormatException e x c e p t i o n ) {}
}
. . .
Thierry Lecroq (Univ. Rouen) JSP 14 / 31
Fonctionnement (9/11)
Exemple
compteur.jsp (�n). . .
p u b l i c v o i d j s pDe s t r o y ( ) {t r y {
F i l eW r i t e r f i l e = new F i l eW r i t e r ( f i c h i e r ) ;P r i n tW r i t e r w r i t e r = new P r i n tW r i t e r ( f i l e ) ;w r i t e r . p r i n t l n ( compteur ) ;w r i t e r . c l o s e ( ) ;
}ca tch ( IOExcept ion e x c e p t i o n ) {
l o g ( " E r r e u r S e r v l e t : e n r e g i s t r emen t de l ' e t a t imp o s s i b l e pour l a JSPcompteur2 . j s p " ) ;
l o g ( ""+ex c e p t i o n ) ;}
}%>
<% compteur+=1; %>
Le compteur : <%=compteur%>
Thierry Lecroq (Univ. Rouen) JSP 15 / 31
Fonctionnement (10/11)
Objets disponibles
Objets directement disponibles dans une JSP
request httpServlet : correspondant à la requête
response : correspondant à la réponse renvoyée
session : permet de gérer une session
out : le �ot de sortie de la réponse
application : Servlet application ; contient, entre autres, la méthodelog() pour écrire dans le �chier log
pageContext : gestion du contexte et des attributs de la JSP
. . .
Thierry Lecroq (Univ. Rouen) JSP 16 / 31
Fonctionnement (11/11)
Exemple
log.jsp
<%@ page contentType=" t e x t / html ; c h a r s e t=UTF−8" %><!DOCTYPE html PUBLIC "−//W3C//DTD XHTML 1 .0 S t r i c t //EN" " ht tp : //www.w3 . org /TR/
xhtml1 /DTD/xhtml1−s t r i c t . dtd "><html>
<head>< t i t l e>Ec r i t u r e dans l e f i c h i e r l o g</ t i t l e>
</head><body>
<%S t r i n g ph ra s e = "" ;i f ( r e q u e s t . ge tParamete r ( " ph ra s e " ) != n u l l )
ph ra s e = r e qu e s t . ge tParamete r ( " ph ra s e " ) ;a p p l i c a t i o n . l o g ( ph ra s e ) ;
%><form a c t i o n=" l og . j s p " method=" get ">
< l a b e l>Phrase a e c r i r e dans l e f i c h i e r l o g : </ l a b e l><inpu t t ype=" t e x t "name=" phra s e " s i z e="30">
<% out . p r i n t l n ( "<i npu t type=\"submit \" v a l u e=\"envoye r\">" ) ; %></ form>
</body></html>
Thierry Lecroq (Univ. Rouen) JSP 17 / 31
Inclusion/Délégation (1/4)
Inclusion
Inclusion d'une page statique ou dynamique dans une JSP
inclusion à la traduction en servlet (= inclusion de texte)
<%@ include file="fichier " %>
inclusion à l'exécution (= inclusion du résultat)
<jsp:include page="fichier " />
ou
<jsp:include page="fichier ">
<jsp:param name="nom " value="valeur "/>
...
</jsp:include>
Thierry Lecroq (Univ. Rouen) JSP 18 / 31
Inclusion/Délégation (2/4)
Exempleinclusion.jsp
<%@ page contentType=" t e x t / html ; c h a r s e t=UTF−8" %><!DOCTYPE html PUBLIC "−//W3C//DTD XHTML 1 .0 S t r i c t //EN" " ht tp : //www.w3 . org /TR/
xhtml1 /DTD/xhtml1−s t r i c t . dtd "><html>
<head>< t i t l e>JSP avec i n c l u s i o n</ t i t l e></head><body><%@ i n c l u d e f i l e=" t i t r e . t x t " %>
<p><j s p : i n c l u d e page=" t e x t e . j s p " /></p><p><j s p : i n c l u d e page=" paramet re . j s p ">
<j s p : param name="nom" v a l u e="Bob" /></ j s p : i n c l u d e>
</p></body>
</html>
titre.txt
<h1>T i t r e de l a JSP , i n c l u s a p a r t i r d ' un f i c h i e r t e x t e </h1>
texte.jsp
<%@ page contentType=" t e x t / p l a i n ; c h a r s e t=UTF−8" %><% out . p r i n t l n ( "Texte gene r e par l a JSP t e x t e . j s p " ) ; %>
parametre.jsp
<%@ page contentType=" t e x t / p l a i n ; c h a r s e t=UTF−8" %><%
S t r i n g nom = r equ e s t . ge tParamete r ( "nom" ) ;out . p r i n t l n ( " Sa l u t " + nom) ;
%>
Thierry Lecroq (Univ. Rouen) JSP 19 / 31
Inclusion/Délégation (3/4)
Délégation
Délégation à un autre composant web
Syntaxe
<jsp:forward page="fichier " />
ou
<jsp:forward page="fichier " />
<jsp:param name="nom " value="valeur "/>
...
</jsp:forward>
Thierry Lecroq (Univ. Rouen) JSP 20 / 31
Inclusion/Délégation (4/4)
Exemple
delegation.jsp<%@ page contentType=" t e x t / html ; c h a r s e t=UTF−8" %><!DOCTYPE html PUBLIC "−//W3C//DTD XHTML 1 .0 S t r i c t //EN" " ht tp : //www.w3 . org /TR/
xhtml1 /DTD/xhtml1−s t r i c t . dtd "><html>
<head>< t i t l e>JSP avec d e l e g a t i o n</ t i t l e></head><body>
<j s p : f o rwa rd page=" paramet re . j s p "><j s p : param name="nom" v a l u e="Bob" />
</ j s p : f o rwa rd></body>
</html>
parametre.jsp<%@ page contentType=" t e x t / html ; c h a r s e t=UTF−8" %><!DOCTYPE html PUBLIC "−//W3C//DTD XHTML 1 .0 S t r i c t //EN" " ht tp : //www.w3 . org /TR/
xhtml1 /DTD/xhtml1−s t r i c t . dtd "><html>
<head>< t i t l e>Af f i c h a g e de l e gue</ t i t l e></head><body>
<%S t r i n g nom = r equ e s t . ge tParamete r ( "nom" ) ;out . p r i n t l n ( "<p>Sa l u t " + nom + " !</p>" ) ;
%></body>
</html>
Thierry Lecroq (Univ. Rouen) JSP 21 / 31
JSP & JavaBeans (1/9)
Dé�nition
De�nition (JavaBean)
Classe java respectant certaines conventions (API) faisant d'elle uncomposant java réutilisable et facilement intégrable dans des applications.
Les JSP o�rent des balises pour interagir avec un JavaBean
Thierry Lecroq (Univ. Rouen) JSP 22 / 31
JSP & JavaBeans (2/9)
Contraintes de conception
Pour être un JavaBean, une classe doit :
être Serializable,
posséder un constructeur sans argument,
avoir des accesseurs sur ses attributs respectant des conventions denommage ; par exemple :attribut String name
⇒ public void setName(String)
⇒ public String getName()
contenir les méthodes d'interception d'évènements nécessaires.
Thierry Lecroq (Univ. Rouen) JSP 23 / 31
JSP & JavaBeans (3/9)
Utilisation dans les JSP
<jsp:useBean id="nom " class="classebean " scope="portée 1" />
<jsp:setProperty name="nom " property="propriété " value="valeur2"/>
ou <% nom.setPropriété (valeur ) %>
<jsp:setProperty name="nom " property="propriété " param="parametre_requete 3"/>
<jsp:useBean id="nom " class="classebean " scope="portée " >
<jsp:setProperty name="nom " property="propriété " .../>
...
</jsp:useBean>
<jsp:getProperty name="nom " property="propriété " />
ou <%=nom.getPropriété () %>
1request, page, session ou application2String ou expression <%= ... %>3si absent param=property, si * règle toutes les propriétés ayant des noms iden-
tiques aux paramêtres de requêteThierry Lecroq (Univ. Rouen) JSP 24 / 31
JSP & JavaBeans (4/9)
Exemple
UnMessage.javapackage l i bMes s age ;
impor t j a v a . beans . ∗ ;impor t j a v a . i o . ∗ ;impor t j a v a . t e x t . ∗ ;impor t j a v a . u t i l . ∗ ;
p u b l i c c l a s s UnMessage implements S e r i a l i z a b l e {p r i v a t e s t a t i c SimpleDateFormat f o rma t t e r = new SimpleDateFormat ( "E d MMM yyyy ,
H:m: s " , Loca l e .FRANCE) ;p r i v a t e s t a t i c Date date = new Date ( ) ;p r i v a t e S t r i n g ema i l ;p r i v a t e S t r i n g t e x t e ;
p u b l i c UnMessage ( ) { date . setTime ( System . c u r r e n tT im eM i l l i s ( ) ) ; }
p u b l i c S t r i n g getDate ( ) { r e t u r n f o rma t t e r . fo rmat ( date ) ; }
p u b l i c v o i d s e tEma i l ( S t r i n g ema i l ) { t h i s . ema i l=ema i l ; }
p u b l i c S t r i n g ge tEma i l ( ) { r e t u r n ema i l ; }
p u b l i c v o i d s e tTex t e ( S t r i n g t e x t e ) { t h i s . t e x t e=t e x t e ; }
p u b l i c S t r i n g getTexte ( ) { r e t u r n t e x t e ; }}
Thierry Lecroq (Univ. Rouen) JSP 25 / 31
JSP & JavaBeans (5/9)
Exemple
LivreOr.javapackage l i bMes s age ;
impor t j a v a . beans . ∗ ;impor t j a v a . u t i l . ∗ ;impor t j a v a . i o . ∗ ;
p u b l i c c l a s s L i v r eOr {
p r i v a t e Vector messages ;p r i v a t e S t r i n g nomFich i e r ;
p u b l i c L i v r eOr ( ) { }
p u b l i c v o i d s e t F i c h i e r ( S t r i n g f i c h i e r ) throws F i l eNotFoundExcept ion , IOExcept ion, C la s sNotFoundExcept ion {
nomFich i e r = f i c h i e r ;F i l e I n pu tS t r e am f i s ;Ob jec t InputSt r eam o i s = n u l l ;t r y {
f i s = new F i l e I n pu tS t r e am ( nomFich i e r ) ;o i s = new Objec t InputSt r eam ( f i s ) ;messages = ( Vector ) o i s . r eadOb j ec t ( ) ;
}ca tch ( Excep t i on e ) {
messages = new Vector ( ) ;}
}
. . .
Thierry Lecroq (Univ. Rouen) JSP 26 / 31
JSP & JavaBeans (6/9)
Exemple
LivreOr.java (�n)
. . .
p u b l i c v o i d addMessage ( UnMessage msg ) {messages . add (msg ) ;
}
p u b l i c Vector getMessages ( ) {r e t u r n messages ;
}
p u b l i c v o i d e n r e g i s t r e r ( ) throws F i l eNotFoundExcept ion , IOExcept ion {F i l eOutputSt ream f o s = new F i l eOutputSt ream ( nomFich i e r ) ;ObjectOutputStream oos = new ObjectOutputStream ( f o s ) ;oos . w r i t eOb j e c t ( messages ) ;
}}
Thierry Lecroq (Univ. Rouen) JSP 27 / 31
JSP & JavaBeans (7/9)
Exemple
livredor.jsp<%@ page contentType=" t e x t / html " %><%@ page language=" j a v a " impo r t=" l i bMes s age .∗ " %>
<!DOCTYPE HTML PUBLIC "−//W3C//DTD HTML 4.01 T r a n s i t i o n a l //EN"><html>
<head>< t i t l e>L i v r e d ' or</ t i t l e >
</head><body>
<form a c t i o n=' l i v r e d o r . j s p ' method='POST '><l a b e l >ema i l :</ l a b e l ><inpu t type=' t e x t ' name=' ema i l ' s i z e=' 50 '/><br/><t e x t a r e a name=' t e x t e ' rows=' 10 ' c o l s=' 80 '>S a i s i s s e z v o t r e message i c i </
t e x t a r e a ><br/><inpu t type=' submit ' name=' submit ' v a l u e=' Envoyer '/>
</form>
<j s p : useBean i d="msg" c l a s s="l i bMes s age . UnMessage" scope="page" ><j s p : s e tP r o p e r t y name="msg" p r op e r t y="∗"/>
</ j s p : useBean>
<j s p : useBean i d=" l i v r e o r " c l a s s="l i bMes s age . L i v r eOr " scope="page"/><j s p : s e tP r o p e r t y name=" l i v r e o r " p r o p e r t y=" f i c h i e r " v a l u e="/tmp/messages . t x t "/>
. . .
Thierry Lecroq (Univ. Rouen) JSP 28 / 31
JSP & JavaBeans (8/9)
Exemple
livredor.jsp (�n)
. . .
<%i f (msg!= n u l l && msg . ge tEma i l ( ) != n u l l && !msg . ge tEma i l ( ) . e q u a l s ( "" ) ) {
l i v r e o r . addMessage (msg ) ;l i v r e o r . e n r e g i s t r e r ( ) ;
}
i f ( l i v r e o r != n u l l && l i v r e o r . getMessages ( ) != n u l l && ! l i v r e o r . getMessages ( ) .i sEmpty ( ) ) {
f o r ( Object lemsg : l i v r e o r . getMessages ( ) ) {%><t a b l e bo r d e r="1pt "><t r>
<td><%= (( UnMessage ) lemsg ) . ge tEma i l ( ) %></ td><td><%= (( UnMessage ) lemsg ) . getDate ( ) %></ td>
</ t r><t r>
<td c o l s p a n="2"><pre>
<%= (( UnMessage ) lemsg ) . ge tTexte ( ) %><pre>
</ td></ t r></ t a b l e><% }} %>
</body></html>
Thierry Lecroq (Univ. Rouen) JSP 29 / 31
JSP & JavaBeans (9/9)
Exemple
DéploiementL i v r e d o r
|_ s r c| |_ L i v r eOr . j a v a| |_ UnMessage . j a v a|_ WEB−INF| |_ c l a s s e s| |_ l i bMes s age| |_ L i v r eOr . c l a s s| |_ UnMessage . c l a s s|_ l i v r e d o r . j s p
Thierry Lecroq (Univ. Rouen) JSP 30 / 31
Standard Tag Library
Les JSP fournissent une bibliothèque de balises standards répondantà des besoins de base
Quelques domaines :
Core : balises permettant des fonctionalités de base
XML : balises permettant de manipuler des données XML
I18n : balises permettant de traiter l'internationalisation
Database : balises permettant d'e�ectuer des requêtes SQL (travailnormalement dédié aux JavaBeans)
Il est possible d'étendre le langage en créant d'autre balises
Thierry Lecroq (Univ. Rouen) JSP 31 / 31