You are on page 1of 99

JSP

Introduction

Une page JSP est une page de texte contenant des balises (souvent HTML, XHTML, WML ou XML) pouvant tre interprtes par un browser. A l'intrieur de ces balises, on trouve des lments spciaux, propres JSP (scriptlets avec du code Java, tags personnaliss). Chaque page JSP est transforme par le container en une servlet : le schma suivant prsente le cycle de vie d'une page JSP

Cycle de vie d'une page JSP

Bien crire du JSP

On veillera respecter trois critres

Possibilit de rutilisation

par utilisation de tag libraries utilisation de tags au lieu de code Java les deux points prcdents, s'ils sont atteints, aident la maintenance. Veiller sparer ce qui est maintenu par le Webmaster de ce qui doit l'tre par le dveloppeur Java

Lisibilit

Facilit de maintenance

Donc utiliser des tag libraries

Architecture Modle 1

Architecture Modle 1

Cette architecture est valable pour de petites applications Elle prsente des problmes de

maintenance : la logique est mlange la prsentation, les pages sont ds lors plus compliques, moins lisibles et moins maintenables rutilisation : puisque la logique est place dans la prsentation, on ne sait pas l'utiliser ailleurs scurit : risque de dvoiler dans la page, des donnes sensibles lies l'accs la base de donnes

Architecture Modle 2 (MVC2)

Architecture Modle 2 (MVC2)


Permet de dvelopper/d'accder une grosse application entreprise. L'utilisation de javabeans par les pages JSP y est moins ncessaire. Les problmes prcdents sont rsolus par la sparation de la logique (servlet) et de la prsentation (page JSP).

Serveur

Lancer le serveur JBoss 4.2.1.GA:

dans Eclipse : ouvrez l'onglet Servers (Windows Show View Other Server Servers) dans cet onglet cliquez droite : New Server choisissez JBoss v 4.2, cliquez Next, entrez l'adresse o est install JBoss via le bouton Browse et cliquez sur Finish dans l'onglet Servers apparat maintenant JBoss 4.2 double cliquez dessus; dans la fentre qui s'ouvre suivez le lien "Open launch configuration" Ouvrez l'onglet Arguments Dans Program arguments vous devez mettre -c default b 0.0.0.0 Cliquez sur OK

Dveloppement

Dans Eclipse, vous crez un Dynamic Web Project : New Project Web Dynamic Web Project. Si votre projet utilise aussi des EJB 3.0, un serveur dapplication est obligatoire et dans ce cas dans Eclipse, crez un Enterprise Application Project (New Project J2EE Enterprise Application Project, donnez un nom, faites Next, puis Next, cochez Generate deployment descriptor, cliquez sur New Module et selectionnez EJB Module et Web Module) Quelle que soit la technique utilise, vrifiez que les jar pour les servlets et JSP (servlet-api.jar et jspapi.jar) soient dans votre classpath.

Dploiement

Avant dexcuter une servlet ou une page JSP, vous devez dployer votre application. Pour cela il vous faut crer un fichier war (web archive) si vous travaillez avec un Dynamic Web Project seul. Si vous dveloppez un Enterprise Application Project, il faut crer un fichier ear (entreprise archive, qui contient le fichier war et le fichier jar o sont placs les EJB). Pour dployer, il suffit de copier ce fichier war ou ce fichier ear dans la directory webapps de Tomcat ou deploy de JBoss. La cration de larchive dployer et le dploiement peut se faire en une seule tape dans Eclipse en exportant le projet concern sous forme de WAR ou EAR dans la directory voulue.

Une premire page JSP


<html> <body> <h2>Bonjour !</h2> <p>Il est <%= new java.util.Date()%></p> </body> </html>

Les lments de base - 1

Commentaires

HTML : <!-- transmis en sortie --> JSP : <%-- non transmis en sortie --%> <%! %> ou <jsp:declaration>...</jsp:declaration> <%! java.util Date date = new java.util.Date(); %> <%= %> ou <jsp:expression>...</jsp:expression> <%= new java.util.Date() %>

Dclarations

Expressions

Les lments de base - 2

Scriptlet <% %> ou <jsp:scriptlet></jsp:scriptlet>


<% String user = request.getAttribute("user"); if (user != null) { %> Bienvenue <% } %>

Objets implicites

request : HttpServletRequest response : HttpServletResponse out : JspWriter (extends PrintWriter) rarement utile session : HttpSession application : ServletContext config : ServletConfig page = this, Object pageContext : permet la recherche dans toutes les portes (page, request, session, application), PageContext, gnr par le container exception : Throwable, accessible dans les pages derreur

Les directives JSP


places entre <%@ <%@ page %> <%@ include %> <%@ taglib %>

%> ou <jsp:directive. />

les reprsentent des attributs de la forme


attribut = valeur

les directives (sauf include) sont places en tte de page JSP

La directive page - 1

<%@ page = "" = "" %> ou <jsp:directive.page = "" = "" /> les attributs possibles avec leurs valeurs sont

language = "java" seule valeur permise extends= "nomDeClasse" // dconseill import = liste exemple : import="java.util.*, java.io.*" ne doivent pas tre imports : java.lang.*, javax.servlet.*, javax.servlet.http.*, javax.servlet.jsp.* session = "true" ou "false" (dfaut : true)

La directive page - 2

buffer valeurs possibles : none ou xkb (ex : 32kb) autoFlush= "true" ou "false" (dfaut : true) isThreadSafe = "true" ou "false" (dfaut : true) info : texte pour getServletInfo() isErrorPage= "true" ou "false" (dfaut : false) errorPage valeur : url de la page derreur (prioritaire sur web.xml) contentType (dfaut : "text/html") pageEncoding (dfaut : "ISO-8859-1") isELIgnored = "true" ou "false" (dfaut : false) DeferredSyntaxAllowedAsLiteral = "true" ou "false" (dfaut : false) #{ permit comme littral ? trimDirectiveWhitespaces = "true" ou "false" (dfaut : false)

La directive include

<%@ include file="urlRelatif" %> ou <jsp:directive.include file="urlRelatif" /> Elle permet dinclure un fichier lendroit o est place la directive. Cette inclusion a lieu lors de la traduction en servlet. Rien ne garantit que, si le fichier inclus est modifi, la page lincluant sera recompile mais certains serveurs dapplication peuvent le faire. Exemple : inclure un header et un footer. Remarque : pour inclure un mme header et un mme footer dans toutes les pages, il vaut mieux crer une section <jspproperty-group> dans la section <jsp-config> de web.xml.

La directive taglib

On lutilise, en dbut de page JSP pour dclarer les librairies de tags (Tag Library) quon va utiliser. Une tag library est une collection de tags (xml) quon peut utiliser dans une page jsp. <%@ taglib %> ou <jsp:root xmlns:prefixe=uri
/> (prefixe est la valeur de prefix et uri la valeur d'uri)

Les se remplacent par une uri et un prefix. Ou par une tagdir et un prefix. Le prfixe est utilis pour faire appel un tag de la librairie.

La directive taglib - faon 1

Utiliser une uri absolue indiquant o se trouve le fichier .tld dcrivant la tag library
<%@ taglib uri="/WEB-INF/tld/uneTagLib.tld" prefix = "unPrefixe" %>

On utilise alors la librairie avec le prfixe indiqu :


<unPrefixe:afficher fichier="unFichier.gif" />

Dsavantage : ladresse du fichier .tld est hard cod dans la page jsp

La directive taglib - faon 2


Utiliser une uri relative, nomme. Son nom et sa valeur sont place dans le fichier web.xml Dans web.xml
<jsp-config> <taglib> <taglib-uri>/uneTagLib</taglib-uri> <taglib-location> /WEB-INF/tld/uneTagLib.tld </taglib-location> </taglib> </jsp-config>

Dans la page jsp


<%@ taglib uri="/uneTagLib" prefix="unPrefixe" %>

La directive taglib faon 3

Utiliser un fichier jar contenant la tag library et son fichier tld


<%@ taglib uri="/WEB-INF/lib/uneTagLib.jar" prefix="unPrefixe" %>

Dsavantage : le fichier .tld est daccs difficile. En cas de modification , il faut extraire puis reconstituer larchive. Avantage : tag library facile distribuer

La directive taglib faon 4


On utilise cette faon avec des fichiers de tags. Ils se terminent par un suffixe .tag ou .tagx. On indique via lattribut tagdir la directory o se trouvent les fichiers de tags. Cette directory doit tre /WEB-INF/tags ou une de ses sous directory
<%@ tagdir="/WEB-INF/tags/uneTagLib" prefix="unPrefixe" %>

Les actions

On distingue trois types dactions :


les actions standard les actions JSTL les actions personnalises (custom actions) <jsp:include> <jsp:forward> <jsp:useBean> <jsp:getProperty> <jsp:setProperty>

Les actions standard sont


Laction <jsp:include>

Elle permet dinclure un fichier au moment de la requte. Donc si le fichier inclus a t modifi, cest la nouvelle version qui est inclue.
<jsp:include page="autre.jsp" flush="true" />

Lattribut flush nest pas obligatoire. Sa valeur par dfaut est false. Le nom de la page peut tre calcul dynamiquement
<jsp:include page="${next}" />

On peut passer des paramtres la page inclue.


<jsp:include page="autre.jsp" > <jsp:param name="user" value="michel" /> </jsp:include>

L'action <jsp:forward>

Cette action, comme on s'y attend, effectue un forward vers une autre page.
<jsp:forward page="urlRelative" />

Comme pour <jsp:include>, on peut prciser des paramtres supplmentaires transmettre :


<jsp:forward page="/WEB-INF/jsp/login.jsp" > <jsp:param name="user" value="moi"/> <jsp:param name="password" value="xyz"/> </jsp:forward>

Laction <jsp:useBean> - 1

Lutilisation de javabeans est la premire faon de limiter le code Java dans la page jsp. Un javabean doit avoir
un constructeur sans paramtre pas de champs public un accs aux proprits via des getters et setters getXxx/setXxx pour une proprit xxx. <jsp:useBean id="nom" scope="" class="" type="" />

Laction <jsp:useBean> - 2

La valeur de id est le nom de l'instance cre ou rcupre. scope vaut "page", "request", "session" ou "application". "page" est la valeur par dfaut. Si un bean de ce nom existe dans ce scope il est rcupr s'il correspond la classe et/ou au type prcis (sinon c'est une erreur). class : la classe compltement qualifie du bean. Obligatoire si le bean doit tre cr. exemple : class = "java.util.Date"

Laction <jsp:useBean> - 3

type s'il est prsent doit indiquer le type de dclaration du bean. Il doit tre une superclasse de la classe du bean ou une interface implmente par le bean type ou class doit tre prsent. Cette action peut avoir un body Ce body n'est excut que si le bean est cr.
<jsp:useBean id="nom" scope="" class="" type="" > body tel que cration d'objet, setProperty </jsp:usebean>

L'action <jsp:getProperty>

Quand on utilise un Javabean, cette action permet d'obtenir la valeur de la proprit demande
<jsp:geProperty name="nomBean" property="xxx" />

Cette action a le mme effet que


<%= nomBean.getXxx() %>

Elle contribue encore supprimer le code Java dans la page JSP

L'action <jsp:setProperty>

Cette action permet de modifier une proprit du Javabean utilis. Elle admet quatre syntaxes

<jsp:setProperty name="nomDuBean" property="xxx" value="valeur" /> a le mme effet que <% nomDuBean.setXxx("valeur"); %> <jsp:setProperty nom= "nom" property="xxx" param="nomParam"/> associe automatiquement la valeur du paramtre indiqu comme valeur de la proprit xxx du bean. Ceci a le mme effet que <% nom.setXxx(request.getParameter("nomParam"); %>

L'action <jsp:setProperty>

<jsp:setProperty name="nom" property="xxx" /> associe automatiquement la valeur du paramtre xxx comme valeur de la proprit xxx du bean. Ceci a le mme effet que <% nom.setXxx(request.getParameter("xxx");%> <jsp:setproperty name="nom" property="*" /> associe automatiquement la valeur de chaque paramtre comme valeur de la proprit de mme nom du bean. Il faut bien entendu qu'une telle proprit existe sous peine d'erreur. Ceci a le mme effet que <% nom.setXxx(request.getParameter("xxx"); %> pour chaque paramtre xxx.

JSP et Servlets en MVC2


Une ou plusieurs servlets servent de contrleurs. Les pages jsp sont les vues. Elles appellent une servlet via un formulaire ou un lien. La servlet effectue la tche demande, stocke les rsultats dans la requte, la session ou l'application selon le cas et enfin, effectue un forward vers une autre page jsp. Celle-ci rcupre les rsultats via <jsp:useBean ou via l'Expression Language puis se charge de leur prsentation.

Expression language (EL)


Inspir d'ECMAScript qui est la version standardise de Javascript. Inspir galement de XPath EL. Dans le but de ne pas crer encore un nouveau langage d'expressions et de sembler familier un Webmaster. Introduit pour la premire fois dans JSTL puis incorpor dans JSP depuis la version 2.0 (qui incorpore aussi JSTL 1.1).

Syntaxe

Les expressions dEL scrivent interchangeablement


${expression} ou #{expression}

Toutefois dans certaines circonstances (par exemple dans les tags personnaliss (custom tags)), la notation ${expression} implique une valuation immdiate. Tandis qualors, #{expression}signifie que lvaluation de lexpression sera diffre (jusqu lexcution du tag).

Littraux

Boolens : true false Entiers : un signe est permis : -206 14 3

Flottants : un signe est permis ainsi quun exposant E ou e : -2.4 5. .5 42E-12 31.46e17 Strings : entre " " ou entre ' '. Utiliser \ pour considrer " ou ' littralement et \\ pour un \. On fera '${' pour le considr comme littral Valeur nulle : null

Valeurs par dfaut


En cas d'erreur, bien souvent des valeurs par dfaut seront affiches au lieu de gnrer une erreur exemple : ${17/0} affiche infinity ${user.nom}est vide si ${user} vaut null

Utilisation

Les expressions d'EL peuvent tre utilise dans

les attributs des tags <c:when test="${niveau != null}"> le corps de la page (template text) <table border="1"> <tr><td>Hello ${param[nom]}</td>

Objets prdfinis

applicationScope : Map contenant les paires (nom, valeur) des variables de porte (scope) application sessionScope : idem de porte session requestScope : idem de porte request pageScope : idem de porte page cookie : idem pour les cookies initParam : idem pour les paramtres d'initialisation param : Map contenant les paires (nom, 1re valeur) des paramtres header : idem pour les headers de request. paramValues: Map<String,String[]> contenant les paires (nom, tableau de toutes les valeurs) des paramtres headerValues : idem pour les headers pageContext : le PageContext

Oprateurs - 1

Par prsance dcroissante :


[] . () (les parenthses) - (unaire) not ! empty * / div % mod + - (binaire) < > <= >= lt gt le ge == != eq ne && and || or

Oprateurs - 2

Les oprateurs ! et not sont identiques. De mme pour

/ et div % et mod < et lt > et gt <= et le >= et ge == et eq != et ne && et and || et or

Oprateurs - 3

Les oprateurs . et [] sont interchangeables :

On peut crire ${user.nom} ou ${user["nom"]} On les utilise pour l'accs aux champs et l'accs au lments des Maps : ${param["nom"]} ou $param.nom

Accs aux variables

On peut accder aux variables stockes dans les diffrentes portes comme suit :

${sessionScope.caddie}en prcisant la porte ou ${caddie} sans prciser la porte. Dans ce cas, EL utilise le pageContext pour la chercher d'abord dans la page, puis la request, puis la session et finalement l'application, renvoyant la premire trouve. Si caddie contient une Collection articles, on peut crire ${caddie.articles[0].prix}pour accder au premier article (dans l'ordre de l'Iterator).

Les proprits peuvent tre embotes :

Dsactiver EL

Dans une page :

<%@ page isELIgnored="true" %> <jsp-config> <jsp-property-group> <url-pattern>/pasDEL/</url-pattern> <el-ignored>true</el-ignored> </jsp-property-group> </jsp-config> On peut prciser seulement une page dans <url-pattern> : <url-pattern>pasdel.jsp</url-pattern> ou toutes avec *.jsp

Dans un groupe de pages, via web.xml :

Dsactiver les scriptlets

A l'inverse, on peut interdire les scriptlets dans une, un groupe ou toutes les pages via le fichier web.xml :

<jsp-config> <jsp-property-group> <url-pattern> /pasDeScripts/ </url-pattern> <scripting-invalid> true </scripting-invalid> </jsp-property-group> </jsp-config>

Les fonctions

Une fonction EL correspond une mthode static d'une classe Java. Une telle fonction peut se mettre dans les attributs des tags ou dans le corps de la page. Elles peuvent avoir des paramtres. On les appellent en utilisant un prfixe

<MesFonctions:uneFonction("param")}

Ce prfixe est dclar dans une directive taglib, par exemple :

<%@ taglib uri="WEB-INF/tld/fonctions.tld" prefix="MesFonctions" %>

Voir dmo : Fonctions.java, fonctions.tld, salut.jsp, source.jsp. Fonctions embotes : voir souceMAJ.jsp

JSTL

Un problme reste encore : fournir une forme de logique de contrle. Ceci peut tre fait par scriptlet avec les problmes que l'on sait. Il faut crer une librairie de tags le permettant. JSTL en est une. La version 1.0 est parue en 2002. Depuis lors, adieu les scriptlets !

Installation de JSTL

Downloadez JSTL l'adresse http://jakarta.apache.org/taglibs. Suivez Downloads et choisissez Standard 1.1 Taglib Dcompressez l'archive. On peut alors travailler de deux manires

Placer standard.jar et jstl.jar dans le WEB-INF/lib de votre projet : Ils seront alors contenu dans votre fichier .war ou placer standard.jar et jstl.jar dans la directory lib de votre serveur d'application. Pour JBoss 4.2.1.GA, c'est inutile, il contient dj jstl. Vous n'avez donc rien faire. Veillez nanmoins ce que ces deux jar soient dans votre classpath (le Build Path de votre projet dans Eclipse). Pour JBoss 4.2.1.GA, vous devez seulement ajouter %JBOSS_HOME%/server/default/deploy/jbossweb.deployer/jstl.jar dans le Build Path. (il contient les deux jar de JSTL)

Utilisation de JSTL

Pour que votre projet puisse utiliser JSTL, il faut encore prciser dans votre web.xml o se trouvent les fichier .tld de JSTL Ouvrez standard.jar avec WinRar. Si vous travaillez avec JBoss, ouvrez leur version de jstl.jar avec WinRar. dans les deux cas dplacez-vous dans METAINF et extrayez les fichiers c.tld , fmt.tld, sql.tld et x.tld. Placez les dans la directory WEB-INF/tld de votre application. Ces 4 tld correspondent aux 4 tag libraries de jstl

Les 4 tag libraries

c.tld

core : logique de base formatage et internationalisation accs aux bases de donnes traitement de fichier xml

fmt.tld

sql.tld

x.tld

La librairie Core

On la dclarre avec
<%@ taglib uri= "http://java.sun.com/jstl/core" prefix ="c" %>

Dans web.xml on ajoute la dclaration de cet uri


<jsp-config> <taglib> <taglib-uri> http://java.sun.com/jstl/core </taglib-uri> <taglib-location> /WEB-INF/tld/c.tld </taglib-location> </taglib> </jsp-config>

La librairie Core - 1

<c:out value="${personne.adresse.ville}" default="inconnu" /> <c:set var="ville" value="" scope="" /> <c:remove var="ville" scope="" />

La librairie Core - 2

<c:catch var="exception"> </c:catch> <c:if test="${ville == 'Bruxelles'}"> </c:if> Il n'y a pas de else

La librairie Core - 3

<c:choose> <c:when test=""> </c:when> <c:when test=""> </c:when> <c:otherwise> </c:otherwise> </c:choose>

La librairie Core - 4

<c:forEach [var=""] items="collection" [varStatus=""]> </c:forEach> <c:forEach [var=""] [varStatus=""] begin="" end="" [step=""]> </c:forEach>

La librairie Core 5

<c:forTokens items="stringDeTokens" delim="dlimiteurs" [var=""] [varStatus=""] [begin=""] [end=""] [step=""]> </c:forTokens> begin doit tre >= 0. 0 est le dfaut. end doit tre >= begin. Le dernier token est le dfaut. step doit tre >= 1. 1 est le dfaut

La librairie Core - 6

<c:param name="" value=""/> ou <c:param name="" > valeur </c:param> permet de rajouter un paramtre (de requte) une url. Ne s'emploie qu'avec comme anctre <c:url>, <c:import> ou <c:redirect>

La librairie Core - 7

<c:import url=http://... [context=""] [var = "url"] [scope=""] [charEncoding=""] [varReader=""]/> Plus gnral que <jsp:include> Il permet d'inclure un fichier d'une autre application dploye sur le mme serveur si on prcise un context (dans le format renvoy par request.getContextPath()). On peut stocker le contenu du fichier inclus dans une variable avec var On peut accder au contenu via un Reader avec varReader. Dans ce cas, <c:import> doit avoir un body pour traiter le Reader qui est local l'action L'attribut scope indique la porte de var L'action <c:import> peut aussi avoir un body pour ajouter des paramtres avec <c:param>

La librairie Core - 8

<c:url value="une_url" [context=""] [var=""] [scope=""] /> Dfinit une url (relative ou absolue) Si le browser de la requte refuse les cookies, l'action pratique l'url rewriting Si var est prsent, l'url (rewrite) sera plac dans la variable indique, dans le scope indiqu (page par dfaut) Un attribut context permet de placer une url faisant partie d'une autre application du mme serveur Le tag peut avoir un body, pour ajouter des paramtres l'url.

La librarie Core - 9

<c:redirect url="" [context=""]/> Redirige la requte vers l'url indique, pratiquant l'url rewriting si ncessaire L'attribut context permet de prciser une page d'une autre application

Librairie de Formattage

On la dclarre avec
<%@ taglib uri= "http://java.sun.com/jstl/fmt" prefix ="fmt" %>

Dans web.xml on ajoute la dclaration de cet uri


<jsp-config> <taglib> <taglib-uri> http://java.sun.com/jstl/fmt </taglib-uri> <taglib-location> /WEB-INF/tld/fmt.tld </taglib-location> </taglib> </jsp-config>

Librairie de Formatage : Internationalisation (i18n) - 1

<fmt:setLocale value="" [scope=""]/> o value est par exemple "en_US", "fr_FR" ou "fr_BE" ou simplement "en", "fr", On peut dfinir une Locale par dfaut dans web.xml
<context-param> <param-name> javax.servlet.jsp.jstl.fmt.locale </param-name> <param-value>en</param-value> </context-param>

Idem avec fallbackLocale si le Locale demand n'est pas support par le serveur

Librairie de Formatage : Internationalisation (i18n) - 2

ResourceBundle :
ResourceBundle mesTrads = ResourceBundle.getBundle("MesTraductions", Locale.FRENCH); public class MesTraductions extends PropertyResourceBundle { MesTraductions() { super(new FileInputStream("mestrad.properties"); } } mestrad.properties

firstName=prnom lastName=nom

Librairie de Formatage : Internationalisation (i18n) - 3


<fmt:setBundle baseName="" [var="] [scope=""]/> baseName indique le nom de la classe du ResourceBundle : ex : "MesTraductions" y compris le nom de package. var, si prsent, sert stocker le bundle dans une variable qu'on prcisera lors d'un emploi futur Si var n'est pas prsent, on dfinit ainsi le ResourceBundle par dfaut Il suffit de placer le fichier MesTraductions_fr.properties ou MesTraductions_fr_FR.properties dans la directory src de votre projet. Le reste est automatique.

Librairie de Formatage : Internationalisation (i18n) - 4

On peut prciser un bundle par dfaut dans web.xml


<context-param> <param-name> javax.servlet.jsp.jstl.fmt.localizationContext </param-name> <param-value>messages.MesTraductions</param-value> </context-param>

Librairie de Formatage : Internationalisation (i18n) - 5


<fmt:message key="" [bundle=""] [var=""] [scope=""]/> Sans var, affiche le message correspondant la cl indique. La recherche de cette cl se fait dans le ResourceBundle par dfaut sauf si l'attribut bundle est prsent. Il indique le contenu d'une variable dfinie avec <setBundle var=""/> Si var est prsent, le message est plac dans la variable.

Librairie de Formatage : Internationalisation (i18n) - 6


Si le message attend des paramtres, on utilise <fmt:param value="objet" />

<fmt:message key="${clef}"> <fmt:param value="${prenom}"/> <fmt:param value="${nom}"/> </fmt:message> Dans le fichier .properties on a clef=Bonjour {0} {1}

Librairie de Formatage : Internationalisation (i18n) - 7


<fmt:bundle baseName="" [prefix=""]> dfinit un bundle localement baseName, comme dans setBundle prefix pour tre employ dans les fmt:message

<fmt:bundle baseName="MesTraductions"> <fmt:message key="trad.nom"/> <fmt:message key="trad.age"/> </fmt:bundle>

Librairie de Formatage : Internationalisation (i18n) - 8

Avec un prfixe :

<fmt:bundle baseName="MesTraductions" prefix="trad" > <fmt:message key="nom"/> <fmt:message key="age"/> </fmt:bundle>

Librairie de Formatage : Formatage des dates - 1

<fmt:setTimeZone value="" [var=""] [scope=""]/>


value doit tre une String ou une TimeZone Si var est prsent, la variable indique stockera le TimeZone. Sinon, le fuseau horaire est modifi.

<fmt:timeZone value=""> </fmt:timeZone>

dfinit une TimeZone locale au corps du tag qui est gnralement constitu de <fmt:formatDate>

Librairie de Formatage : Formatage des dates - 2

<fmt:formatDate value="date" [type="{time|date|both}"] [dateStyle="{default|short|medium|long|full}"] [timeStyle="{default|short|medium|long|full}"] [pattern="customPattern"] [timeZone="timeZone"] [var="varName"] [scope="{page|request|session|application}"]/>


timeZone est une String ou une TimeZone si var est prsent le rsultat est stock, sinon affich

Librairie de Formatage : Formatage des dates - 3

<fmt:parseDate value=dateString [type={time|date|both}] [dateStyle={default|short|medium|long|full}] [timeStyle={default|short|medium|long|full}] [pattern=customPattern] [timeZone=String ou TimeZone] [parseLocale=String ou Locale] [var=de type java.util.Date] [scope={page|request|session|application}]/>

Librairie de Formatage : Formatage des dates - 4

<fmt:parseDate> peut aussi tre utilis avec un body. Dans ce cas il n'y a pas d'attribut value et la valeur parse est le body.. Il est recommand de n'utiliser cette action qu'avec un pattern (de style SimpleDateFormat) car les dateStyle et timeStyle varient avec le Locale Si la chane parse ne correspond pas au format attendu, une exception se produit

Librairie de formatage : Formatage des nombres - 1

<fmt:formatNumber value=numericValue [type={number|currency|percent}] [pattern=customPattern] [currencyCode=currencyCode] [currencySymbol=currencySymbol] [groupingUsed={true|false}] [maxIntegerDigits=maxIntegerDigits] [minIntegerDigits=minIntegerDigits] [maxFractionDigits=maxFractionDigits] [minFractionDigits=minFractionDigits] [var=varName] [scope={page|request|session|application}]/>

Librairie de formatage : Formatage des nombres - 2

<fmt:formatNumber> peut aussi avoir un body. dans ce cas, il n'y a pas d'attribut value et le body est constitu de la valeur numrique formater. Le pattern est de style DecimalFormat. currencyCode est le code ISO 4217 de la monnaie. currencySymbol et currencyCode ne sont normalement pas indiqus tous deux. S'ils le sont c'est currencyCode qui prvaut. Si aucun des deux n'est prsent c'est la Locale qui dcide.

Librairie de formatage : Formatage des nombres - 3

<fmt:parseNumber value=numericValue [type={number|currency|percent}] [pattern=style DecimalFormat] [parseLocale=String ou Locale] [integerOnly={true|false}] [var=varName] [scope={page|request|session|application}]/> Peut aussi tre utilis avec un body au lieu de value. Une exception se produit si la string parse ne correspond pas un nombre.

La librairie SQL - 1

<sql:setDataSource {dataSource="dataSource" | url="jdbcUrl" [driver="driverClassName"] [user="userName"] [password="password"]} [var="varName"] [scope={page|request|session|application}]/>


Si on utilise dataSource, il faut y mettre une entre JNDI qui sera prfixe par java:comp/env/ sinon on utilise l'url, le driver, le user et le password comme en JDBC

La librairie SQL - 2

Syntaxe 1: Sans body


<sql:query sql="sqlQuery" var="varName" [scope={page|request|session|application}] [dataSource=dataSource] [maxRows="maxRows"] [startRow="startRow"]/>

La librairie SQL - 3

Syntaxe 2: Avec un body pour passer des paramtres


<sql:query sql="sqlQuery" var="varName" [scope={page|request|session|application}] [dataSource=dataSource] [maxRows="maxRows"] [startRow="startRow"]> </sql:query>

<sql:param >

La librairie SQL - 4

Syntaxe 3: Avec un body pour spcifier le query et ventuellement des paramtres <sql:query var="varName"
[scope={page|request|session|application}] [dataSource=dataSource] [maxRows="maxRows"] [startRow="startRow"]>

query [<sql:param >]


</sql:query>

La librairie SQL - 5

Le query peut contenir des ? Dans ce cas les paramtres les remplacent dans l'ordre des ? et des paramtres Si la variable stockant le rsultat s'appelle res, on la parcourt avec un <c:forEach var="ligne" items="${res.rows}"> Dans ligne on peut accder aux colonnes de la table : ligne.ID, ligne.NAVIRE_ID

La librairie SQL - 6

Syntaxe 1: Sans body


<sql:update sql="sqlUpdate" [dataSource=dataSource] [var="varName"] [scope={page|request|session|application}]/>

var si prsent, rcupre le nombre de lignes modifies

La librairie SQL - 7

Syntaxe 2: Avec un body pour passer des paramtres


<sql:update sql="sqlUpdate" [dataSource=dataSource] [var="varName"] [scope={page|request|session|application}]>

<sql:param >
</sql:update>

La librairie SQL - 8

Syntaxe 3: Avec un body pour spcifier le query et ventuellement des paramtres


<sql:update [dataSource=dataSource] [var="varName"] [scope={page|request|session|application}]>

update, insert ou delete [<sql:param >]

</sql:update>

La librairie SQL - 9

<sql:transaction [dataSource=dataSource] [isolation=isolationLevel]>

<sql:query> et <sql:update>
</sql:transaction> isolationLevel ::= "read_committed" | "read_uncommitted" | "repeatable_read" | "serializable"

La librairie XML - 1

dfinit des actions


de type core de type contle de type transformation soit dans WEB-INF/lib de votre projet soit dans une directory charge par le serveur d'application (dans JBoss, il se trouve dans %JBOSS_HOME%\lib\endorsed)

ncessite xalan.jar

La librairie XML - 2

On utilise les notations XPath pour voyager dans le fichier XML On a galement accs aux objets jstl prdfinis avec la syntaxe suivante

$brol (une variable de porte non prcise) $param:brol $header:brol $cookie:brol $initParam:brol $pageScope:brol (ou $requestScope, $sessionScope, $applicationScope)

La librairie XML - 3

Considrons le fichier livre.xml


<?xml version="1.0" encoding="ISO-8859-1"?> <livre> <titre> Professional JSP 2, 4th Edition </titre> <auteur>Brown et. al</auteur> <isbn>1-59059-513-0</isbn> <publi>December 2005</publi> <diteur>Apress</diteur> <url> http://www.apress.com/book/bookDisplay.html?bID=464 </url> </livre>

La librairie XML - 4

On pourra parser ce fichier en faisant <c:import url="livre.xml" var="url"/> <x:parse doc="${url}" var="livre"/> Puis on accdera aux donnes du fichier l'aide de la variable livre et par navigation : <x:out select="$livre/livre/titre"/> <x:out select="$livre/livre/auteur"/>

La librairie XML 5

Core : <x:parse {doc=XMLDocument|xml=XMLDocument} {var=var [scope=scope]|varDom=var [scopeDom=scope]} [systemId=systemId] [filter=filter]/> L'attribut xml est deprecated. doc ou xml doivent tre une String ou un Reader

La librairie XML 6

<x:parse {var=var [scope=scope]|varDom=var [scopeDom=scope]} [systemId=systemId] [filter=filter]>

Document XML parser

</x:parse>

systemId est l'uri de l'emplacement physique du fichier var, la variable qui contiendra le xml pars (+son scope) ou varDom (idem de type org.w3c.dom.Document (+son scope= scopeDom) filter= le filtre SAX appliquer au fichier XML (org.xml.sax.XMLFilter)

La librairie XML - 7

<x:out select=XPathExpression [escapeXml={true|false}]/>

escapeXML indique s'il faut que <,>,&,'," doivent tre remplacs par leurs codes respectifs : &lt;, &gt;, &amp;, &#039;, &#03; true par dfaut

<x:set select=XPathExpression var= [scope=]/>

La librairie XML - 8

Contrle :
body

<x:if select=XPathExpression [var=] [scope=]>

</x:if> <x:choose> <x:when select=""> </x:when> <x:otherwise> </x:otherwhise> </c:choose>

La librairie XML - 9

<x:forEach [var=] select=XPathExpression> [varStatus=varStatusName] [begin=begin] [end=end] [step=step]>

body content
</x:forEach>

La librairie XML - 10

Transformation XSLT Par exemple : <c:import url="livres.xml" var="livres" /> <c:import url="livres.xsl" var="xslt" /> <x:transform doc="${livres}" xslt="${xslt}"/> De nombreux attributs sont possibles, des paramtres et le document peut tre plac en body. Voir la spcification pour plus de dtails.

Contenu d'un fichier .tld


Les tags y sont dfinis : <description>, <name>, <tag-class> se comprennent d'eux mme. <body-content> peut prendre les valeurs

empty : pas de body JSP : n'importe qu'el code JSP scriptless : idem sans code Java tagdependent : c'est le tag qui dcide si le body est inclus ou valu. Le body est considr comme du texte simple mais peut contenir du code d'un autre langage que le tag passera un parseur pour ce langage

<attribute> a un <name>, peut tre <required> et accepter des request time expression ou non (<rtexprvalue>)

Custom tags ou Javabeans

Utilisez les Javabeans pour y stocker de l'information

Utilisez les customs tags (et les fonctions EL) pour y dfinir des traitements sur ces informations, de la logique lie la prsentation de ces informations. Les customs tags se rpartissent en

tag files simple tags classic tags

Tag files

Constitus de code JSP Placs dans WEB-INF/tags ou une de ses sous-directories Utiliss avec la version 4 de la directive taglib Il n'y a pas de .tld Semblable <jsp:include> avec plus de possibilits Exemple : copyright.tag:
Copyright 2007, www.ipl.be

usage : <%@ taglib prefix="tags" tagdir="/WEB-INF/tags %>


<tags:copyright> en xml : <jsp:root xmlns:tags="urn:jsptagdir:/WEB-INF/tags"

peut aussi tre indiqu dans le tag <html>

You might also like