JavaServer Pages JSTL, EL



Hasonló dokumentumok
Nagy Gusztáv Java programozás 1.3. verzió február

A könyv nyomtatott verziója megvásárolható a könyvesboltokban, és a kiadó webáruházában:

Programozási ismeretek. Visual Studio 2008/2010 Express Edition Ismerkedés a fejlesztőrendszerrel

Gregorics Tibor Egyszerű programok C++ nyelvi elemei 1

DRAFT. PL/SQL programozás. Alkalmazásfejlesztés Oracle 10g-ben ISBN PL/SQL programozás

<-...erre, erre...! Solymosi Norbert

Silverlight 4 A technológia, és ami mögötte van fejlesztőknek HTML 5 ismertetővel bővített kiadás

betűk, az angol kis- ás nagybetűk: A Z és a z; számjegyek: 0 9; egyébkarakterek: ()+-/<>=!~^;:.@%,#$&{}?[] szóköz, tabulátor, kocsivissza.

SQL (Structured Query Language) strukturált lekérdező nyelv rövid ismertetése Tartalomjegyzék:

Biztonságos programok fejlesztése és a web alapú rendszerek biztonsági sajátosságai

Fazekas Gábor. Operációs rendszerek. mobidiák könyvtár

Bevezetés az R-be. Oktatási segédlet VÁZLAT 0.2. Abari Kálmán. DE, Pszichológiai Intézet

A C++11 újdonságai. Smidla József Operációkutatási Laboratórium október 9.

A C# nyelv programozási alapjai Gyakorlati feladatsor oktatási segédanyag, mely a

Osztott rendszerek, Java EE. Általános bevezető

Illesszük be az új linket a tartalomba: tartalom, benne az új linkkel.

API. webes API a gyakorlatban. Konstantinusz Kft.

C# feladatgyűjtemény

Windows Small Business Server 2003

ArcView 8. gyakorlat

Információ és kommunikáció Microsoft Windows XP

Tartalom A verifikáció és validáció tervezése Szoftver vizsgálatok Automatizált statikus analízis Cleanroom szoftverfejlesztés

Fedezd fel az. In Design. kiadványszerkesztőt! Dunaújvárosi Főiskola

XTB PRIVACY POLICY XTB ADATVÉDELMI NYILATKOZAT

ECDL operációs rendszer segédlet II..

Útmutató a Participant Portal-on való regisztrációhoz és a szükséges dokumentumok feltöltéséhez

Perzisztencia. ANTAL Margit. Sapientia - EMTE. ANTAL Margit Java technológiák 11. előadás Perzisztencia

Biztonságos útvonalválasztás ad hoc hálózatokban

JDBC - adatbáziskezelés

Átírás:

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

Tartalom Tag library (TL) Általános információk JSP Tagok Tag könyvtár (Tag library) Expression Language (EL)

Á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)

Általános információk TL és EL JSP oldalon használható. Szkript mentes dinamikus kódok. Olyan akciók amelyek gyakran használatosak, létrehoznak objektumokat, használnak objektumokat, kimenetre írnak Tag-eken keresztül érhetőek el (nem scriptlet) Kiterjeszthetőek újakkal. ECMAScript motivált.

Általános információk Célok JSP írói nem fejlesztők. Csak a megjelenítésért felelnek (View rész az MVC-ből). Expression language EL. Egyszerűen megjeleníthetőek az adatok. Könnyen írhatóak az attribútumok. Tag alapú vezérlési szerkezetek könnyen beilleszthetőek (feltételes, bejáró) Kikényszeríthetőek bizonyos Tag-ok (mások kizárásával)

JSP Tagok Outline Tag library (TL) Általános információk JSP Tagok Tag könyvtár (Tag library) Expression Language (EL)

JSP Tagok JSP tagok formája xml szintaxis vagy van törzse, vagy nincs <tlt:tag> body </tlt:tag> vagy <tlt:tag /> <tlt:greeting /> <tlt:greeting date="<%= today %>" />

JSP Tagok Tag paraméter Paraméterek átadása attribútumban (string esetén preferált) törzsben Ha nem String típusú a paraméter, akkor az adott típus valueof(string) metódusa hívódik meg.

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)

Tag könyvtár (Tag library) Tag library Akciók gyűjteménye. tablib direktívákon keresztül érhető el. URI (Universal Resource Identifier) alapján azonosított. Tag Library Description (TLD) file írja le a szabályokat tag kezelő osztály implementálja az akciókat. JSP konténer használja. A JSP oldalon deklarálni kell. formája osztály jar file-ba csomagolt (WEB-INF/lib). WEB-INF/classes belül

Tag könyvtár (Tag library) Tag-ek hozzárendelése web.xml alapján tablib -> TLD prefix alapján ( c: vagy x: ) 1. feloldja TLD erőforrás útvonalat az URI alapján 2. objektumot a TLD útvonal alapján TLD erőforrás útvonalat = url, a protokol és host nélkül, / -el kezdődik. A webapp root-hoz fűzik.

Tag könyvtár (Tag library) Új tag létrehozása tag kezelő osztály definiálása (megfelelő metódusok) dostarttag doendtag release tag deklarálása a leíróban

Tag könyvtár (Tag library) Tag attribútummal Egy ilyen tag használat: <tlt:twa attr1="value1"> Ezeket igényli: private AttributeClass attr1; setattr1(attributeclass ac) {... } AttributeClass getattr1() {... } azaz lenni kell [set/get]attribute metódusoknak, és a leíróban: <tag>... <attribute> <name>attr1</name> <required>true false yes no</required> <rtexprvalue>true false yes no</rtexprvalue> </attribute> </tag>

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 könyvtár (Tag library) Tag osztály életciklusa ATag t = new ATag(); t.setpagecontext(...); t.setparent(...); t.setattribute1(value1); t.setattribute2(value2); t.dostarttag(); t.doendtag(); t.release();

Tag könyvtár (Tag library) Tag Library Descriptor (TLD) XML doksi Leírja a tag könyvtárat JSP konténer használja, amikor jsp oldalt értelmez. A könyvtár egészét, és az egyes elemeket írja le. kiterjesztése.tld WEB-INF vagy azon belüli mappák valamelyikében van. bármely jar file-ban lehet (META-INF alatt)

Tag könyvtár (Tag library) Tablib példa definíció (web.xml): <taglib> <taglib-uri>/myprlibrary</taglib-uri> <taglib-location>/web-inf/tlds/prlibrary_1_4.tld</taglib-location> </taglib> használat a JSP-ben: <%@ taglib uri="/tlt" prefix="tlt" %> és ezután használható (ha van ilyen definiálva): <tlt:greeting />

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. </description> <tlib-version>1.0</tlib-version> <short-name>math</short-name>

Tag könyvtár (Tag library) Taglib leíró (egy elem) <tag> <description>adds two numbers</description> <display-name>add</display-name> <name>add</name> <tag-class>com.foobar.tags.addtag</tag-class> <body-content>empty</body-content> <attribute> <name>x</name> <type>java.lang.double</type> </attribute> <attribute> <name>y</name> <type>java.lang.double</type> </attribute> </tag>

Expression Language (EL) Outline Tag library (TL) Általános információk JSP Tagok Tag könyvtár (Tag library) Expression Language (EL)

Expression Language (EL) EL Egyszerű szkript nyelv. JSP konténer futtatja ${expr} és #{expr} használata JSTL-el hatékony igazán, de önállóan is lehet használni. Akkor dolgozzák fel, amikor a vezérlés odaér. Az akciók attribútumai lehetnek, futásidejű kifejezések helyett. A funkciókat java statikus metódusok implementálják. <c:out value="${anelexpression}" />

Expression Language (EL) EL típusai kiértékelő (eval) literál érték metódus: [ns:]f([a 1 [,a 2 [,...[,a n ]]]]), ahol az ns a namespace összetett (composite): ${firstname} ${lastname} Kiértékelés ideje (ugyanúgy értékelik ki) ${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 Beágyazott EL nem lehet ${item[${i}]!

Expression Language (EL) Kiértékelő kifejezés Lehet jobb és bal érték is. bal érték lehet: ${name}, ${employee.name} bal érték egyszerű változó objektum a. (pont operátor) [] A kívánt típusra konvertálódik automatikusan.

Expression Language (EL) Attribútumok elérése (EL) A jsp oldalon elérhető attribútumokat látja. PageContext.findAttribute("azon ) metódust használja (null-t ad vissza ha nem talált.). Az attribútum lehet: page (oldal) request (kérés) session application

Expression Language (EL) Implicit objektumok az EL-ben pagescope requestscope sessonscope applicationscope param: param[ nev ] : első értéket adja vissza paramvalues: paramvalues[ minden ]: minden értéket sztringek tömje (checkbox) header, headervalues, cookie, initparam

Expression Language (EL) Operátorok az EL-ben Használhatjuk nevüket vagy jelüket. == (eq),!= (ne), < (lt), > (gt), / (div), % (mod) empty: prefix operátor a null érték vizsgálatára

Outline Tag library (TL) Általános információk JSP Tagok Tag könyvtár (Tag library) Expression Language (EL)

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.

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. sun. com/ j s p / j s t l / c o r e "%> általános célú feltételes vezérlés iteráló, bejáró URL-hez kapcsolódó <%@ t a g l i b p r e f i x=" fmt " u r i=" h t t p : / / j a v a. sun. com/ j s p / j s t l / fmt " %> lokalizációs

JSTL kategóriái II formázási <%@ t a g l i b p r e f i x=" s q l " u r i=" h t t p : / / j a v a. sun. com/ j s p / j s t l / s q l " %> 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. sun. com/ j s p / j s t l / xml " %> XML feldolgozó

JSTL példa I 1 <c : f o r E a c h v a r="aparam" i t e m s="${ paramvalues }"> 2 param : <c : out v a l u e="${aparam. key }"/> 3 v a l u e s : 4 <c : f o r E a c h v a r=" avalue " i t e m s="${aparam. v a l u e }"> 5 <c : out v a l u e="${ avalue }"/> 6 </ c : f o r E a c h> 7 <br> 8 </ c : f o r E a c h>

Adatok kiírása I kiértékeli a kifejezést, majd a JspWriter-t használva kiírja. escapexml: (true) speciális karaktereket kódolja (<,>, &,... -> <,...) lehetőség ad a default érték megadására 1 Without a body 2 <c : out v a l u e=" v a l u e " [ escapexml="{ t r u e f a l s e }" ] 3 [ d e f a u l t=" d e f a u l t V a l u e " ] /> 4 5 With a body 6 <c : out v a l u e=" v a l u e " [ escapexml="{ t r u e f a l s e }" ]> 7 d e f a u l t v a l u e 8 </ c : out>

Változó vagy tulajdonság beállítása I létrehoz, vagy beállít value vagy törzs értéke lehet EL Beállíthatunk: Bean tulajdonságát Map értéket oldal, kérés, session, alkalmazás változót Null érték töröl. a var vagy target kötelező.

Változó vagy tulajdonság beállítása II 1 Syntax 1 : Set the v a l u e o f a scoped v a r i a b l e u s i n g a t t r i b u t e v a l u e 2 <c : s e t v a l u e=" v a l u e " 3 v a r="varname" [ scope="{ page 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 : Set the v a l u e o f a scoped v a r i a b l e u s i n g body c o n t e n t 6 <c : s e t v a r="varname" [ scope="{ page 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 body c o n t e n t 8 </ c : s e t> 9 10 Syntax 3 : Set a p r o p e r t y o f a t a r g e t o b j e c t u s i n g a t t r i b u t e v a l u e

Változó vagy tulajdonság beállítása III 11 <c : s e t v a l u e=" v a l u e " 12 t a r g e t=" t a r g e t " p r o p e r t y=" propertyname "/> 13 14 Syntax 4 : Set a p r o p e r t y o f a t a r g e t o b j e c t u s i n g body c o n t e n t 15 <c : s e t t a r g e t=" t a r g e t " p r o p e r t y=" propertyname "> 16 body c o n t e n t 17 </ c : s e t>

Változó törlése I 1 <c : remove v a r=" varname" 2 [ scope="{ page 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 }" ] />

Feltételes vezérlés I 1 <c : i f t e s t="${ u s e r. v i s i t C o u n t == 1}"> 2 This i s your f i r s t v i s i t. Welcome to the s i t e! 3 </ c : i f>

Több lehetőség közül egy I 1 <c : choose> 2 <c : when t e s t="${ u s e r. c a t e g o r y == t r i a l } "?> 3... 4 </ c : when> 5 <c : when t e s t="${ u s e r. c a t e g o r y == member } "?> 6... 7 </ c : when> 8 <c : when t e s t="${ u s e r. c a t e g o r y == vip } "?> 9... 10 </ c : when> 11 <c : o t h e r w i s e> 12... 13 </ c : o t h e r w i s e> 14 </ c : choose>

If/then/else I 1 <c : choose> 2 <c : when t e s t="${ count == 0}"> 3 No r e c o r d s matched your s e l e c t i o n. 4 </ c : when> 5 <c : o t h e r w i s e> 6 <c : out v a l u e="${ count }"/> r e c o r d s matched your 7 s e l e c t i o n. 8 </ c : o t h e r w i s e> 9 </ c : choose>

Kollekciókat feldolgozó tag-ek I Minden j2se kollekciót támogat (java.util.collection) tömböket (primitív-eket is) java.util.iterator és java.util.enumeration vesszővel elválasztott szavakat 1 <t a b l e> 2 <c : f o r E a c h v a r=" customer " i t e m s="${ customers }"> 3 <t r><td><c : out v a l u e="${ customer }"/></ td></ t r> 4 </ c : f o r E a c h> 5 </ t a b l e>

map feldolgozása I 1 <c : f o r E a c h v a r=" e n t r y " i t e m s="${ myhashtable }"> 2 Next element i s <c : out v a l u e="${ e n t r y. v a l u e }"/> 3 </ c : f o r E a c h>

foreach A törzs részt a JSP dolgozza fel és küldi JspWriter-nek 1 Syntax 1 : I t e r a t e o v e r a c o l l e c t i o n o f o b j e c t s 2 <c : f o r E a c h [ v a r="varname" ] i t e m s=" c o l l e c t i o n " 3 [ v a r S t a t u s=" varstatusname " ] 4 [ b e g i n=" b e g i n " ] [ end=" end " ] [ s t e p=" s t e p " ]> 5 body c o n t e n t 6 </ c : f o r E a c h> 7 8 Syntax 2 : I t e r a t e a f i x e d number o f t i m e s 9 <c : f o r E a c h [ v a r="varname" ] 10 [ v a r S t a t u s=" varstatusname " ] 11 b e g i n=" b e g i n " end=" end " [ s t e p=" s t e p " ]> 12 body c o n t e n t 13 </ c : f o r E a c h>

URL feldolgozás I kódolás: 1 <c : u r l v a l u e=" h t t p : / / acme. com/ exec / r e g i s t e r " v a r=" myurl "> 2 <c : param name="name" v a l u e="${param. name}"/> 3 <c : param name=" c o u n t r y " v a l u e="${param. c o u n t r y }"/> 4 </ c : u r l> 5 6 <a h r e f =<c : out v a l u e="${ myurl }"/> >R e g i s t e r</a> kontextus beillesztés: 1 <c : u r l v a l u e="/ ads / l o g o. html "/> Ha ezt az /foo web kontextushoz tartozó bármely jsp-ben írták, akkor: /foo/ads/logo.html

Erőforrás beillesztés I Külső erőforrásokat is lehet. Más protokollal is. Használhatjuk az url és param tag-eket. Alapesetben beilleszti a tartalmat az adott helyre: 1 <c : import u r l=" f t p : / / f t p. acme. com/readme"/> De lehet a tartalmat egy változóba is (scope megadható): 1 <c : import u r l=" h t t p : / / acme. com/ exec / customers? c o u n t r y=usa" 2 v a r=" customers "/>

Átirányítás I 1 <c : r e d i r e c t u r l=" h t t p : / / acme. com/ r e g i s t e r "/>

Lokalizáció 1 <%@ 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 / c o r e " p r e f i x=" c " %> 2 <%@ 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 / fmt " p r e f i x=" fmt " %> 3 <html> 4 <head> 5 < t i t l e>jstl fmt : message Tag</ t i t l e> 6 </ head> 7 <body> 8 <fmt : s e t L o c a l e v a l u e=" en "/> 9 <fmt : s e t B u n d l e basename="com. t u t o r i a l s p o i n t. Example " v a r=" l a n g "/> 10 <fmt : message key=" count. one " bundle="${ l a n g }"/><br /> 11 <fmt : message key=" count. two" bundle="${ l a n g }"/><br /> 12 <fmt : message key=" count. t h r e e " bundle="${ l a n g }"/><br /> 13 </ body> 14 </ html>

XML feldolgozás Az általános elemeknek van xml párja c:out - x:out c:set - x:set Első lépés a feldolgozás: <x:parse>

XML feldolgozás I 1 <c : import u r l=" h t t p : / / acme. com/ customer? i d =76567" v a r=" xml "/> 2 <x : p a r s e xml="${ xml }" v a r=" doc "/> 3 4 <! a c c e s s XML data v i a XPath e x p r e s s i o n s > 5 <x : out s e l e c t=" $doc /name"/> 6 <x : out s e l e c t=" $doc / a d d r e s s "/> 7 8 <! s e t a scoped v a r i a b l e > 9 <x : s e t v a r="custname " scope=" r e q u e s t " s e l e c t=" $doc /name"/>

XML transzformáció I 1 <c : import u r l=" h t t p : / / acme. com/ customers " v a r=" xml "/> 2 <c : import u r l="/web INF/ x s l t / c u s t o m e r L i s t. x s l " v a r=" x s l t "/> 3 <x : t r a n s f o r m xml="${ xml }" x s l t="${ x s l t }"/> 4 5 <x : t r a n s f o r m xml="${ xml }" x s l t="${ x s l t }"> 6 <x : param name=" foo " v a l u e=" foo v a l u e "/> 7 </x : t r a n s f o r m

Servlet vs JSP vs EL + JSTL 1 out. p r i n t l n ( "<p><b>f i r s t Name:</b>" 2 + r e q u e s t. getparameter ( " first_name " ) + "\n" + 3 " </p>" ) ; 1 <p><b> F i r s t Name :</b> 2 <%= r e q u e s t. getparameter ( " first_name " )%> 3 </p> 1 <p><b> F i r s t Name :</b> 2 <c : out v a l u e="${param [ " first_name " ] } " /> 3 </p>