Title: JSTL JSP Standard Tag Library
1JSTLJSP Standard Tag Library
- Par Bendjaballah Billel Mehdi
- (Billelmehdi_at_yahoo.com)
Master 2 pro GI option SRR 2004-2005
2Sommaire
- Introduction
- Servlets et JSP
- Tag Library avec JSP
- JSTL
- Expression Language EL
- Exemples
3Introduction
- Profusion des langages de programmation de pages
dynamiques - CGI, PHP, ASP (.NET)
- Servlets et JSP (JavaServer Pages)
- Conteneur web Jakarta Tomcat
- Caractéristiques des grands projets
dapplications Web. - Plusieurs équipes spécialisées.
- Séparation des tâches.
- Architecture en modèle MVC (Model View
Controller) - Model Logique métier (EJB,DBMS)
- View Présentation (JSP, JSTL,..)
- Controller Servlets
4Servlets
- Classes Java
- Générer des Pages HTML dynamiques depuis des
requêtes - out.println() pour générer du HTML.
- Inconvénients
- Code illisible si la page à générer est
volumineuse (Maintenance) - Difficulté à faire la mise en page.
- Développeur ou web designer?
Public class MyServlet extends HttpServlet
public void doGet(HttpServletRequest
req,HttpServletReponse res) PrintWriter out
res.getWriter() out.println("lthtmlgtltheadgtlttitlegt
Hellolt/titlegtlt/headgt") out.println("ltbodygtHello
Servlet Testlt/bodygtlt/htmlgt")
5JSP
- Création de contenu web dynamique simplifiée avec
JSP - Quelques notions sur JSP
- Éléments de script
- Scriplets lt code java gt
- Déclarations lt! Déclarations gt
- Expressions lt expression gt
- Syntaxe XML
- ltjspforward page"forward.jsp" /gt
- ltjspinclude page"result.jsp" /gt
- Directives
- lt_at_page import"java.util." gt
- lt_at_taglib prefix"c" uri"WEB-INF/tld/core.tld" gt
6Servlets et JSP
- Il est Possible de faire coopérer des Servlets
avec les JSP - JSP pour laffichage allégée en code java
(présentation) - Servlets pour le traitement des requêtes et
travail en arrière plan plus de code HTML - Modèle MVC en Struts et JSF
7Tag Library TLD
- Introduites avec la version JSP 1.1
- Avantages
- Étendre les balises JSP standards
- Balises spécifiques à un cas dusage
- Réduire lutilisation des scriplets
- Améliorer la lisibilité de la page JSP
- Libérer les concepteurs de pages du code Java
- Mise en oeuvre
- Classe Java Handle avec la librairie
javax.servlets.jsp.tagext - Fichier file.tld descripteur du tag
- Page JSP utilisant la nouvelle balise
8Tag Library ExempleHello World
- La classe Java (Class handler)
Import javax.servlet.jsp.tagext. Public class
Hello extends TagSupport public int
doStartTag() throws JspException try
pageContext.getOut().print("Hello World")
catch (Exception ex) throw new
JspException("IO problems") return
SKIP_BODY
9Tag Library ExempleHello World
lt?xml version"1.0" ?gt lt!DOCTYPE taglib PUBLIC
"-//Sun Microsystems, Inc.//DTD JSP Tag Library
1.1//EN" "http//java.sun.com/j2ee/dtds/web-jsptag
lib_1_1.dtd"gt lttaglibgt lttlibversiongt1.0lt/tlibv
ersiongt ltjspversiongt1.2lt/jspversiongt lt!--
Hello tag --gt lttaggt ltnamegthellolt/namegt
lttagclassgtbasic.Hellolt/tagclassgt
ltbodycontentgtemptylt/bodycontentgt ltinfogt Tag
that Print Hello World lt/infogt lt/taggt lt/taglibgt
10Tag Library ExempleHello World
- Utilisation
- Dans le web.xml
- Dans la page JSP
ltweb-appgt lttaglibgt lttaglib-urigt
http//www.ecom.com/taglibs/utilitytags
lt/taglib-urigt lttaglib-locationgt
/WEB-INF/tld/utilitytags.tld lt/taglib-locationgt
lt/taglibgt lt/web-appgt
lt_at_ taglib uri"http//www.ecom.com/taglibs/utilit
ytags" prefix"h" gt . . . lthhello/gt . . .
11JSTL
- Depuis la version JSP 1.2
- Spécification développé par le groupe dexperts
JSR 52 - Collection de Tag Librairies personnalisées qui
implémentent la plus part des fonctions communes
aux pages web - Itérations et conditions (core)
- Formatage des données (format)
- Manipulation de XML (xml)
- Accès au bases de données (sql)
- Utilisation du langage EL (Expression Language)
- Avantages
- Code simple, lisible et facile à maintenir
- Le concepteur de page est libéré de code Java
- Évite au développeur décrire à chaque fois les
fonctions de bases. -
12EL Expression Language
- Spécification de EL sous lautorité du groupe
dexpert JSR-152 pour JSP 1.3 - Le JSR-52 et JSR-152 travail ensemble sur la
spécification de lExpression Language - Deux version une pour JSTL et lautre pour JSP
1.3 - En JSTL il est utilisé uniquement dans la valeur
dun attribut - ltprefixtag attr1" expr " /gt
- Il est invoqué exclusivement via la syntaxe
expr
13EL Expression Languageobjets prédéfinies
- Un identificateur dans EL fait référence à une
variable retourné par lappel de
pageContext.findAttribute(identificateur) et qui
est dans la portée (scope) page, request,
session ou application. - var pageContext.getAttribute("var")
- Objets implicites
- pageScope, requestScope, sessionScope,
applicationScope - Accès au paramètres dune requête HTTP via param
(objet de type Map) et paramValue - Un objet implicite pageContext qui donne accès
aux propriétés associés au contexte de la page
JSP
14EL Expression LanguageOpérateurs
- Opérateurs relationnels ( ! lt gt lt gt),
arithmétiques ( - / ) et logiques (
!) - Lopérateur pour accéder au objets de type
Map, Array et List -
- Ex param"p1" param.get("p1")
-
-
15JSTLcore tag library
- Fonction de base
- Fonction de teste
- Fonction itérative
- SQL
- XML
-
16JSTLcore tag library
- Fonctions de base
- Affichage
- ltc out value" expression " /gt lt
expression gt - Affectation
- ltcset value"value" var" varName " scope"
application " /gt - lt pageContext.setAttribute("varName",value,SCOPE)
gt - Exception java.lang.Throwable
- ltccatch var"varName" gt
- actions a surveiller
- lt/ccatchgt
- lt try
- actions à surveiller
- catch(Throwable varName)
- gt
17JSTLcore tag library
- Les conditions
- 1- simple if(cond)
-
- 2-choix multiple if/else
lt if(user.visitCount 1) gt lt "Prmière
visite.Bienvenue" gt lt gt
ltcif test"user.visitCount 1"gt ltcout
value"Première visite.Bienvenue!" /gt lt/cifgt
ltcchoosegt ltcwhen test"count 0gt Pas
de visite! lt/cwhengt ltcotherwisegt ltcout
value"count"/gt visiteurs. lt/cotherwisegt lt/cc
hoosegt
lt If(count 0) gt lt Votre compte est vide
gt lt else gt lt count"visiteurs" gt lt gt
18JSTLcore tag library
- Les itérations avec la boucle for/while
- en JSP
lt_at_page import"java.util." gt . . . . lt Member
user null Collection users
session.getAttribute("members") Iterator it
users.iterator() while(it.hasNext()) user
(Member) it.next() gt lt "nom
"user.getName() gt lt gt
19JSTLcore tag library
- Les itérations avec la boucle for/while
- forEach
ltcforEach varuser itemssessionScope.members
begin end stepgt ltcout value"nom
user.name" /gt lt/cforEachgt
20JSTLcore tag library
- SQL
- Faire des requêtes
- Accès au résultat simplifié
- Faire des mises à jour
- Faire des transactions
21JSTLSQL
- Data source est de type Javax.sql.DataSource
- ltsqlquery var"customers" dataSource"dataSourc
e"gt - SELECT FROM customers
- WHERE country Algeria
- ORDER BY lastname
- lt/sqlquerygt
- lttablegt
- ltcforEach var"row" items"customers.rows"gt
- lttrgt
- lttdgtltcout value"row.lastName"/gtlt/tdgt
- lttdgtltcout value"row.firstName"/gtlt/tdgt
- lttdgtltcout value"row.address"/gtlt/tdgt
- lt/trgt
- lt/cforEachgt
- lt/tablegt
22JSTLSQL
- Data source est de type Javax.sql.DataSource
- lt_at_page import"java.sql.,javax.sql." gt
- lt Connection con dataSource.getConnection
- Statement stm con.createStatement()
- ResultSet customers stm.executeQuery("SELECT
FROM customers - WHERE country Algeria
- ORDER BY lastname")
- gt
- lttablegt
- lt while(customers.next()) gt
- lttrgt
- lttdgtlt customers.getString("lastName") gtlt/tdgt
- lttdgtlt customers.getString("lastName") gtlt/tdgt
- lttdgtlt customers.getString("lastName") gtlt/tdgt
- lt/trgt
- lt gt
- lt/tablegt
23JSTLSQL
Les transactions
- ltsqltransaction dataSourcedataSource
- isolationisolationLevelgt
- ltsqlquerygt and ltsqlupdategt statements
- lt/sqltransactiongt
- isolationLevel "read_committed"
- "read_uncommitted"
- "repeatable_read"
- "serializable"
24JSTLXML
- ltxparsegt parse un document XML par sa DTD
- ltxoutgt Évalue une expression Xpath et affiche le
résultat - ltxtransformgt applique les transformations dune
feuille de style XSLT sur un document XML
25JSTLlookup EJB Tag
- Définition dun tag pour faire le lookup sur un
EJB - En JSP plusieurs instructions complexes
- Le concepteur de page doit connaître java, les
EJB et le mécanisme de lookup.
lt_at_page import"javax.naming.,java.rmi.,java.ejb
." gt lt_at_taglib prefix"ejb" uri"" gt lt
Context c new InitialContext() Object obj
c.lookup("javacomp/env/ejb/Admin") EJBHome
home PortableRemoteObject.narrow(obj,EJBHome.cla
ss) gt
26JSTLlookup EJB Tag
- Entrée nom JNDI de lEJB nom de la class Home
- Sortie Objet de type EJBHome sauvegardé dans
session -
ltejblookup var"varName" ejbname"JndiName" ho
mename"HomeClassName" /gt
27JSTLlookup EJB Tag EJBLookupTag.java
- public int doStartTag() throws JspException
- Context c
- try
- c new InitialContext()
- Object obj c.lookup("javacomp/env/e
jb/"ejbname) - home (EJBHome) PortableRemoteObject.narrow(
obj,homename) - if(home null)
- throw new JspException("EJBLookup
TagUnable to lookup "ejbname) -
- catch (NamingException ne)
- throw new JspException("EJBLookupTag
Caused by "ne.getMessage()) -
- return SKIP_BODY
-
-
- public int doEndTag() throws JspException
-
- pageContext.setAttribute(home, homeClass,
PageContext.PAGE_SCOPE) -
28JSTLlookup EJB Tag ejb.tld
- lttaglibgt
- .
- lttaggt
- ltnamegtlookuplt/namegt
- lttag-classgtcom.ecom.jstl.EJBLookupTaglt/tag-cla
ssgt - ltbody-contentgtEMPTYlt/body-contentgt
- ltattributegt
- ltnamegtvarlt/namegt
- ltrequiredgttruelt/requiredgt
- ltrtexprvaluegtfalselt/rtexprvaluegt
- lt/attributegt
- ltattributegt
- ltnamegtejbnamelt/namegt
- ltrequiredgttruelt/requiredgt
- ltrtexprvaluegttruelt/rtexprvaluegt
- lt/attributegt
- ltattributegt
- ltnamegthomenamelt/namegt
- ltrequiredgttruelt/requiredgt
29JSTLlookup EJB Tag web.xml et index.jsp
- ltweb-appgt
- lttaglibgt
- lttaglib-urigt/jstl-ejb-tagliblt/taglib-urigt
- lttaglib-locationgt/WEB-INF/ejb.tldlt/taglib-locat
iongt - lt/taglibgt
- lt/web-appgt
- lt_at_taglib prfix"ejb" uri"/jstl-ejb-taglib" gt
- . . .
- ltejblookup var"admin" ejbname"Admin"
homename"AdminHome" /gt
30JSTLQuestions?
Questions?
31JSTLDemo
La démo