A Java Server Pages technológia. JSP és JSP elemkönyvtárak, JSTL alapok

Hasonló dokumentumok
JSP életciklusa Szkript elemek, implicit objektumok, bean-ek, EL include, (forward) Visszatekintés MVC

A JSP életciklusa Szkript elemek Dinamikus tartalom létrehozása Kifejezés nyelv Tartalom újrafelhasználása Vezérlés átadása Visszatekintés

A JSP életciklusa Szkript elemek Dinamikus tartalom létrehozása Kifejezés nyelv Tartalom újrafelhasználása Vezérlés átadása Visszatekintés

JSP technológia. A JSP elemek kétféle szintaxissal használhatók: A JSP

JSP (Java Server Pages) technológia

Java Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

A JavaServer Pages (JSP)

JSP standard elemkönyvtár JSTL. alap elemkönyvtár (core) nemzetköziesítés (internationalization) Saját elemkönyvtárak (Custom Tags)

A saját elemek. JSP standard elemkönyvtár JSTL alap elemkönyvtár (core) nemzetköziesítés (internationalization) Saját elemkönyvtárak (Custom Tags)

A JavaServer Pages (JSP)

A JavaServer Pages (JSP)

A WEB programozása - JSP1 dr.gál Tibor őszi félév

Web-fejlesztés NGM_IN002_1

MVC Java EE Java EE Kliensek JavaBeanek Java EE komponensek Web-alkalmazások Fejlesztői környezet. Java Web technológiák

2. rész: JSP-k és szervletek készítése. Bakay Árpád NETvisor kft (30)

Szerver oldali Java programozás /II. 1. óra. Elemkönyvtárak. Elemkönyvtárak használata Saját elemkönyvtár készítése.

Java Servlet technológia

Java servlet technológia 1 / 40

JAVA webes alkalmazások

Java servlet technológia. Web alkalmazások. Servlet-et használni érdemes, ha. JSP-t használni érdemes, ha. Servlet-JSP kombináció (MVC) szükséges, ha

Szervlet-JSP együttműködés

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

MVC Java EE Java EE Kliensek JavaBeanek Java EE komponensek Web-alkalmazások Fejlesztői környezet

Bevezető. Servlet alapgondolatok

Java szervlet technológia

Java Web technológiák

Java programozási nyelv /ősz 9. óra. Java Server Pages. JSP technika alapjai

A J2EE fejlesztési si platform (application. model) 1.4 platform. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

MVC desktop alkalmazás esetén. MVC Model-View-Controller. eredete: Model View Controller (MVC) elv Java EE Java alapú Web alkalmazások

Struts2 keretrendszer

Grafikus keretrendszer komponensalapú webalkalmazások fejlesztéséhez

JavaServer Pages (JSP) (folytatás)

A Java EE 5 plattform

Interfészek. PPT 2007/2008 tavasz.

Enterprise JavaBeans. Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem. Az Enterprise JavaBeans

Élő webes alkalmazások rendszerfelügyelete cím- és tartalomteszteléssel

JavaServer Pages programozóknak

Ficsor Lajos Általános Informatikai Tanszék Miskolci Egyetem

JavaServer Pages JSTL, EL

JEE tutorial. Zsíros Levente, 2012

Üdvözli Önöket A PGY3 tantárgy! Bakay Árpád dr. NETvisor kft (30) arpad.bakay@netvisor.hu

Enterprise JavaBeans 1.4 platform (EJB 2.0)

és az instanceof operátor

Már megismert fogalmak áttekintése

Java VIII. Az interfacei. és az instanceof operátor. Az interfészről általában. Interfészek JAVA-ban. Krizsán Zoltán

Web programoz as

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 2.ELŐADÁS. Objektumorientált programozás

Kompozit alkalmazások fejlesztése. IBM WebSphere Portal Server

Java technológiák - ANTAL Margit. komponensek. A HTTP protokoll. Webkonténerek és szervletek. Egyszerű HTTP. ANTAL Margit.

API tervezése mobil környezetbe. gyakorlat

Osztályok. 4. gyakorlat

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

Programozási nyelvek Java

Flash és PHP kommunikáció. Web Konferencia 2007 Ferencz Tamás Jasmin Media Group Kft

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

Kommunikáció. Távoli eljáráshívás. RPC kommunikáció menete DCE RPC (1) RPC - paraméterátadás. 3. előadás Protokollok. 2. rész

A. függelék Webalkalmazások

Oracle Containers for Java - j2ee alkalmazás szerver funkciók. Molnár Balázs Oracle Hungary

Komponensek együttműködése web-alkalmazás környezetben. Jónás Richárd Debreceni Egyetem T-Soft Mérnökiroda KFT

A webhelyhez kötődő szoftverek architektúrája

A Web réteg architektúrája A JSF web alkalmazás keretrendszer. Bakay Árpád dr. NETvisor kft (30)

Web-technológia PHP-vel

QBE Édes Otthon lakásbiztosítás tarifáló webservice. Fejlesztői dokumentáció 1.0.2

Bevezetés J2EE komponensek Java2EE API-k Web alkalmazások Dokumentáció Fejlesztői környezet. JAVA technológiák - bevezető

Tartalom DCOM. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés. Történeti áttekintés

Hello World Servlet. Készítsünk egy szervletet, amellyel összeadhatunk két számot, és meghívásakor üdvözlőszöveget ír a konzolra.

WWW Kliens-szerver Alapfogalmak Technológiák Terv. Web programozás 1 / 31

Java. Java Message Service. ANTAL Margit. JMS API technológia. ANTAL Margit. Sapientia - EMTE

Java V. Osztályszint. lyszintű ű tagok. Példányváltozó. Osztályváltozó. Általános Informatikai Tanszék Utolsó módosítás:

Pénzügyi algoritmusok

OOP #14 (referencia-elv)

Webes alkalmazások fejlesztése 12. fejezet. Szolgáltatás alapú kommunikáció (WCF) Giachetta Roberto. Eötvös Loránd Tudományegyetem Informatikai Kar

Bevezetés a Python programozási nyelvbe

JAVA PROGRAMOZÁS 2.ELŐADÁS

Web-fejlesztés NGM_IN002_1

Java grafikai lehetőségek

Osztályok. construct () destruct() $b=new Book(); $b=null; unset ($b); book.php: <?php class Book { private $isbn; public $title;

Miért ASP.NET? Egyszerű webes alkalmazás fejlesztése. Történet ASP ASP.NET. Működés. Készítette: Simon Nándor

Java programozási nyelv 4. rész Osztályok II.

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Webes alkalmazások fejlesztése

Stateless Session Bean

Webfejlesztés alapjai

Többfelhasználós és internetes térkép kezelés, megjelenítés

8. gyakorlat Pointerek, dinamikus memóriakezelés

Visual C++ osztály készítése, adattagok, és metódusok, láthatóság, konstruktor, destruktor. Objektum létrehozása, használata, öröklés.

Széchenyi István Egyetem. Programozás III. Varjasi Norbert

Segédanyag: Java alkalmazások gyakorlat

Statikus adattagok. Statikus adattag inicializálása. Speciális adattagok és tagfüggvények. Általános Informatikai Tanszék

OOP: Java 8.Gy: Abstract osztályok, interfészek

Kommunikáció. Folyamatok közötti kommunikáció. Minden elosztott rendszer alapja

Készítette: Nagy Tibor István

A WEB programozása - Bevezetés őszi félév Dr. Gál Tibor

Bánsághi Anna 2015 Bánsághi Anna 1 of 31

Junior Java Képzés. Tematika

Symfony kurzus 2014/2015 I. félév. Controller, Routing

Segédanyag: Java alkalmazások gyakorlat

Interfészek. Programozás II. előadás. Szénási Sándor.

OOP. Alapelvek Elek Tibor

Programozás II. 3. gyakorlat Objektum Orientáltság C++-ban

Átírás:

A Java Server Pages technológia JSP és JSP elemkönyvtárak, JSTL alapok

JSP Statikus és dinamikus részekkel egyaránt rendelkező webes tartalmak készítése megjelenítés JSP: szöveges dokumentum, amely statikus tartalmat (HTML, XML, stb.) és JSP elemeket tartalmaz A JSP elemek esetében kétféle szintaxis alkalmazható: standard vagy XML alapú (az utóbbi akkor javasolt, ha a JSP-nek érvényes XML dokumentumnak kell lennie, amely valamilyen XML API-val feldolgozható) A JSP háttérben servlet-ként fut, alapviselkedését (pl. kérések kiszolgálása), életciklusát ez a tény határozza meg Egy JSP-hez érkezett kérés esetében a konténer ellenőrzi, hogy a JSP-nek megfelelő servlet régebbi-e az oldalnál, és ha igen servlet forráskódot generál az oldalból és automatikusan lefordítja a servlet osztályt

JSP elemek Szkriptlet: <% code %> <jsp:scriptlet> code </jsp:scriptlet> Kifejezés: <%= expression %> <jsp:expression> expression </jsp:expression> Deklaráció: <%! code %> <jsp:declaration> code </jsp: declaration> Page direktíva: <%@ page attrib="value" %> <jsp:directive.page> attrib=value /> Include direktíva: <%@ include file="url" %> <jsp:directive.include> file="url" /> Fordítás: Direktívák: szabályozzák, hogy a web-konténer hogyan végezze a fordítást Szkript elemek: a servlet kódjába lesznek beillesztve EL kifejezések: a kifejezés kiértékelőnek lesznek átadva paraméterként jsp:setproperty és jsp:getproperty elemek a JavaBean metódushívásaiba lesznek alakítva jsp:include és jsp:forward elemek a megfelelő servlet API hívásokba lesznek alakítva Saját elemek (custom tags): az elemkezelő (tag handler) megfelelő hívásaiba lesznek alakítva

JSP hibakezelés és kódolás Az errorpage attribútum határozza meg, hogy a konténer hova továbbítson hiba esetén. Pl. <%@page errorpage="errorpage.jsp"%> Az iserrorpage paraméter beállítja, hogy az illető JSP oldal legyen a hibakezelő oldal: <%@page iserrorpage="true"%> Egy javax.servlet.jsp.errordata objektum tartalmazza a hibaadatokat, ennek segítségével lehet megmutatni a kliensnek a hiba okára vonatkozó információt. Pl: ${pagecontext.errordata.statuscode} a kód lekérdezése. ${pagecontext.errordata.throwable} a dobott hiba lekérdezése A statikus tartalom esetében a contenttype attribútum segítségével állíthatjuk be a tartalom típusát és a használt kódolást (a böngésző helyesen értelmezhesse az adatokat): Pl.: <%@page contenttype="text/html;charset=utf-8"%>

JSP szkript elemek Szkriptlet: <% %> elemek közötti Java kód, amely belekerül a servlet kódjába, a jspservice() metódusba, a JSP oldalon elfoglalt helyének megfelelően. Nem definiálhatunk szkriptleten belül metódusokat, mivel az metódusok egymásba ágyazását eredményezné, és a Java ezt nem támogatja. Változókat deklarálhatunk, de ezek lokális változók lesznek. Kifejezés: <%= %> elemek közötti Java kód, amely egy String-et ad vissza, és ez az out.print() metódusnak lesz átadva. Deklaráció: <%! %> elemek közötti rész, változókat, vagy metódusokat deklarál. A metódusok a JSP-nek megfelelő servlet osztályszintű tagjai lesznek. A változók példányváltozók lesznek ezek használatát kerülni kell a szálkezelési problémák miatt: a konténer egy adott servlet osztály egyetlen példányát hozza létre. Más megoldások: szesszió objektumban, vagy kérés objektumban tárolhatjuk az adatokat, lokális változókat használhatunk a szkriptleteken belül. Vagy: szinkronizált hozzáférés (de ez a teljesítmény kárára mehet).

JSP implicit objektumok request: a kérés objektum (HttpServletRequest típusú) response: a JSP által küldött válasz (HttpServletResponse típusú) out: a válasz objektumhoz tartozó adatfolyam, puffer alkalmazása (közvetlen módon ritkán használjuk, mivel JSP kifejezést használhatunk) session: a szesszió objektum (lekérés request.getsession()) application: alkalmazásszintű adatok tárolása (ServletContext típusú, lekérés getservletconfig().getcontext()) page: az aktuális JSP oldalra mutat (tulajdonképpen a this szinonímája) config: ServletConfig típusú, a JSP-nek megfelelő servlet inicializálása pagecontext: a JSP kontextusa, amely get metódusokon keresztül hozzáférhetővé teszi a session, request, response, stb. objektumokat exception: hiba esetén a hibát okozó kivételt tartalmazza

JSP JavaBean-ek jsp:usebean elemmel deklaráljuk, hogy egy JSP egy JavaBean-t fog használni. <jsp:usebean id="beanname" class="fully qualified classname" scope="scope" /> <jsp:usebean id="beanname" type="type name" scope="scope" /> <jsp:usebean id="beanname" class="fully qualified classname" scope="scope"> <jsp:setproperty.../> </jsp:usebean> Pl. <jsp:usebean id="locales" scope="application" class="mypkg.mylocales"/> A hatókör (scope) lehet: application, session, request, vagy page Ha még nem létezik a bean, és a class meg van határozva, a web-konténer létrehozza és a megfelelő hatókörben tárolja. A type lehetőséget ad konverzióra (ha már létezik az objektum). Nem példányosít, ha az objektum még nem létezik, de együtt is használható a class-el (ebben az esetben megtörténik a példányosítás) Az id attribútum meghatározza a bean nevét a hatókörön belül, ezen keresztül hivatkozhatunk rá kifejezésekben, vagy más JSP elemekben.

JSP JavaBean-ek A tulajdonságok beállítása a jsp:setproperty elemmel történik. A beanname attribútumnak meg kell egyeznie a usebean elemben megadott id-val. Példák: String: <jsp:setproperty name="beanname" property="propname" value="string" /> Kérés paraméter: <jsp:setproperty name="beanname" property="propname" param="paramname"/> Kérés paraméter, amely megegyezik a bean tulajdonságával: <jsp:setproperty name="beanname" property="propname"/> <jsp:setproperty name="beanname" property="*"/> Kifejezés: <jsp:setproperty name="beanname" property="propname" value="expression"/> <jsp:setproperty name="beanname" property="propname"> <jsp:attribute name="value"> expression </jsp:attribute> </jsp:setproperty> A tulajdonságok kinyerése a jsp:getproperty elemmel történik. A tulajdonság értékét karaktersorrá (String) alakítja és beszúrja a válaszba <jsp:getproperty name="beanname" property="propname"/> A beanname attribútumnak a usebean id attribútumával kell megegyeznie, a JavaBean-en belül kell léteznie egy getpropname() metódusnak.

JSP Expression Language EL kifejezések segítségével is hozzáférhetünk JavaBean-ekben tárolt adatokhoz. A beanek tulajdonságai a. operátorral érhetőek el, bármilyen mélységig beágyazva. ${bookdb.bookdetails.title} Egy name nevű bean elérhető a ${name} kifejezéssel, egy tulajdonsága elérhető a ${name.valami1.valami2} szintaxis alkalmazásával. Az EL kifejezéseket a JSP kifejezés-kiértékelő dolgozza fel. Ez kikapcsolható az iselignored attribútum alkalmazásával: <%@page iselignored ="true false"%> Kiértékelés: <some:tag value="some${expr}${expr}text${expr}"/> A kifejezések balról jobbra lesznek kiértékelve, majd karaktersorrá alakítva és összefűzve. A keletkezett karaktersor a várt típusba lesz alakítva. A web-konténer a PageContext.findAttribute(String)-el keresi meg a változót, amely az EL kifejezésben megjelenik. Pl. a ${product} kifejezésre a konténer megkeresi a product-ot a page, request, session, illetve application hatókörökben és visszaadja annak értékét.

JSP include és forward Tartalom újrafelhasználása, include direktíva: a JSP servlet osztályba történő átfordításakor lesz alkalmazva, a statikus vagy dinamikus tartalom hozzá lesz fűzve a JSP tartalmához: <%@include file="filename"%> A jsp:include a JSP futása közben lesz feldolgozva, statikus vagy dinamikus tartalom beágyazását eredményezi: <jsp:include page="includedpage"/> A jsp:forward a Servlet API által biztosított továbbítás funkcionalitást valósítja meg: <jsp:forward page="filename"/> Ha további adatokat akarunk a céloldalnak átadni, megtehetjük a jsp:param elem segítségével: <jsp:include page="..."> <jsp:param name="param1" value="value1"/> </jsp:include> Az új paraméterek hatóköre a jsp:include vagy jsp:forward hívás, nem érvényesek a metódusok visszatérése után.

Servlet, JSP MVC Az adatokat tároló bean-ek létrehozása A kéréseket kezelő servlet(ek) létrehozása. A servlet kiolvassa a kérés paramétereket, ellenőrzi az adatokat, stb. A vezérlő servlet kommunikál az üzleti logikát megvalósító komponensekkel, amely adatokat szolgáltatnak vissza. Ezeket a bean-ekben tároljuk. A bean-eket tároljuk valamelyik Web-hatókörben. A servlet meghívja a megfelelő hatókör-objektum setattribute metódusát. A bean-re mutató referenciához egy azonosító alapján férhetünk hozzá. A Servlet továbbít a megfelelő JSP-re. Kiválasztja a megfelelő nézetet majd alkalmazza a RequestDispatcher forward metódusát. A JSP-n belül kinyerjük az adatokat a bean-ekből és felépítjük a nézetet. A JSP oldal jsp:usebean-t elem segítségével fér hozzá a bean-ekhez. Attribútumként a meghatározott hatókört kell megadnunk. Ezután jsp:getproperty-t elemeket használhatunk a bean tulajdonságainak kinyeréséhez. Általában a JSP nem hozza létre, vagy módosítja a bean-t, csak megmutatja a servlet által előkészített adatokat.

JSP elemkönyvtárak A JSP technológia lehetőséget ad arra, hogy elemkönyvtárakba (tag library) szervezett saját elemeket hozzunk létre. A fejlesztő által definált JSP elemek ismétlődő feladatokat oldanak meg. Az elemkönyvtárak több összefüggő elemet tartalmaznak (és azok implementációját). Kiküszöbölik a szkriptlet kódot a JSP-ben, vagy csökkentik annak mennyiségét, egyszerűbbé teszik a szintaxist, növelik a hatékonyságot, újrafelhasználhatóak. Szintaxis: Törzs nélküli: <prefix:tag attr1="value1"...attrn="valuen"/> Törzs tartalommal: <prefix:tag attr1="value1"...attrn="valuen"> body </prefix:tag> ahol a prefix az elemkönyvtárat azonosítja, a tag az elemet, attr1... attrn az attribútum nevek (az attribútumok módosítják az elem viselkedését)

JSTL - JSP standard elemkönyvtár JSP Standard Tag Library: egy egységes elemcsomagot használhatunk, az alkalmazás bármely alkalmazásszerverre telepíthető lesz, az elemek implementációja optimalizált. A JSTL különböző feladatkörökre kínál elemeket. Néhány elemkönyvtár, és megfelelő URI: Core: http://java.sun.com/jsp/jstl/core Internationalization: http://java.sun.com/jsp/jstl/fmt XML: http://java.sun.com/jsp/jstl/xml SQL: http://java.sun.com/jsp/jstl/sql A JSP-ben a következőképpen hivatkozhatunk ezekre: <%@taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %> Az elemek közötti együttműködés történhet implicit módon, amikor egy beágyazott elem egy meghatározott interfészen keresztül együttműködik az őt tartalmazó elemmel, vagy explicit módon, amikor az elem egy változóban információt ad át a környezetnek. A változó nevét a var attribútummal adjuk meg.

JSTL - core Változók használatát támogató elemek: a set elem beállítja egy változó értékét egy EL kifejezés alapján, egy adott hatókörben. Ha a változó még nem létezik, akkor létrehozza. Egy változó beállíthatóa value attribútummal, vagy az elem törzsével: <c:set var="valtozonev" scope="session" value="..."/> <c:set var="valtozonev">... </c:set> A remove elem segítségével eltávolítható: <c:remove var="valtozonev" scope="session"/> Kollekciók bejárása: foreach. <c:foreach var="item" items="${sessionscope.cart.items}"> ${item.quantity} </c:foreach> Feltételes elemek: <c:if test="${bean.value}">... </c:if> If-then-else: choose elem alkalmazása

JSTL - core Choose elem: <c:choose> <c:when test="${count == 0}"> Item not found. </c:when> <c:otherwise> No. items: ${count}. </c:otherwise> </c:choose> Az import elem segítségével elérhetünk egy URL által megadott erőforrást, amely befűzhető vagy feldolgozható a JSP-ben: <c:import url="/books.xml" var="xml"/> <x:parse doc="${xml}" var="booklist" scope="application"/> Az url elem: az encodeurl metódussal megegyező funkcionalitás (szessziókövetés, amikor a sütik ki vannak kapcsolva) A param elem kérés paramétereket specifikál A redirect elem HTTP átirányítást végez el A catch elem: kevésbé fontos kivételek esetében nem kell feltétlenül a hiba oldalra továbbítani, a kezelés helyben is történhet, a hiba az oldal hatókörében a var változóban lesz tárolva Az out elem kiértékel egy kifejezést, és az eredményt a JspWriter objektumba teszi

JSTL i18n, L10n Amikor egy kérés érkezik, a JSTL automatikusan beállítja a locale-t a fejléc alapján és kiválasztja a megfelelő erőforrás állományt, felhasználva a paraméterként megadott alapnevet. setlocale elem: a kliens által a böngészőben specifikált locale felülírása requestencoding elem: a kérés objektum karakterkódolásának beállítása message elem: nyelvfüggő üzenetek megjelenítése: <fmt:message key="choose"/> param elemekkel az üzenetnek további paramétereket adhatunk meg. Az fmt:setbundle elem az erőforrás állományt egy hatókörhöz rendelt változóba menti le. Az fmt:bundle egy adott elem törzsében használt erőforrás állomány állít be. Formázó elemek: formatnumber, formatdate, parsedate, parsenumber, settimezone, timezone <fmt:formatnumber value="${item.price}" type="currency"/>

JSTL saját elemek Fejlesztés lépései: elemkezelő (tag handler) osztály implementálása, elemkönyvtár leíró (tag library descriptor) létrehozása, elem használata Elemkönyvtár deklarációja: <%@taglib prefix="tt" uri="uri"%> URI: azonosítja az elemkönyvtár leíróját, amely egy.tld állomány, a WEB- INF könyvtárban, vagy annak valamelyik alkönyvtárában található, vagy JAR állományokban TLD-re hivatkohatunk direkt módon (útvonal és állomány megadása), vagy indirekt módon egy hozzárendelt név segítségével, mely esetben a telepítésleíróban meg kell adnunk a megfeleltetést A saját elem egy Java osztály, amely megvalósítja a Tag (törzs nélküli), vagy BodyTag interfészt. Alternatív lehetőség: származtatás a TagSupport vagy BodyTagSupport absztrakt osztályokból.