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