Cours Java - F. Michel

Transcription

Cours Java - F. Michel
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Web Tier : la technologie Java
Server Pages JSP
Cours Java - F. Michel
1 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Plan
1
Introduction
2
Exemples
3
Cycle de vie d’une JSP
4
Utilisation et définition d’une librairie de tags
Cours Java - F. Michel
2 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
La technologie Java Server Pages JSP
La technologie JSP permet de créer facilement du contenu web ayant
à la fois des composants statiques et des composants dynamiques.
En fait, elle possède les même capacités dynamiques que les servlets
tout en permettant une approche plus naturelle pour la création de
contenu statique.
Principales caractéristiques
Un langage pour développer des JSP : documents texte qui décrivent
comment traiter la requête et construire la réponse.
Un langage pour accéder aux objets côté serveur.
un mécanisme pour définir des extensions du langage JSP
Cours Java - F. Michel
4 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Une page JSP
Principe
Une page JSP est un document texte qui contient 2 types de textes : du
statique (HTML, SVG, WML, and XML) et des éléments JSP qui
construisent du contenu dynamiquement.
L’extension est jsp. La page peut être composée d’autres fichiers
(d’autres jsp complètes ou des fragments de jsp)
Pour les fragments l’extension recommandée est .jspf.
Deux syntaxes pour les jsp : standard et XML (une seule des deux peut
être utilisée à la fois.
Insertion d’appels java simples : <%= appels java %>
Insertion de blocs de code java : <% bloc java %> (scriptlet)
Cours Java - F. Michel
5 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Première JSP : appel java simple
Affichage de la date
date.jsp
<%@ page language= " j a v a " contentType= " t e x t / h t m l ; c h a r s e t =UTF−8"
pageEncoding= "UTF−8"%>
<!DOCTYPE h t m l PUBLIC " − //W3C / / DTD HTML 4.01 T r a n s i t i o n a l / / EN"
" h t t p : / / www. w3 . org / TR / html4 / l o o s e . d t d " >
<html >
<head>
<meta h t t p −e q u i v = " Content−Type " c o n t e n t = " t e x t / h t m l ; c h a r s e t =UTF−8" >
< t i t l e >date page < / t i t l e >
</ head> <body>
H e l l o ! The t i m e i s now <%= new j a v a . u t i l . Date ( ) %>
</ body> </ html >
Cours Java - F. Michel
7 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Deuxième JSP : bloc java (scriptlet)
date2.jsp
<%@ page language= " j a v a " contentType= " t e x t / h t m l ; c h a r s e t =UTF−8"
pageEncoding= "UTF−8"%>
<!DOCTYPE h t m l PUBLIC " − //W3C / / DTD HTML 4.01 T r a n s i t i o n a l / / EN"
" h t t p : / / www. w3 . org / TR / html4 / l o o s e . d t d " >
<html > <head>
<meta h t t p −e q u i v = " Content−Type " c o n t e n t = " t e x t / h t m l ; c h a r s e t =UTF−8" >
< t i t l e >date page < / t i t l e >
</ head> <body>
<%
/ / T h i s i s a s c r i p t l e t . N o t i c e t h a t t h e " date " v a r i a b l e we d e c l a r e
/ / here i s a v a i l a b l e i n t h e embedded e x p r e s s i o n l a t e r on .
/ / on t h e s e r v e r l o g ( pour l e debug )
System . o u t . p r i n t l n ( " E v a l u a t i n g date now " ) ;
j a v a . u t i l . Date date = new j a v a . u t i l . Date ( ) ;
%>
H e l l o ! The t i m e i s now <%= date %>
</ body> </ html >
Cours Java - F. Michel
8 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Troisième JSP : utilisation de la variable out dans
le scriptlet
Une JSP est (au final) une servlet :
date3.jsp
<html > <head>
<meta h t t p −e q u i v = " Content−Type " c o n t e n t = " t e x t / h t m l ; c h a r s e t =UTF−8" >
< t i t l e >date page 3 </ t i t l e >
</ head> <body>
<%
/ / T h i s s c r i p t l e t d e c l a r e s and i n i t i a l i z e s " date "
System . o u t . p r i n t l n ( " E v a l u a t i n g date now " ) ;
j a v a . u t i l . Date date = new j a v a . u t i l . Date ( ) ;
%>
H e l l o ! The t i m e i s now
<%
/ / T h i s s c r i p t l e t generates HTML o u t p u t
o u t . p r i n t l n ( S t r i n g . valueOf ( date ) ) ;
%>
</ body> </ html >
Cours Java - F. Michel
9 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Quatrième JSP : utilisation de la variable request
Elle définit donc aussi par défaut les objets request et response :
date4.jsp
<html > <head>
<meta h t t p −e q u i v = " Content−Type " c o n t e n t = " t e x t / h t m l ; c h a r s e t =UTF−8" >
< t i t l e >date page 4 </ t i t l e >
</ head> <body>
<% / / T h i s s c r i p t l e t d e c l a r e s and i n i t i a l i z e s " date "
System . o u t . p r i n t l n ( " E v a l u a t i n g date now " ) ;
j a v a . u t i l . Date date = new j a v a . u t i l . Date ( ) ; %>
H e l l o ! The t i m e i s now
<%
o u t . p r i n t l n ( date ) ;
o u t . p r i n t l n ( " < b r / > Your machine ’ s address i s " ) ;
o u t . p r i n t l n ( r e q u e s t . getRemoteHost ( ) ) ;
%>
</ body> </ html >
Cours Java - F. Michel
10 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Exemple d’utilisation de la variable response
Redirection de l’URL
<html > <head>
<meta h t t p −e q u i v = " Content−Type " c o n t e n t = " t e x t / h t m l ; c h a r s e t =UTF−8" >
< t i t l e > r e d i r e c t i o n </ t i t l e >
<%
/ / envoie au c l i e n t une r e d i r e c t i o n v e r s une n o u v e l l e page
/ / ( nouvelle r e q u t e c l i e n t e )
response . s e nd R e di r ec t ( a n o t h e r U r l ) ;
%>
</ body> </ html >
Cours Java - F. Michel
11 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Exemple de fragment jsp
<TABLE BORDER=2>
<%
f o r ( i n t i = 0 ; i < n ; i ++ ) {
%>
<TR>
<TD>Number < /TD>
<TD><%= i +1 %></TD>
</TR>
<%
}
%>
</TABLE>
Cours Java - F. Michel
12 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Exemple de fragment jsp
<%
i f ( hello ) {
%>
<P> H e l l o , w o r l d
<%
} else {
%>
<P>Goodbye , w o r l d
<%
}
%>
Exercice
Créer une JSP qui affiche toutes les valeurs retournées par
System.getProperties() avec "<BR/>" après chaque couple clé/valeur.
Cours Java - F. Michel
13 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Ajout de méthodes/variables
Pour pouvoir ajouter des méthodes/variables, il faut que la scriptlet soit
encadrée par <% ! et %>
Exemple
<%@ page i m p o r t = " j a v a . u t i l . ∗ " %>
<HTML> <BODY>
<%!
Date theDate = new Date ( ) ;
Date getDate ( )
{
System . o u t . p r i n t l n ( " I n getDate ( ) method " ) ;
r e t u r n theDate ;
}
%>
H e l l o ! The t i m e i s now <%= getDate ( ) %>
</BODY> </HTML>
Attention
Dans cet exemple la date ne sera pas recalculée !
Cours Java - F. Michel
14 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Cycle de vie d’une JSP
Principe
Une JSP traite les requêtes de la même manière qu’une servlet : Les
JSP reposent entièrement sur la technologie issue des servlets.
Si une requête correspond à une JSP, le conteneur web vérifie d’abord
si la servlet de la JSP est plus vieille que la jsp.
Si c’est le cas, le conteneur web traduit la JSP en servlet et la compile.
Avantage : durant le développement, le processus de construction
(compilation) est réalisé automatiquement.
Cours Java - F. Michel
16 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Traduction de la JSP
(1) les données statiques sont directement intégrées dans la réponse
et (2) les éléments JSP sont traités comme suit :
Traduction et compilation
1
Des directives (serveur) sont utilisées pour controler comment le
conteneur web traduit et exécute la JSP.
2
Les éléments de scripts sont insérés dans la servlet de la JSP.
3
les expressions sont passées en paramètres à un évaluateur JSP ($).
4
les éléments jsp :[set|get]Property : appels de méthodes sur des
composants JavaBeans.
5
les éléments jsp :[include|forward] : appels sur l’API des servlets.
6
les éléments jsp :plugin : convertis en tags pour le navigateur (pour
insérer une applet par exemple).
7
Les tags personnalisés sont convertis en appels sur le tag handler qui
implémente ces tags.
Cours Java - F. Michel
17 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Cycle de vie d’une JSP
Dans le serveur d’application JEE
Le fichier source d’une servlet créée à partir d’une JSP appelée
pageName se trouve dans un fichier appelé : pageName_jsp.java (la
localisation dépend du serveur JEE utilisé)
Par exemple, sous Eclipse avec Tomcat, dans :
.metadata/.plugins/org.eclipse.wst.server.core/tmp0/work
/Catalina/localhost/nom_projet/. . .
En cas d’erreur
Les phases de traduction et de compilation peuvent toutes les deux
produirent des erreurs qui ne sont observées que lors du premier
chargement de la JSP.
En cas d’erreur, le serveur renvoie une JasperException et un message
qui inclue le nom de la JSP et la ligne d’erreur.
Cours Java - F. Michel
18 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Cycle de vie d’une JSP
Une fois la JSP traduite et compilée :
le cycle de vie suit le même principe que pour une servlet normale :
Si la servlet n’existe pas encore, le conteneur :
1
2
3
charge la classe de la servlet
l’instancie
initialise l’instance de la servlet avec la méthode jspInit
Enfin, le conteneur invoque la méthode _jspService : passage des
objets request et response
Si le conteneur a besoin d’enlever la servlet, il invoque la méthode
jspDestroy
Cours Java - F. Michel
19 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Cycle de vie d’une JSP : Exécution
Il est possible de controler l’exécution d’une page JSP en utilisant des
directives
Buffering
<%@ page b u f f e r = " none | xxxkb " %>
Cette directive permet de spécifier la taille du buffer avant envoi (pour
finir la construction de la page par exemple (petit buffer = envoi rapide
vers le client)
Cours Java - F. Michel
20 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Cycle de vie d’une JSP : en cas d’erreur
Traitement des erreurs
<%@ page errorPage = " f i l e −name " %>
Cette directive, placée dans l’en-tête de la page, permet de spécifier
une page à afficher en cas d’erreur.
Cours Java - F. Michel
21 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Cycle de vie d’une JSP : jsp pour les erreurs
Exemple de page pour récupérer les erreurs : errorpage.jsp
<%@ page i s E r r o r P a g e = " t r u e " %> <%−− genere un o b j e t de
t y p e j a v a x . s e r v l e t . j s p . E r r o r D a t a −−%>
<html > <head> < t i t l e > E x c e p t i o n a l Event Occurred ! < / t i t l e >
</ head>
<%−− E x c e pt i o n Handler −−%>
< f o n t c o l o r = " red " >
<%= e x c e p t i o n . t o S t r i n g ( ) %><br >
<%
o u t . p r i n t l n ( "<!−− " ) ;
S t r i n g W r i t e r sw = new S t r i n g W r i t e r ( ) ;
P r i n t W r i t e r pw = new P r i n t W r i t e r ( sw ) ;
e x c e p t i o n . p r i n t S t a c k T r a c e ( pw ) ;
o u t . p r i n t ( sw ) ;
sw . c l o s e ( ) ;
pw . c l o s e ( ) ;
o u t . p r i n t l n ( "−−>" ) ;
%>
</ body> </ html >
Cours Java - F. Michel
22 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Cycle de vie d’une JSP : Exécution
Il existe beaucoup d’autres directives
<%−− i n c l u s i o n de f i c h i e r −−%>
<%@ i n c l u d e f i l e = " h e l l o . j s p " %>
<%−− i m p o r t a t i o n de packages −−%>
<%@ page i m p o r t = " j a v a . u t i l . ∗ " %>
<%−− pour que l e n a v i g a t e u r p u i s s e i n t e r p r e t e r l e r e s u l t a t −−%>
<%@ page contentType= " t e x t / vnd . wap . wml "%>
<%−− encodage de l a reponse −−%>
<%@ page contentType= " t e x t / h t m l ; c h a r s e t =UTF−8" %>
<%−− encodage de l a page e l l e −meme −−%>
<%@ page pageEncoding= "UTF−8" %>
Plus d’informations sur les types de contenu possibles
The Internet Assigned Numbers Authority (IANA)
Cours Java - F. Michel
23 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Les tags JSP
<prefix:tagName />
<prefix:tagName param="blabla"/>
<prefix:tagName> body </prefix:tagName>
Principe
similaire au principe des tags html
Ils peuvent être de 2 types différents :
1
2
prédéfinis en standard : jsp :fonction
Chargés depuis une librairie externe (e.g. la JSTL)
Exemple
1
<jsp:include page="hello.jsp"/>
2
<mytag:helloWorld />
Cours Java - F. Michel
25 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
La JSP Standard Tag Library (JSTL)
Objectifs et caractéristiques
Faciliter la création de jsp pour les développeurs web
Permettre le développement des pages JSP en utilisant des balises
XML : conception de pages dynamiques sans connaissance du langage
Java.
Sun a définit les spécifications mais l’implémentation est libre.
JavaServer Pages Standard Tag Library (JSTL)
Tag Library Documentation
Tag Library API et IMPL depuis java.net
Cours Java - F. Michel
26 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Les librairies JSP Tag
Un tag JSP
balise XML qui fait la correspondance avec une classe Java
ces tags sont remplacés lors de la compilation par l’utilisation de la
classe
Cours Java - F. Michel
27 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Les librairies JSP Tag
Exemple
<tagLibName : tagName key= " v a l u e " >
<tagLibName : tagName>
Détails
tagLibName : préfixe déterminant la taglib à utiliser
tagName : correspond à la classe Java à utiliser
key="value" (optionnel) : des couples attribut/valeur
body (optionnel) : utilisation
Cours Java - F. Michel
28 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Un exemple
Affichage de la date avec Locale
<%@ t a g l i b u r i = " h t t p : / / j a v a . sun . com / j s p / j s t l / core " p r e f i x = " c "%>
<%@ t a g l i b u r i = " h t t p : / / j a v a . sun . com / j s p / j s t l / f m t " p r e f i x = " f m t "%>
< j s p : useBean i d = " date " c l a s s = " j a v a . u t i l . Date " / >
<html >
<head> < t i t l e >< f m t : message key= " Welcome " / > </ t i t l e > </ head>
<body>
<h2>
< f m t : message key= " H e l l o " / > < f m t : message key= " and " / >
< f m t : message key= " Welcome " / >
</ h2>
< f m t : formatDate v a l u e = " $ { date } " t y p e = " both " d a t e S t y l e = " f u l l "
timeStyle=" short " / >
< b r / > Locale :
<c : o u t v a l u e = " $ { pageContext . r e q u e s t . l o c a l e . language } " / >
<c : o u t v a l u e = " $ { pageContext . r e q u e s t . l o c a l e . c o u n t r y } " / >
</ body> </ html >
Cours Java - F. Michel
29 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Hello World version JSP + tag
Hello World
Cours Java - F. Michel
30 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Hello World version JSP + tag
hello.jsp
<%@ t a g l i b u r i = " h t t p : / / j a v a . sun . com / j s p / j s t l / core " p r e f i x = " c " %>
<%@ t a g l i b u r i = " h t t p : / / j a v a . sun . com / j s p / j s t l / f u n c t i o n s " p r e f i x = " f n " %>
<html > <head>< t i t l e > H e l l o < / t i t l e > </head> <body b g c o l o r = " w h i t e " >
<img s r c = " duke . waving . g i f " > <h2> H e l l o , my name i s Duke . What ’ s yours ?
</ h2><form method =" g e t " > < i n p u t t y p e =" t e x t " name=" username " s i z e ="25" >
< i n p u t t y p e =" submit " v a l u e =" Submit " > < i n p u t t y p e =" r e s e t " v a l u e =" Reset " >
</ form >
<c : i f t e s t =" $ { f n : l e n g t h ( param . username ) > 0 } " >
<%@include f i l e =" response . j s p " %>
</ c : i f >
</ body> </ html >
response.jsp
<h2>< f o n t c o l o r = " b l a c k " > H e l l o , $ { param . username } ! < / f o n t > </h2>
Cours Java - F. Michel
31 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Création d’une librairie de tag
Affichage de l’heure en fonction de la localisation
de l’utilisateur
Sources
MyDate.java
functions.tld
MyLocales.java
(à mettre dans le répertoire WEB-INF)
locale.jsp
Cours Java - F. Michel
32 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Bibliographie
Références
Ce cours reprend largement le tutoriel JEE proposé par Sun :
JEE tutoriel
Cours Java - F. Michel
33 / 34
Introduction
Exemples
Cycle de vie d’une JSP
Utilisation de tag
Bibliographie
Références
Ce cours reprend largement le tutoriel JEE proposé par Sun :
JEE tutoriel
Cours Java - F. Michel
34 / 34