Java servlet technológia 1 / 40

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

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

Struts2 keretrendszer

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

JAVA webes alkalmazások

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

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

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

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

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

Java Web technológiák

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

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.

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 Java Server Pages technológia. JSP és JSP elemkönyvtárak, JSTL alapok

A JavaServer Pages (JSP)

A JavaServer Pages (JSP)

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

Enterprise JavaBeans 1.4 platform (EJB 2.0)

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.

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

JSP (Java Server Pages) technológia

Java és web programozás

A Java EE 5 plattform

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

JavaServer Pages (JSP) (folytatás)

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

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

Web-fejlesztés NGM_IN002_1

és az instanceof operátor

Java grafikai lehetőségek

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

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

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

Webfejlesztés alapjai

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

Interaktív weboldalak készítése

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

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

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

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

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

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

Osztályok. 4. gyakorlat

Web-technológia PHP-vel

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

Titkosítás NetWare környezetben

VII. Appletek, grafika

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

Webes alkalmazások fejlesztése

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

JNDI - alapok. Java Naming and Directory Interface

JavaScript Web AppBuilder használata

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

Már megismert fogalmak áttekintése

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

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

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

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

Menetkövetés lehetőségei

Antal_Margit 2010/4/25 12:02 page 1 #1 ANTAL MARGIT JAVA ALAPÚ WEBTECHNOLÓGIÁK

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

Pénzügyi algoritmusok

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:

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

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

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

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

MVC. Model View Controller

A netfilter csomagszűrő tűzfal

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

NETinv. Új generációs informatikai és kommunikációs megoldások

Átírás:

Java servlet technológia 1 / 40

Áttekintés Bevezetés Servlet map-elés web.xml-ben Szessziókövetés include, forward Szűrők 2 / 40

Áttekintés Bevezetés Servlet map-elés web.xml-ben Szessziókövetés include, forward Szűrők 3 / 40

Áttekintés Bevezetés Servlet map-elés web.xml-ben Szessziókövetés include, forward Szűrők 4 / 40

Áttekintés Bevezetés Servlet map-elés web.xml-ben Szessziókövetés include, forward Szűrők 5 / 40

Áttekintés Bevezetés Servlet map-elés web.xml-ben Szessziókövetés include, forward Szűrők 6 / 40

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 7 / 40

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) 8 / 40

Servlet 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 9 / 40

A servlet életciklusa 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.) 10 / 40

init, destroy, service Az init és destroy egyszer hívódik meg, a service pedig minden egyes kérésre. Több szál, de (általában) ugyanaz a servlet-instancia szolgálja ki a különböző kéréseket 11 / 40

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 12 / 40

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 13 / 40

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 Hatókör (scope) Osztály Elérhető Web kontextus ServletContext a web-alkalmazáson belüli web-komponensekből 14 / 40

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 Hatókör (scope) 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 15 / 40

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 Hatókör (scope) 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 16 / 40

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 Hatókör (scope) 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 17 / 40

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. 18 / 40

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 19 / 40

Információ kinyerése a kérés objektumból 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. 20 / 40

Információ kinyerése a kérés objektumból 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: 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) 21 / 40

Információ kinyerése a kérés objektumból Hozzáférés web-kontextushoz 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) 22 / 40

Információ kinyerése a kérés objektumból Kérés (request) URL 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 23 / 40

Információ kinyerése a kérés objektumból 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. 24 / 40

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> 25 / 40

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 26 / 40

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. 27 / 40

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. 28 / 40

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. 29 / 40

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) 30 / 40

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. 31 / 40

Más erőforrások beszúrása a válasz objektumba Más erőforrások beszúrása a válasz objektumba 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 32 / 40

Kérés továbbítása egy másik web-komponenshez Kérés továbbítása egy másik web-komponenshez 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. 33 / 40

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 34 / 40

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 35 / 40

Szűrő megírása 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 36 / 40

Szűrő megírása 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 37 / 40

Szűrő hozzárendelések megadása 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. 38 / 40

Szűrő hozzárendelések megadása 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> 39 / 40

Szűrő hozzárendelések megadása 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> 40 / 40