Tag library (TL)
JavaServer Pages JSTL, EL
Krizsán Zoltán
1
[2014. május 19.] 1
Általános Informatikai Tanszék Miskolci Egyetem
Webalkalmazások fejlesztése tananyag
Tag library (TL)
Tartalom
Tag library (TL) Általános információk JSP Tagok Tag könyvtár (Tag library) Expression Language (EL)
Standard Tag Library:
JavaServer Pages
JSTL
Tag library (TL)
Általános információk
Outline
Tag library (TL) Általános információk JSP Tagok Tag könyvtár (Tag library) Expression Language (EL)
Standard Tag Library:
JavaServer Pages
JSTL
Tag library (TL)
Általános információk
TL és EL I JSP oldalon használható. I Szkript mentes dinamikus kódok. I Olyan akciók I I I I
amelyek gyakran használatosak, létrehoznak objektumokat, használnak objektumokat, kimenetre írnak
I Tag-eken keresztül érhetőek el (nem scriptlet) I Kiterjeszthetőek újakkal. I ECMAScript motivált.
Tag library (TL)
Általános információk
Célok I JSP írói nem fejlesztők. I Csak a megjelenítésért felelnek (View rész az MVC-ből). I Expression language EL. I I
Egyszerűen megjeleníthetőek az adatok. Könnyen írhatóak az attribútumok.
I Tag alapú vezérlési szerkezetek könnyen beilleszthetőek (feltételes, bejáró)
I Kikényszeríthetőek bizonyos Tag-ok (mások kizárásával)
Tag library (TL)
JSP Tagok
Outline
Tag library (TL) Általános információk JSP Tagok Tag könyvtár (Tag library) Expression Language (EL)
Standard Tag Library:
JavaServer Pages
JSTL
Tag library (TL)
JSP Tagok
JSP tagok formája I xml szintaxis I vagy van törzse, vagy nincs
tlt:tag> body
<
vagy
tlt:tag />
<
tlt:greeting date="<%= today %>" />
<
Tag library (TL)
JSP Tagok
Tag paraméter
I Paraméterek átadása I I
attribútumban (string esetén preferált) törzsben
I Ha nem String típusú a paraméter, akkor az adott típus valueOf(String) metódusa hívódik meg.
Tag library (TL)
Tag könyvtár (Tag library)
Outline
Tag library (TL) Általános információk JSP Tagok Tag könyvtár (Tag library) Expression Language (EL)
Standard Tag Library:
JavaServer Pages
JSTL
Tag library (TL)
Tag könyvtár (Tag library)
Tag library I Akciók gyűjteménye. I tablib direktívákon keresztül érhető el. I URI (Universal Resource Identifier) alapján azonosított. I Tag Library Description (TLD) file írja le a szabályokat I tag kezelő osztály implementálja az akciókat. I JSP konténer használja. I A JSP oldalon deklarálni kell. I formája osztály I I
jar file-ba csomagolt (WEB-INF/lib). WEB-INF/classes belül
Tag library (TL)
Tag könyvtár (Tag library)
Tag-ek hozzárendelése
I web.xml alapján I tablib -> TLD I prefix alapján („c:” vagy „x:”)
1. feloldja TLD erőforrás útvonalat az URI alapján 2. objektumot a TLD útvonal alapján I TLD erőforrás útvonalat = url, a protokol és host nélkül, „/”-el kezdődik. A webapp root-hoz fűzik.
Tag library (TL)
Tag könyvtár (Tag library)
Új tag létrehozása
I tag kezelő osztály definiálása (megfelelő metódusok) I I I
doStartTag doEndTag release
I tag deklarálása a leíróban
Tag library (TL)
Tag könyvtár (Tag library)
Tag attribútummal Egy ilyen tag használat:
Ezeket igényli: private AttributeClass attr1; setAttr1(AttributeClass ac) { ... } AttributeClass getAttr1() { ... } azaz lenni kell [set/get]Attribute metódusoknak, és a leíróban:
...
attr1 <required>true|false|yes|no true|false|yes|no
Tag library (TL)
Tag könyvtár (Tag library)
Tag handler osztály
1 public class SimpleTag extends TagSupport { 2 public int doStartTag() throws JspException { 3 try { 4 pageContext.getOut().print("Hello from doStartTag()"); 5 return EVAL_BODY_INCLUDE; // Allow text in the body of the tag. 6 } catch(IOException ioe) { 7 throw new JspException(ioe.getMessage()); 8 } 9 } 10 public int doEndTag() throws JspException { 11 try { 12 pageContext.getOut().print("Hello from doEndTag()"); 13 return EVAL_PAGE;// Continue evaluating the page. 14 } catch(IOException ioe) { 15 throw new JspException(ioe.getMessage()); 16 } 17 } 18 }
Tag library (TL)
Tag könyvtár (Tag library)
Tag osztály életciklusa
= new (); (...); (...); ( ); ( ); (); (); ();
ATag t ATag t setPageContext t setParent t setAttribute1 value1 t setAttribute2 value2 t doStartTag t doEndTag t release
. . . . . . .
Tag library (TL)
Tag könyvtár (Tag library)
Tag Library Descriptor (TLD)
I XML doksi I Leírja a tag könyvtárat I JSP konténer használja, amikor jsp oldalt értelmez. I A könyvtár egészét, és az egyes elemeket írja le. I kiterjesztése .tld I WEB-INF vagy azon belüli mappák valamelyikében van. I bármely jar file-ban lehet (META-INF alatt)
Tag library (TL)
Tag könyvtár (Tag library)
Tablib példa definíció (web.xml): /myPRlibrary /WEB-INF/tlds/PRlibrary_1_4.tld használat a JSP-ben:
%
=
=
< @ taglib uri "/tlt" prefix "tlt"
%>
és ezután használható (ha van ilyen definiálva):
:
/>
Tag library (TL)
Tag könyvtár (Tag library)
Taglib leíró (közös rész)
description
< > Simple Math Tag Library. Contains ACME sound extensions with helpful voice annotations that describe how to use the tags in this library. < > < > < > < >math< >
/description tlib-version 1.0 /tlib-version short-name /short-name
Tag library (TL)
Tag könyvtár (Tag library)
Taglib leíró (egy elem) <description>Adds two numbers add add com.foobar.tags.AddTag empty x java.lang.Double y java.lang.Double
Tag library (TL)
Expression Language (EL)
Outline
Tag library (TL) Általános információk JSP Tagok Tag könyvtár (Tag library) Expression Language (EL)
Standard Tag Library:
JavaServer Pages
JSTL
Tag library (TL)
Expression Language (EL)
EL I Egyszerű szkript nyelv. I JSP konténer futtatja I ${expr} és #{expr} használata I JSTL-el hatékony igazán, de önállóan is lehet használni. I Akkor dolgozzák fel, amikor a vezérlés odaér. I Az akciók attribútumai lehetnek, futásidejű kifejezések helyett. I A funkciókat java statikus metódusok implementálják.
:
=
/>
Tag library (TL)
Expression Language (EL)
EL típusai I kiértékelő (eval) I I
érték metódus: [ns:]f([a 1 [,a 2 [,...[,a n ]]]]), ahol az ns a namespace
I literál I összetett (composite): “ ${firstName} ${lastName}” I Kiértékelés ideje (ugyanúgy értékelik ki) I
I
${expr}: azonnali (akkor fordítják le, amikor a jsp-t, és akkor futtatják, amikor a jsp-t) #{expr}: késleltetett, nem értékelik ki, amíg nincs rá szükség
I Beágyazott EL nem lehet ${item[${i}]!
Tag library (TL)
Expression Language (EL)
Kiértékelő kifejezés
I Lehet jobb és bal érték is. I bal érték lehet: ${name}, ${employee.name} I bal érték I I
egyszerű változó objektum I a . (pont operátor) I []
I A kívánt típusra konvertálódik automatikusan.
Tag library (TL)
Expression Language (EL)
Attribútumok elérése (EL)
I A jsp oldalon elérhető attribútumokat látja. I PageContext.findAttribute("azon”) metódust használja (null-t ad vissza ha nem talált.).
I Az attribútum lehet: I I I I
page (oldal) request (kérés) session application
Tag library (TL)
Expression Language (EL)
Implicit objektumok az EL-ben I pageScope I requestScope I sessonScope I applicationScope I param: param[„nev” ] : első értéket adja vissza I paramValues: paramValues[„minden” ]: minden értéket sztringek tömje (checkbox)
I header, headerValues, cookie, initParam
Tag library (TL)
Expression Language (EL)
Operátorok az EL-ben
I Használhatjuk nevüket vagy jelüket. I == (eq), != (ne), < (lt), > (gt), / (div), % (mod) I empty: prefix operátor a null érték vizsgálatára
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
Outline
Tag library (TL) Általános információk JSP Tagok Tag könyvtár (Tag library) Expression Language (EL)
Standard Tag Library:
JavaServer Pages
JSTL
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
JSTL Célok
"The ultimate goal of JSTL is to help simplify JavaServer
Pages
(JSP ) page authors’ lives. A page author is someone who is responsible for the design of a web application’s presentation layer using JSP pages. Many page authors are not fluent in any programming language.”
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
JSTL kategóriái I <%@ t a g l i b
p r e f i x =" c "
u r i =" h t t p : / / j a v a . s u n . com / j s p / j s t l / c o r e "%>
I általános célú I feltételes vezérlés I iteráló, bejáró I URL-hez kapcsolódó <%@
taglib
p r e f i x =" f m t "
u r i =" h t t p : / / j a v a . s u n . com / j s p / j s t l / f m t " %>
I lokalizációs
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
JSTL kategóriái II I formázási <%@
taglib
p r e f i x =" s q l "
u r i =" h t t p : / / j a v a . s u n . com / j s p / j s t l / s q l " %>
I SQL (szerintem ez a modell dolga) <%@ t a g l i b
p r e f i x =" x "
u r i =" h t t p : / / j a v a . s u n . com / j s p / j s t l / x m l " %>
I XML feldolgozó
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
JSTL példa I
1
2
param :
3
values :
v a r=" aParam "
4
5
6 7 8
i t e m s=" $ { p a r a m V a l u e s } ">
v a l u e=" $ { aParam . k e y } " /> v a r=" a V a l u e "
i t e m s=" $ { aParam . v a l u e } ">
v a l u e=" $ { a V a l u e } " />
c : f o r E a c h> c : f o r E a c h>
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
Adatok kiírása I I kiértékeli a kifejezést, majd a JspWriter-t használva kiírja. I escapeXml: (true) speciális karaktereket kódolja (<,>, &, ... -> <,...)
I lehetőség ad a default érték megadására 1
Without
2
3
a
body
v a l u e=" v a l u e "
[ e s c a p e X m l=" { t r u e | f a l s e } " ]
[ d e f a u l t =" d e f a u l t V a l u e " ]
/>
4 5
With
6
7 8
a
body v a l u e=" v a l u e "
default c : o u t>
value
[ e s c a p e X m l=" { t r u e | f a l s e } " ]>
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
Változó vagy tulajdonság beállítása I
I létrehoz, vagy beállít I value vagy törzs értéke lehet EL I Beállíthatunk: I I I
Bean tulajdonságát Map értéket oldal, kérés, session, alkalmazás változót
I Null érték töröl. I a var vagy target kötelező.
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
Változó vagy tulajdonság beállítása II 1
Syntax
1:
Set
attribute 2 3
the
value
of
a
scoped
variable
using
value
v a l u e=" v a l u e "
v a r=" varName " [ s c o p e=" { p a g e | r e q u e s t | s e s s i o n | a p p l i c a t i o n } " ] />
4 5
Syntax
2:
body 6
Set
the
value
of
a
scoped
variable
using
content
v a r=" varName "
[ s c o p e=" { p a g e | r e q u e s t | s e s s i o n | a p p l i c a t i o n } " ]> 7 8
body
content
c : s e t>
9 10
Syntax
3:
Set
attribute
a
property
value
of
a
target
object
using
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
Változó vagy tulajdonság beállítása III
11 12
v a l u e=" v a l u e "
t a r g e t =" t a r g e t "
p r o p e r t y=" p r o p e r t y N a m e " />
Syntax
property
13 14
4:
Set
a
of
a
target
object
using
content 15 16 17
t a r g e t =" t a r g e t "
content
c : s e t>
p r o p e r t y=" p r o p e r t y N a m e ">
body
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
Változó törlése I
1 2
v a r=" varName "
[ s c o p e=" { p a g e | r e q u e s t | s e s s i o n | a p p l i c a t i o n } " ] />
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
Feltételes vezérlés I
1 2 3
t e s t =" $ { u s e r . v i s i t C o u n t
This c : i f >
is
your
first
visit .
== 1 } "> Welcome
to
the
site !
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
Több lehetőség közül egy I 1 2
3
t e s t =" $ { u s e r . c a t e g o r y ==
4
c : when>
5
6
t e s t =" $ { u s e r . c a t e g o r y ==
c : when>
8
9
t e s t =" $ { u s e r . c a t e g o r y ==
...
10
c : when>
11
13 14
’ member ’ } " ?>
...
7
12
’ t r i a l ’ } " ?>
...
... c : o t h e r w i s e> c : c h o o s e>
’ v i p ’ } " ?>
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
If/then/else I
1 2 3
t e s t =" $ { c o u n t == 0 } "> records
4
c : when>
5
6
7
selection .
8 9
your
selection .
v a l u e=" $ { c o u n t } " />
c : o t h e r w i s e> c : c h o o s e>
matched
records
matched
your
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
Kollekciókat feldolgozó tag-ek I I Minden j2SE kollekciót támogat (java.util.Collection) I tömböket (primitív-eket is) I java.util.Iterator és java.util.Enumeration I vesszővel elválasztott szavakat 1
< t a b l e>
2
3
v a r=" c u s t o m e r "
< t r>
4
c : f o r E a c h>
5
t a b l e>
i t e m s=" $ { c u s t o m e r s } ">
v a l u e=" $ { c u s t o m e r } " /> t d> t r>
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
map feldolgozása I
1
2
Next
3
v a r=" e n t r y "
element
c : f o r E a c h>
is
i t e m s=" $ { m y H a s h t a b l e } ">
v a l u e=" $ { e n t r y . v a l u e } " />
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
foreach A törzs részt a JSP dolgozza fel és küldi JspWriter-nek 1 2
Syntax
1:
Iterate
over
a
collection
[ v a r=" varName " ]
3
[ v a r S t a t u s=" v a r S t a t u s N a m e " ]
4
[ b e g i n=" b e g i n " ]
5
body
6
c : f o r E a c h>
of
objects
i t e m s=" c o l l e c t i o n "
[ e n d=" e n d " ]
[ s t e p=" s t e p " ]>
content
7 8 9
Syntax
2:
Iterate
a
fixed
number
of
times
[ v a r=" varName " ]
10
[ v a r S t a t u s=" v a r S t a t u s N a m e " ]
11
b e g i n=" b e g i n "
12
body
13
c : f o r E a c h>
e n d=" e n d "
content
[ s t e p=" s t e p " ]>
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
URL feldolgozás I kódolás: 1
v a l u e=" h t t p : / / acme . com / e x e c / r e g i s t e r "
v a r=" m y U r l "> 2
name=" name "
3
name=" c o u n t r y "
4
v a l u e=" $ { p a r a m . name } " /> v a l u e=" $ { p a r a m . c o u n t r y } " />
c : u r l>
5 6
h r e f ’=
v a l u e=" $ { m y U r l } " />’> R e g i s t e r a>
kontextus beillesztés: 1
v a l u e=" / a d s / l o g o . h t m l " />
Ha ezt az /foo web kontextushoz tartozó bármely jsp-ben írták, akkor:
/foo/ads/logo.html
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
Erőforrás beillesztés I I Külső erőforrásokat is lehet. I Más protokollal is. I Használhatjuk az
url
és
param
tag-eket.
I Alapesetben beilleszti a tartalmat az adott helyre: 1
u r l =" f t p : / / f t p . acme . com /README" />
De lehet a tartalmat egy változóba is (scope megadható): 1
2
v a r=" c u s t o m e r s " />
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
Átirányítás I
1
u r l =" h t t p : / / acme . com / r e g i s t e r " />
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
Lokalizáció 1
<%@
taglib
u r i =" h t t p : / / j a v a . s u n . com / j s p / j s t l / c o r e "
p r e f i x =" c " %> 2
<%@
taglib
u r i =" h t t p : / / j a v a . s u n . com / j s p / j s t l / f m t "
p r e f i x =" f m t " %> 3
4
5
< t i t l e >JSTL
6
h e a d>
7
8
v a l u e=" e n " />
9
b a s e n a m e=" com . t u t o r i a l s p o i n t . E x a m p l e "
fmt : message
Tag t i t l e >
v a r=" l a n g " /> 10
k e y=" c o u n t . o n e "
b u n d l e=" $ { l a n g } " />
11
k e y=" c o u n t . t w o "
b u n d l e=" $ { l a n g } " />
12
k e y=" c o u n t . t h r e e "
13
b o d y>
14
h t m l>
b u n d l e=" $ { l a n g } " />
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
XML feldolgozás
I Az általános elemeknek van xml párja I I
c:out - x:out c:set - x:set
I Első lépés a feldolgozás: <x:parse>
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
XML feldolgozás I 1
u r l =" h t t p : / / acme . com / c u s t o m e r ? i d =76567 "
v a r=" x m l " /> 2
<x : p a r s e
x m l=" $ { x m l } "
v a r=" d o c " />
3 4
5
<x : o u t
s e l e c t =" $ d o c / name " />
6
<x : o u t
s e l e c t =" $ d o c / a d d r e s s " />
XML
data
via
XPath
expressions
7 8
9
<x : s e t
a
scoped
variable
v a r=" c u s t N a m e "
−−>
s c o p e=" r e q u e s t "
s e l e c t =" $ d o c / name " />
−−>
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
XML transzformáció I
1
u r l =" h t t p : / / acme . com / c u s t o m e r s "
2
u r l =" /WEB−INF / x s l t / c u s t o m e r L i s t . x s l "
3
<x : t r a n s f o r m
v a r=" x s l t " /> x m l=" $ { x m l } "
x s l t =" $ { x s l t } " />
4 5
<x : t r a n s f o r m
6
<x : p a r a m
7
x m l=" $ { x m l } "
name=" f o o "
x : t r a n s f o r m
x s l t =" $ { x s l t } ">
v a l u e=" f o o − v a l u e " />
v a r=" x m l " />
Tag library (TL)
Standard Tag Library:
JavaServer Pages
JSTL
Servlet vs JSP vs EL + JSTL 1
o u t . p r i n t l n ( " F i r s t
2
+
3
"
1 2
" ) ;
F i r s t p>
1
F i r s t
3
Name : b>
<%= r e q u e s t . g e t P a r a m e t e r ( " f i r s t _ n a m e " )%>
3
2
Name: b>"
r e q u e s t . g e t P a r a m e t e r ( " f i r s t _ n a m e " ) + "\n" +
Name : b> v a l u e=" $ { p a r a m [ " f i r s t _ n a m e " ] } "
/>