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

Hasonló dokumentumok
Java servlet technológia 1 / 40

Java szervlet technológia

Java Servlet technológia

Bevezető. Servlet alapgondolatok

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

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

JAVA webes alkalmazások

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

Struts2 keretrendszer

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

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

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

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

Java Web technológiák

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.

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

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

Web-fejlesztés NGM_IN002_1

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

Web programoz as

JEE tutorial. Zsíros Levente, 2012

API tervezése mobil környezetbe. gyakorlat

A JavaServer Pages (JSP)

A JavaServer Pages (JSP)

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

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

Enterprise JavaBeans 1.4 platform (EJB 2.0)

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

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

A JavaServer Pages (JSP)

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.

Java és web programozás

A Java EE 5 plattform

JSP (Java Server Pages) technológia

Bevezetés Működési elv AJAX keretrendszerek AJAX

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

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

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

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

JavaServer Pages (JSP) (folytatás)

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

Web-fejlesztés NGM_IN002_1

Webes alkalmazások fejlesztése 10. előadás. Webszolgáltatások tesztelése (ASP.NET Core) Cserép Máté

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

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

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

Biztonság java web alkalmazásokban

és az instanceof operátor

Java grafikai lehetőségek

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

Web-fejlesztés NGM_IN002_1

WEBFEJLESZTÉS 2. ADATBÁZIS-KEZELÉS, OSZTÁLYOK

JSF alkalmazások teljesítményhangolása JMeter és dynatrace segítségével

Használati alapú és modell alapú tesztelés kombinálása szolgáltatásorientált architektúrák teszteléséhez az ipari gyakorlatban

Számítógépes Hálózatok. 5. gyakorlat

DCOM Áttekintés. Miskolci Egyetem Általános Informatikai Tanszék. Ficsor Lajos DCOM /1

Szoftver Tervezési Dokumentáció. Nguyen Thai Binh

Interaktív weboldalak készítése

Webfejlesztés alapjai

VII. Appletek, grafika

Web-technológia PHP-vel

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

Webes alkalmazások fejlesztése 8. előadás. Webszolgáltatások megvalósítása (ASP.NET WebAPI)

Osztályok. 4. gyakorlat

Titkosítás NetWare környezetben

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

Programozás II. 2. gyakorlat Áttérés C-ről C++-ra

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

Webes alkalmazások fejlesztése

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 5.ELŐADÁS. Sütik és munkamenetek kezelése

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

JavaScript Web AppBuilder használata

Már megismert fogalmak áttekintése

JNDI - alapok. Java Naming and Directory Interface

Webes alkalmazások fejlesztése. 9. előadás Bevezetés az ASP.NET MVC keretrendszerbe

Szerver oldali technológiák Szerver oldali script nyelvek PHP

Hálózati operációs rendszerek II. Novell Netware 5.1 Hálózati nyomtatás

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

Webalkalmazás fejlesztés Java EE környezetben NetBeans segítségével: JavaServer Faces 1.2 AJAX

Dr. Pál László, Sapientia EMTE, Csíkszereda WEB PROGRAMOZÁS 6.ELŐADÁS. Fájlkezelés PHP-ben

Az alábbi kód egy JSON objektumot definiál, amiből az adtokat JavaScript segítségével a weboldal tartalmába ágyazzuk.

Model View Controller alapú alkalmazásfejlesztés

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

Web programozás. Internet vs. web. Internet: Az Internet nyújtotta néhány alapszolgáltatás:

Pénzügyi algoritmusok

Menetkövetés lehetőségei

Az iskolai rendszerű képzésben az összefüggő szakmai gyakorlat időtartama. 10. évfolyam Adatbázis- és szoftverfejlesztés gyakorlat 50 óra

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

5. rész: A Java EE és az Enterprise Bean réteg. Bakay Árpád dr. NETvisor kft (30)

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

MVC. Model View Controller

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

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

A Wireshark program használata Capture Analyze Capture Analyze Capture Options Interface

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

A netfilter csomagszűrő tűzfal

Adatbányászat és Perszonalizáció architektúra

Szoftverarchitektúrák 3. előadás (második fele) Fornai Viktor

Átírás:

Áttekintés Java servlet technológia Bevezetés Servlet map-elés web.xml-ben Szessziókövetés include, forward Szűrők 1 / 31 2 / 31 Servlet-et használni érdemes, ha a kimenet típusa bináris (pl. egy kép) a servlet-nek nincs közvetlen kimenete (csak átirányít egy másik komponensre) a megjelenítés nagyon változó lehet JSP-t használni érdemes, ha a kimenet nagyrészt szöveg alapú (pl. HTML, XML) a kimenet formátuma többnyire kötött Servlet-JSP kombináció (MVC) szükséges, ha a kérés többféle, kinézetben lényegesen különböző nézetet eredményezhet egy nagyobb csapat dolgozik a Web-alkalmazáson (egyesek az üzleti logika-, mások a Web-es felület fejlesztésével foglalkoznak) bonyolult adatfeldolgozásra van szükség, ugyanakkor a megjelenítés viszonylag kötött Web alkalmazások script elemek használata közvetlenül (JSP-ben deklarált és hivatkozott) beágyazott Java kód script elemek használata közvetetten (segédosztályokban deklarált, JSP-ből hivatkozott) beágyazott Java kód beanek használata servlet/jsp kombináció (MVC elv) MVC + kifejezés nyelv (EL expression language) használata a JSP-ben JSP elemkönyvtárak (custom tag library) használata MVC + bean-ek + elemkönyvtárak + keretrendszerek (pl. Struts, JSF) 3 / 31 4 / 31

Servlet A servlet életciklusa A servlet: egy java osztály, mely kérés-válasz (request-response) modellre épül leginkább web kérések kiszolgálására használják őket a java servlet technológia HTTP-specifikus servlet osztályokat is tartalmaz a javax.servlet és a javax.servlet.http csomagok segítségével írhatunk servleteket mindegyik servlet a Servlet interfészt kell implementálja Egy servlet életciklusát a web-konténer kezeli, melybe az illető servlet telepítve volt. Ha egy kérés érkezik a servlet-hez, a következők történnek: 1. Ha a servlet-nek még nem létezik példánya (instanciája), akkor a web-konténer betölti a servlet osztályt létrehoz egy instanciát, majd inicializálja az init metódus segítségével Az init metódus rendszerint konfigurációbelovasásra, erőforrás inicializálásra (pl. adatbázishozzáférés) használható vagy bármilyen egyszeri művelet elvégzésére. 2. Meghívja a service metódusát, átadva neki a kérés és válasz (request, response) objektumokat. 3. Ha a konténer el kell távoĺıtsa a servletet, meghívja a destroy metódusát (az init párja: erőforrások felszabadítása stb.) 5 / 31 6 / 31 init, destroy, service Az init és destroy egyszer hívódik meg, a service pedig minden egyes kérésre. Információmegosztás A web-komponensek akárcsak a legtöbb objektum más objektumokkal együttműködve végzik el feladatukat. Ez a következőképpen történhet: segédosztályok segítségével nyilvános hatókörű (public scope) objektumok attribútumait oszthatják meg más web-komponenshez továbbítanak Több szál, de (általában) ugyanaz a servlet-instancia szolgálja ki a különböző kéréseket 7 / 31 8 / 31

Nyilvános hatókörű objektumok (public scope objects) A web komponensek négy (nyilvános hatókörű) objektum attribútumain keresztül oszthatnak meg információt. Az attribútumok a [get set]attribute metódusokon keresztül érhetők el Scope Objektum Osztály Elérhető Web kontextus ServletContext a web-alkalmazáson belüli web-komponensekből Szesszió HttpSession web-komponensekből, amelyek ugyanazon szesszión belüli kéréseket dolgozzák fel Kérés HttpServletRequest az adott kérést kezelő web-komponensekből (Oldal) JspContext a JSP-ből, amely létrehozza Service metódusok írása Service metódus írása (HTTPServlet objektum esetén): egy do<metódusnév> fölüĺırásában (overriding) nyilvánul meg. A <Metódusnév> lehet: Get, Delete, Options, Post, Put, Trace Egy ilyen metódus a kérés (request) objektumból kinyeri az információkat, eléri a külső erőforrásokat, beálĺıtja a válasz (response) objektumot ezen információk alapján. A válasz objektumot úgy álĺıtja be, hogy először lekér tőle egy stream-et (getoutputstream vagy getwriter metódus segítségével) feltölti azt a válasz fejlécekkel törzs (body) tartalommal 9 / 31 10 / 31 Információ kinyerése a kérés objektumból A kérés objektum azokat az adatokat tartalmazza, melyeket a kliens (böngésző) küldött a szerver felé HTTP protokollon keresztül. a ServletRequest interfészt implementálja Információ kinyerése a kérés objektumból A kérés objektum azokat az adatokat tartalmazza, melyeket a kliens (böngésző) küldött a szerver felé HTTP protokollon keresztül. a ServletRequest interfészt implementálja Ez az interfész a következő információk elérését szolgáló metódusokat tartalmazza: Paraméterek elérése: tipikusan a kliens által (a HTML form keretében) küldött információk Pl. String id =request.getparameter("bookid"); (lásd. ParameterSnoop) Egy input stream-et is lekérhetünk a kérés objektumból és a tartalmát manuálisan feldogozhatjuk. Karakter stream lekérésére a getreader-t használhatjuk, bináris adatokhoz (pl. file upload) pedig a getinputstream-et. Ez az interfész a következő információk elérését szolgáló metódusokat tartalmazza: Objektum attribútumok: tipikusan egy servlet által létrehozott és a kérés objektumba betett objektumok, melyek így más servlet-ekben is elérhetők lesznek (forward és include). Információk a használt protokollról, a kliensről (lásd. HeaderSnoop) valamint a szerverről (lásd. ServerSnoop) 11 / 31 12 / 31

Hozzáférés web-kontextushoz Kérés (request) URL A web-kontextusnak megfelelő objektum egy ServletContext interfészt implementáló objektum. A servlet getservletcontext metódusával lehet megkapni. A ServletContext-en keresztül többek között az alábbiak érhetők el: Inicializáló paraméterek Objektum attribútumok Naplózás (logging) Egy HTTP kérés URL a következő részekből áll: http://[host ]:[port ][request path ]?[query string ] A request path (kérés útvonala) a következő részekre bontható tovább: Kontextus út (context path): slash ( / ) és a servlet-et tartalmazó web-alkalmazás kontextus gyökere (context root) a web-alkalmazás neve Servlet út (servlet path): slash ( / ) és a komponenst aktiváló kérésnek megfelelő map-elés 13 / 31 14 / 31 Paraméterek (query string) A query string összetevői: paraméterek a nekik megfelelő értékek Az egyes paramétereket a kérés objektumból a getparameter metódussal nyerjük ki. Kétféleképpen lehet query string-et generálni: Egy query string explicit módon megjelenik az URL-ben Pl. <a href="/servletpath?param1=1">text</a>. A paraméter a következőképpen kapható meg: String parameter =request.getparameter("param1"); A query string hozzáadódik az URL-hez, amikor egy HTML form elküldése (submit) a HTTP GET metódussal történik. Megj.: HTTP POST metódus esetén a parametérek a kérés törzsében (body) helyezkednek el. Servlet map-elések megadása a web.xml-ben A Servlet-et deklarálni kell: logikai nevet kell neki adni, meg kell adni az osztályt, amelyik implementálja esetleg inicializáló paramétereket adhatunk meg neki <servlet> <servlet-name>helloworld</servlet-name> <servlet-class>hello.helloworldex</servlet-class> <init-param> <param-name> initial </param-name> <param-value> 10 </param-value> </init-param> </servlet> 15 / 31 16 / 31

a Servlet init paramétereihez való hozzáférés lásd InitSnoop A Servlet-et hozzá kell rendelni (map-elni) egy vagy több web-erőforráshoz vagy URL mintához <servlet-mapping> <servlet-name>helloworld</servlet-name> <url-pattern> /servlet/helloworldexample </url-pattern> </servlet-mapping> Megj.: másik alternatíva magyarázó jegyzet (annotation) használata a Servlet osztály definiálásakor: @WebServlet Kliensállapot megőrzése Sok alkalmazás esetében szükség van arra, hogy az azonos felhasználótól jövő kérések össze legyenek kapcsolva egymással. Pl. bevásárlókosár A web-alkalmazások felelősek ennek a megvalosításáért, mivel a HTTP protokoll állapot nélküli (stateless). lásd ShoppingCart A Java servlet technológia egy API-t kínál a szesszió kezelésére. A szessziót egy HttpSession objektum képviseli. Lekérhető a kérés (request) objektumtól a getsession metódussal. Ez visszaadja az aktuális szessziót vagy ha még nincs, akkor létrehoz egyet. A szesszióhoz objektum-alapú attribútumokat lehet rendelni. Ezek egy adott web-kontextuson belül bármelyik web-komponensből hozzáférhetőek, melyek ugyanahhoz a szesszióhoz tartozó kéréseket dolgozzák fel. 17 / 31 18 / 31 A szesszióhoz hozzárendelt objektumok értesítése A szesszióhoz hozzárendelt objektumok értesítése Az alkalmazás értesítheti a web-kontextushoz valamint a szesszióhoz rendelt objektumokat bizonyos események bekövetkeztekor: Amikor egy objektum hozzáadódik vagy eltávoĺıtódik a szesszióból. Hogy ezt az értesítést megkapja az objektum a HttpSessionBindingListener interfészt kell implementálja. Amikor a szesszió, amelyhez az objektum hozzá van rendelve passziválva vagy aktiválva (perszisztensen lementve majd visszatöltve) van. Hogy ezt az értesítést megkapja az objektum a HttpSessionActivationListener interfészt kell implementálja. Szesszió követés Szesszió követés Egy web-konténer különbözőféleképpen rendelhet egy szessziót egy felhasználóhoz, viszont bárhogyan is történjen ez, azzal jár, hogy egy azonosító küldődik a kliens és szerver között. Ez az azonosító eltárolható egy sütiben (cookie) minden egyes URL-ben, amit a kliens megkap Ha az alkalmazás szessziót használ, akkor biztosítani kell azt, hogy a szessziókövetés működik a sütik kikapcsolása esetében is. (lásd SessionSnoop ) Ezt az URL-átírással valosíthatjuk meg a válaszobjektum encodeurl(url) metódus-hívásával minden egyes URL-re, amit a servlet visszaad. Ez a metódus hozzáfűzi a szesszió ID-t az URL-hez, ha a sütik ki vannak kapcsolva. 19 / 31 20 / 31

Más web-erőforrás hívása Direkt vagy indirekt módon történik. Indirekt módon akkor, ha a web-komponens a válaszban tartalmaz egy URL-t, amelyik egy másik web-komponensre mutat. Direkt módon kétféleképpen: egy web-komponens magábafoglalhatja egy másik web-komponens tartalmát (include) továbbíthatja a kérést egy másik komponenshez (forward) Ahhoz, hogy elérjünk egy erőforrást, amelyik egy web-komponenst futtat, először egy RequestDispatcher objektumot kell lekérjünk a getrequestdispatcher(url) metódussal. A RequestDispatcher objektumot két módon lehet lekérni: a kérés objektumtól a webkontextus objektumtól A kérés objektumból lekért RequestDispatcher esetében az URL lehet relatív (nem /-el kezdődő), A web-kontextustól lekért esetében viszont az URL abszolút kell legyen. Ha az erőforrás nem elérhető, null-t kapunk vissza. 21 / 31 22 / 31 Más erőforrások beszúrása a válasz objektumba Kérés továbbítása egy másik web-komponenshez Sokszor hasznos lehet, hogy egy web erőforrást beszúrjunk egy másikba pl. jogvédelmi információkat (copyright) Ehhez a RequestDispatcher include(request, response) metódusát használhatjuk. lásd pl. MainPage Megszorítások a válasz objektum tekintetében: A beszúrt web-komponens írhat ugyan a response tartalmába (body), de nem álĺıthatja a fejléceket nem hívhat olyan metódust, ami a válasz objektum fejlécét érinti. (pl. addcookie). ami ilyenkor történik: a kérés objektum el lesz küldve a beszúrt komponensnek a beszúrt web-komponens elvégződik majd a keletkezett tartalom beszúródik a külső servlet által generált válasz objektumba Sok web-alkalmazásban van egy web-komponens, mely egy előfeldogozást végez és ettől függően továbbít egy másik komponenshez, amely a választ generálja (lásd MVC, Struts). Ahhoz, hogy egy kérést egy másik web-komponenshez továbbítsuk a RequestDispatcher forward metódusát használjuk. lásd pl. SearchLogic Megszorítások: Ha a ServletOutputStream vagy a PrintWriter objektumokat módosítottuk a továbbítás előtt, akkor a továbbításkor IllegalStateException hibát kapunk. 23 / 31 24 / 31

Kérés/válasz szűrése (filtering) A szűrő módosíthatja a kérés és válasz objektumok tartalmát ez nem web-komponens abban az értelemben, hogy nem hoz létre választ (response), csak módosítja azt egy funkcionalitást ad, amely hozzárendelhető a web-komponenshez nem függ a web-erőforrástól, amihez hozzá van rendelve Főbb alkalmazási területei: egy másik weboldalra irányít át, valamilyen feltétel függvényében (pl. annak ellenőrzése, hogy be van-e jelentkezve a felhasználó lásd: VerifyLogonFilter) módosítja a kérés vagy válasz fejlécét vagy adatait (kibővített kérés és válasz osztályok segítségével), külső erőforrásokkal kommunikálhat A gyakorlatban: azonosítás naplózás (logging) adatsürítés titkosítás XML transzformáció stb. Egy web-erőforrás esetében bekonfigurálható, hogy nulla, egy vagy több szűrő legyen rá alkalmazva a megfelelő sorrendben. (lásd InitCounter Filter1, Filter2; Hello SimpleFilter) A szűrők használata három részből áll: meg kell írni a szűrőt meg kell írni a kibővített kérés és válasz osztályokat a telepítéskor mindegyik web-erőforrásnak meg kell adni a kívánt szűrő-láncot 25 / 31 26 / 31 Szűrő megírása A szűrő API a következő főbb interfészekből áll: Filter, FilterChain, es FilterConfig Egy szűrő definiálásához a Filter interfészt kell implementálni. A dofilter metódus paraméterként kapja a kérés, válasz valamint a szűrőlánc objektumokat létrehozza a kibővített kérés és/vagy válasz objektumokat meghívja a dofilter-t (a további szűrőkre a láncból) paraméterként a kibővített objektumokat adva meg, akár blokkolhatja is a kérést úgy, hogy nem hívja meg a következő szűrőt, de akkor ő a felelős a válasz objektum feltöltéséért a visszakapott kibővített objektumokkal módosíthatja a kérés valamint válasz objektumokat A dofilter-en kívül még az init és destroy metódusokat is lehet implementálni. Az init akkor hívódik, mikor a konténer példányosítja a szűrőt. A paraméteként megadott FilterConfig-ban megkapjuk az inicializáló paramétereket. A kérés kibővítéséhez a HttpServletRequestWrapper osztályt kell kibővíteni, a válasz kibővítéséhez a HttpServletResponseWrapper osztályt 27 / 31 28 / 31

Szűrő hozzárendelések (map-elések) megadása A web-konténer a szűrő hozzárendelések alapján alkalmazza a szűrőket az egyes web-erőforrásokra. Egy szűrő map-elés hozzárendel egy szűrőt egy web-komponenshez egy név alapján egy szűrőt web-erőforrásokhoz URL minták (pattern) szerint A szűrők olyan sorrendben lesznek meghívva, amilyen sorrendben a szűrő hozzárendelésben megjelennek. A telepítésleíróban (deployment descriptor): Deklarálni kell a szűrőt: nevet kell neki adni, meg kell adni az osztályt, amelyik implementálja inicializáló paramétereket lehet adni neki Pl. <filter> <filter-name>servlet Mapped Filter</filter-name> <filter-class>filters.examplefilter</filter-class> <init-param> <param-name> name </param-name> <param-value> value </param-value> </init-param> </filter> 29 / 31 30 / 31 A telepítésleíróban (deployment descriptor): Map-elni kell a szűrőt egy web-erőforráshoz vagy egy URL mintához Pl. <filter-mapping> <filter-name>servlet Mapped Filter</filter-name> <servlet-name>invoker</servlet-name> </filter-mapping> <filter-mapping> <filter-name>path Mapped Filter</filter-name> <url-pattern>/servlet/*</url-pattern> </filter-mapping> 31 / 31