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



Hasonló dokumentumok
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.

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

Java Servlet technológia

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

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

JEE tutorial. Zsíros Levente, 2012

Karbantartás. Az ESZR Karbantartás menüjébentudjuk elvégezni az alábbiakat:

Web-fejlesztés NGM_IN002_1

A JavaServer Pages (JSP)

JavaServer Pages (JSP) (folytatás)

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Karbantartás. Az ESZR Karbantartás menüjébentudjuk elvégezni az alábbiakat:

A JavaServer Pages (JSP)

A JavaServer Pages (JSP)

Az Állami Autópálya Kezelő Zrt. Általános Szerződési Feltételei e-matricát értékesítő viszonteladók részére. 4. számú melléklet

OBJEKTUM ORIENTÁLT PROGRAMOZÁS JAVA NYELVEN. vizsgatételek

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

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

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

ECP. Site Administration System. Felhasználói kézikönyv. v (1. kiadás a és újabb verziójú ECP SAS rendszerekhez)

Bánsághi Anna 1 of 67

JAVA webes alkalmazások

SEPA megbízások (Credit Transfer) kezelése a Raiffeisen Expressz programban

Interaktív weboldalak készítése

Bevezető. Servlet alapgondolatok

Informatika szintmérő-érettségi tételek február

Java és web programozás

Technikai segédlet a Domus elektronikus pályázati rendszer felhasználói részére

TANSZÉKI ADMINISZTRÁTOR

Osztály és objektum fogalma

PHP5 Új generáció (2. rész)

2. fejezet Hálózati szoftver

A C++ öröklés. (Előfeltétel: 12. tétel ismerete)

Welcome3 Bele pteto rendszer

A HunPLUS 2009 újdonságai

TERC-ETALON Online Építőipari Költségvetés-készítő és Kiíró programrendszer Felhasználói kézikönyv

strings.xml res/values/strings.xml fájlban hozzuk létre a hiányzó string adatforrásainkat A jelenlegi helyett ez álljon: <resources> <string

Adósságrendezési eljárás - Ügyfél alkalmazás FELHASZNÁLÓI LEÍRÁS

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.

XmlGessünk 13. rész - Az XML Schema II.

Sorompó kezelés mérlegműszerrel

Java Web technológiák

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 életciklusa Szkript elemek, implicit objektumok, bean-ek, EL include, (forward) Visszatekintés MVC

Konténer-nyilvántartás kezelése

Programozás III CSOMAGOK. Az összetartozó osztályok és interfészek egy csomagba (package) kerülnek.

1. oldal, összesen: 29 oldal

ÓRAREND SZERKESZTÉS. Felhasználói dokumentáció verzió 2.1. Budapest, 2009.

Kezelési leírás a FEC01/06 típusú programozható és távműködtethető lángeffekt vezérlő készülékhez

A SZOFTVERTECHNOLÓGIA ALAPJAI

Az anyagdefiníciók szerepe és használata az Architectural Desktop programban

Java szervlet technológia

Java Servletek alapjai

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

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

A Nemzeti Útdíjfizetési Szolgáltató Zrt. Általános Szerződési Feltételei e-matricát értékesítő viszonteladók részére. 4.

Diákigazolvány Elektronikus Igénylési Rendszer Oktatási Hivatal által biztosított igénylő felület. Felhasználói kézikönyv. v 4.1

EPeR 1. RENDSZERKÖVETELMÉNYEK. Egészségpénztári E számla kezelő Rendszer Felhasználói leírás

Java servlet technológia 1 / 40

Eddig még nem használt vezérlőket is megismerünk: PlaceHolder, RadioButtonList.

Helpdesk for ArchiCAD felhasználói kézikönyv

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

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

Office Gyakori kérdések

Biztonság java web alkalmazásokban

MS Access Feladatgyűjtemény

JSP (Java Server Pages) technológia

Vásárlási Információ (Általános Szerződési és Felhasználási feltételek)

Menetkövetés lehetőségei

ÚTMUTATÓ. az eadat rendszer fejezeti nettó finanszírozás témakörének szabályairól és használatáról

Feltételes formázás az Excel 2007-ben

LÉTESÍTMÉNYGAZDÁLKODÁS. Változáskezelés. Változás Pont Cím Oldal A teljes dokumentáció átírásra került

NeoCMS tartalommenedzselő szoftver leírása

ÁLTALÁNOS SZERZŐDÉSI FELTÉTELEK

Informatikai tevékenység 2234 Maglód, Széchenyi u Mérnöki, tanácsadói tevékenység Iroda: Mobil: Telefon:

Szoftverprototípus készítése. Szoftverprototípus készítése. Szoftverprototípus készítése

15. Programok fordítása és végrehajtása

Előszó. Bevezetés. Java objektumok leképzése relációs adatbázisokra OJB-vel Viczián István Viczián István

Alap számológép alkalmazás

A Java EE 5 plattform

Közzététel és Adatszolgáltatás IT tudatosság projekt

ADATBÁZISKEZELÉS ADATBÁZIS

Az élet szép, környezetünk tele van fákkal, virágokkal, repdeső madarakkal, vidáman futkározó állatokkal.

Kezdeti Útmutató a Szolgáltatáselemző Rendszer használatához. vezetők számára. Tartalom

Operációs rendszerek Windows Xp

Külső oldal: Hírek menü

ORPHEUS. Felhasználói kézikönyv. C o p y r i g h t : V a r g a B a l á z s Oldal: 1

Komponens modellek. 3. Előadás (első fele)

7. Előadás. Makrók alkalmazása. Salamon Júlia. Előadás I. éves mérnök hallgatók számára

Objektum Orientált Szoftverfejlesztés (jegyzet)

TANSZÉKI ADMINISZTRÁTOR

ÁLTALÁNOS SZERZŐDÉSI FELTÉTELEK

USB HID 1. Bevezetés. 2. A Hardver

AIX 6.1. IBM Systems Director Console for AIX

REGISZTRÁCIÓS ELJÁRÁS ISMERTETÉSE A 2012-ES NOVITAX PROGRAMOKHOZ

3./ A évi NY29/NY30 nyilatkozat, az M30-as és egyéb igazolások

1. BEVEZETÉS A RENDSZER ELEMEI, ARCHITEKTÚRÁJA... 5

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

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

Ü G Y F É L T Á J É K O Z T A T Ó

Átírás:

Java programozási nyelv 2007-2008/ősz 10. óra Szervlet-JSP együttműködés Kérés továbbítás technikái legradi.gabor@nik.bmf.hu szenasi.sandor@nik.bmf.hu

Szervlet-JSP együttműködés Témakörök Osztálykönyvtár elérése Kérések, objektumok továbbítása Beanek használata 2

Osztályok használata JSP oldalakban Java beépített osztálykönyvtára Az osztálykönyvtár bármelyik eleme elérhető, érdemes használni az import direktívát Fontos figyelembe venni, hogy az adott web konténer milyen Java verziót támogat, ez gyakran alacsonyabb, mint a fejlesztőeszköz által használt változat A project más osztályai A fejlesztés során az üzleti logikát képviselő osztályokat célszerű a megjelenítési szinttől függetlenül megvalósítani A szervletek fejlesztése során erre eddig is ügyeltünk, célszerű az így elkészített külső osztályokat használni a JSP oldalakban is (fizikailag ugyanazokat az osztályokat) Egyéb külső osztályok Gyakran szükség lehet külső osztálykönyvtárak használatára is (pl. adatbázis-kezelő rendszer irányába kapcsolatot nyújtó Java nyelven megírt meghajtó) Ezeknél ügyelni kell, hogy a fordítást követően a JSP futtatásakor is elérhetőek legyenek a konténer számára 3

Osztályok elhelyezése JSP oldalak esetén lehetőség van A konténer számára elérhető osztályokból új példányok létrehozására Ezekkel a példányokkal a már megszokott módon műveletek végzésére, adattagok hozzáférésére A konténer számára elérhető osztályok statikus mezőinek elérésére, statikus metódusok meghívására Osztályok elhelyezésének szabályai A JSP oldalak feldolgozása során a web konténer hasonló módon keresi a szükséges külső osztályokat, mint ahogy a szervleteknél láttuk (hiszen a JSP oldal is egy szervlet) Ennek megfelelően a kontextus hasonló könyvtáraiba érdemes elhelyezni a szükséges osztályokat (Web-inf/classes) Több osztály esetén már célszerű csomagokat használni, ez esetben a megszokott szabályokat itt is be kell tartani, minden osztály a megfelelő alkönyvtárba kerüljön WAR állomány esetén hasonló az eljárás 4

NetBeans támogatás NetBeans esetén az elhelyezés nem jelent különösebb problémát A szükséges osztályok a már megismert módon létrehozhatók Fordításkor a szükséges osztályokat elhelyezi a kontextus megfelelő helyén, hogy a JSP oldalakból is elérhetőek legyenek 5

Szervlet-JSP együttműködés Témakörök Osztálykönyvtár elérése Kérések, objektumok továbbítása Beanek használata 6

Szervletek együttműködése Nagyobb fejlesztések során gyakori, hogy egyetlen hívás feldolgozását is több komponenssel szeretnénk feldolgoztatni Jobban áttekinthető kód, az egymástól független komponensek szétválasztásával Az egyes részfeladatokat meg lehet oldani az ahhoz legjobban illeszkedő technológiával Erőforrások elosztása érdekében, a feladat egyes részeit fizikailag más szervereken található szervletek végezhetik el Néhány tipikus példa az együttműködésre A beérkező kérést egy szervlet fogadja, megkezdi annak feldolgozását, majd továbbítja a kérést egy másik szervlet felé, vagy csak egyes részfeladatok megoldásához meghívja a másik szervletet A beérkező kérést egy szervlet fogadja, elvégzi az üzleti oldalon szükséges feldolgozást, majd a kimenet generálása érdekében továbbítja a kérést egy JSP oldal irányába 7

Együttműködés technikai lehetőségei Szervletek láncolása (servlet chaining) Még a J2EE előtt megjelent, nem terjedt el Alapja, hogy a web konténeren egy alias alatt szervleteknek egy listáját regisztráljuk, és a beérkező kérés során ezeket a webszerver sorban lefuttatja, majd közös kimenetüket küldi vissza válaszként Nem tárgyaljuk Kérés elküldés (request dispatching) Ez a technika lehetővé teszi, hogy egy szervlet a feldolgozása közben kéréseket küldjön más erőforrásokhoz (szervlet, JSP, XHTML oldal stb.) A web konténer a kérés beérkezésekor a szokásos módon jár el, létrehozza és az aliashoz rendelt szervletnek átadja a kérés és válasz objektumokat Ezt a hívást a RequestDispatcher interfészt megvalósító erőforrások támogatják. A szervlet ezeknek a megfelelő metódsait meghívja tudja befolyásolni a kérés feldolgozását 8

RequestDispatcher interfész public void forward(servletrequest request, ServletResponse response) throws ServletException, IOException Ez a metódus teszi lehetővé egy szervlet vagy JSP oldal számára, hogy továbbítsa a kérést egy másik erőforrás irányába Ebben az esetben a kérés teljes feldolgozása (és az ezzel járó felelősség) a hívott erőforrásra hárul public void include(servletrequest request, ServletResponse response) throws ServletException, IOException Ez a metódus lehetővé teszi, hogy egy szervlet vagy JSP oldal meghívjon egy másik erőforrást, majd annak kimenetét beillessze az általa generált kimenetbe Ebben az esetben a kérés feldolgozásának csak egy részét végzi a hívott fél, az előtte és utána a kimenetre írt adatok megmaradnak Emiatt a kérés feldolgozásának a felelőssége is az elsőként hívott szervletnél marad, az így meghívottaknak lehetőségük sincs bizonyos paraméterekhez hozzáférni (ContentType stb.) 9

Erőforrásokhoz való hozzáférés A kérés továbbításához az előző két metódust kell meghívni, azonban ehhez előbb hozzá kell férni a szükséges erőforráshoz Ehhez a ServletContext osztályon kereszül van lehetőségünk (erről már volt szó, ez ígyen típusú referenciával hivatkozunk a szervletet tartalmazó kontextusra) public RequestDispatcher getrequestdispatcher(string path) public RequestDispatcher getnameddispatcher(string name) Lehetőség van a ServletRequest osztályon keresztül is hozzáférni ugyanehhez: public RequestDispatcher(String path) Az útvonalat tartalmazó metódusok paraméterként a kívánt erőforrás abszolút (a ServletRequest esetén esetleg relatív) útvonalát várják A nevet váró metódus pedig paraméterként az erőforráshoz bejegyzett alias-t várja (lásd. web.xml) 10

Példa kérés küldésére Felhasználó azonosítása, majd ettől függően a kérés különböző irányokba való továbbítása... Szemely aktfelh = (Szemely)request.getSession getsession().getattribute.getattribute( aktfelh ); if (aktfelh == null) { RequestDispatcher rd = request.getrequestdispatcher getrequestdispatcher( /login.html ); rd.forward forward(req, resp); } else if (aktfelh.belepett Belepett()) { resp.setcontenttype setcontenttype( text/html ); RequestDispatcher rd = request.getrequestdispatcher getrequestdispatcher( /servlet/fejlec ); rd.include include(request, response); rd = request.getrequestdispatcher getrequestdispatcher( /servlet/feldolgozas ); rd.include include(request, response); } else { RequestDispatcher rd = getservletcontext().getnameddispatcher getnameddispatcher( loginsrv ); rd.forward forward(request, response); }... 11

Objektumok átadása A kérések továbbítása önmagában nem lenne elégséges eszköz egy feladat részfeladatokra bontásához és részenkénti végrehajtásához, további feltétel, hogy az egyes feladatokat végrehajtók számára adatokat tudjunk küldeni és tőlök adatokat tudjunk tőlük fogadni Ennek módja függ az adat szükséges élettartamától Csak egy kérés feldolgozása során szükséges Egy teljes folyamaton belül életben kell hagyni Kérésektől függetlenül a szervletek működése során szükséges Szerver újraindítása után is megtartsa az értékeket A már eddig is megismert módszerek közül számos itt is jól alkalmazható: ServletRequest. setattribute/getattribute HttpSession. setattribute/getattribute ServletContext.setAttribute/getAttribute osztályok statikus mezői külső erőforrások (adatbázisok stb.) 12

Szervlet-JSP együttműködés Témakörök Osztálykönyvtár elérése Kérések, objektumok továbbítása Beanek használata 13

Beanek használata Szervletek és JSP oldalak közös használata során nagymértékben elválasztható egymástól az üzleti logika és a megjelenítéshez tartozó XHTML+scriptlet A JSP oldalak szerkesztéséhez azonban összetettebb esetben továbbra is szükség van rövidebb-hosszabb Java kódreszletekre, amik ismét előhoznak néhány problémát: Designerek ehhez nem értenek (nem is akarnak) Szabványos szerkesztőprogramok nem kezelik A cél tehát az, hogy lehetőség szerint minimálisra csökkenjen az JSP oldalakban a beágyazott scriptletek száma. Erre a Servlet API egy jó alternatívát kínál, a megjelenítéshez használatos Java kódokat csomagoljuk be beanekbe, és a JSP oldalon már csak ezeket kelljen használni (ez tulajdonságok írását/olvasását jelenti) Ezzel elérhető a végső cél: dinamikus oldalfelépítés mellett 0 sor programkód a megjelenítési rétegben 14

Beanek elérése A scriptletekben tetszőleges (akár saját készítésű) osztályokat lehet használni, amennyiben az oldal fordítása során ezek elérhetőek a konténer számára A beanek használatával azonban néhány új lehetőség is felmerül, például a kérés kiszolgálása során a beanek tulajdonságait automatikusan fel lehet tölteni a kérésben érkező azonos nevű paraméterek értékeivel Lehetőség van a hatáskör magas szintű beállítására is. Egy bean hozzárendelhető: oldalhoz lap generálása után megszűnik kéréshez szervletek közt továbbított kérés esetén továbbítódik ügyfélmenethez session részeként, tehát egymást követő kérések között is megmarad alkalmazáshoz a teljes webalkalmazás számára hozzáférhető különböző szervletek számára 15

Bean beágyazása JSP oldalba Beágyazás általános alakja: <jsp:usebean id= név scope= hatókör class= osztálynév type= típus > </jsp:usebean> id attribútum A bean nevét adja meg, ezen keresztül lehet rá hivatkozni scope attribútum A már említett hatókör meghatározása, értékei ennek megfelelően: page, request, session, application class, type attribútum A class a létrehozandó bean osztályának a nevét adja meg, a type pedig azt, hogy milyen típusúként legyen nyilvántartva (a polimorfizmus miatt ez különbözhet) beanname attribútum A class helyett ez is megadható, ilyenkor a Beans.instantiate() metódussal jön létre a példány 16

Bean tulajdonságok beállítása A legalapvetőbb értékadáson túl a JSP lehetőséget ad a beérkező paraméterek alapján történő értékadásra is Értékadás megadott értékkel <jsp:setproperty name= id property= tulajdonság value= érték /> Értékadás egy paraméter alapján (a kérés megadott nevű paraméterének értékét bemásolja a bean tulajdonságába) <jsp:setproperty name= id property= tulajdonság parameter= paramnév /> Értékadás azonos nevű paraméter alapján <jsp:setproperty name= id property= tulajdonság /> Értékadás minden paraméternévvel egyező tulajdonságnak <jsp:setproperty name= id property= * /> 17

Bean tulajdonságok lekérdezése A bean egy tulajdonságának a lekérdezése <jsp:getproperty name= id property= tulajdonság /> Ennek hatására az id azonosítóval létrejött bean tulajdonság nevű attribútumának az értéke illesztődik be az JSP oldalba Az attribútumhoz tartozó getxxx() metódus természetesen összetett kódot is tartalmazhat (adatbázishozzáférés, számítások stb.) Ideális esetben tehát a felhasználónak csak egy ilyen (az XML szabványnak teljesen megfelelő) elemet kell felvennie a tervezett JSP oldalba, így az oldal szabványos XHTML szerkesztőkkel módosítható (és nincs benne Java kód) Beanek segítségével egészen magasszintű feladatokat tudunk megoldani meglehetősen egyszerűen. Például: Személy adatait tartalmazó bean. Azonosító és jelszó megadása után az adatbázisból betöltött adatok egyszerűen lekérdezhetők a tulajdonságokon keresztül Adót kiszámító bean. Tulajdonságkon át megadott személyes adatok alapján másik tulajdonságokból kiolvasható a fizetendő adó 18

TagLib Ezen az úton a következő lépés a saját saját tag függvénytár használata. Ezekben saját tag-eket készíthetünk, amiket az XHTML elemekhez hasonlóan használhat a felhasználó Ezek lehetnek tartalommal rendelkezők, illetve tartalom nélküliek (mint XHTMLben a <p>...</p> vagy a <br/>) Az XHTML elemeknek megfelelően lehetnek saját attribútumaik is (mint XHTMLben az <input type= xxx >) Ezek egymásba is ágyazhatók, így a saját tagfüggvények hasznátával így is kinézhet egy weboldal: <próbálkozás darab= 5 > Próba: <időbélyeg /> <adatkapcsolat szerver= oracle.com /> </próbálkozás> Ezzel véglegesen eltűntek a programozási elemek 19

Gyakorló feladat Készítsen el egy egyszerű bevásárlólista JSP oldalt: A listát egy (sessionbe ágyazott) BevasarloLista objektum tárolja, ami az alábbi funkciókkal rendelkezik: Új elem felvétele a paraméterként megadott szöveget felveszi a lista legutolsó helyére Aktuális lista visszatérési értéke egy szöveges tömb, ami tartalmazza az eddig felvett elemeket Az oldal tetején jelenjen meg a logó, mellette a pontos idő Ez alatt egy keretben jelenjen meg egy reklámszöveg, ami 5 előre megadott mondat közül legyen az egyik Alatta egy táblázatba kerüljön a bevásárlólista (első oszlop a sorszám, második oszlop a cikk neve) A lista alatt egy mezőben legyen lehetőség új tétel megadására, ezt a Felvesz gomb lenyomásával lehessen hozzáadni a listához 20

Házi feladat A, JSP oldal segítségével készítsen egy háttérképletöltő alkalmazást Ehhez készítsen egy HatterKep osztályt az alábbi mezőkkel, majd néhány ilyen elemmel töltsön fel egy tömböt a szervlet init metódusában (a kis és nagy képeket töltse fel a szerverre): megnevezés, szélesség, magasság témák (szöveges tömb, pl kutya, ari stb.) URL a kis és nagy képhez A felhasználó a kezdőoldalon tudjon megadni szűrési feltételeket a fenti tulajdonságokra Az Elküldés gombra kattintva jelenjen meg egy táblázat, benne az összes, a feltételnek megfelelő képpel. Azonosan formázva jelenjen meg a kép minden adata és a kis kép A kis képre kattintva töltődjön le a nagy kép (a kis kép legyen egy hivatkozás a nagyra) B, Készítsen egy felhasználói adatokat kezelő beant Ehhez először hozzon létre egy Felhasznalo osztályt az alábbi mezőkkel: nev, jelszo, teljesnev, eletkor Majd hozzon létre egy FelhasznaloManager beant (ami tárol néhány felhasználót, ezek a konstruktorban jönnek létre) az alábbi, kívülről elérhető tulajdonságokkal: nev, jelszo olvasható, érték adható bejelentkezett, teljesnev, eletkor olvasható, a név/jelszó pároshoz tartozó felhasználó adatai A kezdőoldalon megadott név/jelszó párost a következő JSP oldalon adjuk át egy FelhasznaloManager beannek, majd írjuk ki a képernyőre a felhasználó adatait Egy Következő hivatkozásra kattintva a következő oldalon jelenjen meg a porno vagy a semmi szó attól függően, hogy a felhasználó elmúlt-e 18 éves (tehát a bean a menethez kapcsolódjon) 21

Ajánlott irodalom Az óra anyagához kapcsolódó irodalom Nyékyné Gaizler Judit: J2EE útikalauz Java programozóknak; ELTE TTK Hallgatói alapítvány, Budapest 115 135. o. Jason Hunter: Java szervletek programozása; O Really-Kossuth, Budapest, 2002 546 577. o. The J2EE 1.4 Tutorial Chapter 12: JavaServer Pages Technology http://java.sun.com/j2ee/1.4/docs/tutorial/doc/index.html http://java.sun.com/j2ee/1.4/docs/tutorial/doc/j2eetutorial.pdf 22