Java web programozás 6.
Tartalom Java Servletek Működése Minta Servlet A kérés feldolgozása HTML kód generálása HTML űrlapok feldolgozása Fájl feltöltése A kérés delegálása Munkamenet kezelés Filter készítése 2009
Működés Fogalma Metódusai Többszálúság Szerver oldali (web rétegbeli) komponens, amely kérés-válasz alapú feldolgozást végez. Mindig egy Java web-alkalmazáshoz tartozik. Metódusai doPost(): A POST-al érkező kérések. doGet(): A GET-tel érkező kérések. Többszálúság Ha több kérés érkezik egyszerre, akkor a web-konténer több szálat indít, amelyek a Servlet ugyanazon metódusát hívják meg. (doPost, doGet). A kód kritikus metódusait lássuk el, a „synchrozized” kulcsszóval. 2009
Létrehozás (1) 2009
Létrehozás (2) 2009
Létrehozás (3) 2009
Létrehozás (4) 2009
Minta Servlet A Servlet kódja 2009
Minta Servlet A telepítés-leíró (web.xml) 2009
A kérés feldolgozása HttpServletRequest Metódusok: A kérés fejlécek Ezen objektum tartalmazza a klienstől jövő adatokat. Metódusok: String getHeader(String name): A „name” nevezetű fejléc megszerzése. Enumerations getHeaderNames(): Az összes fejléc elkérése A kérés fejlécek Host: A kliens gép neve User-Agent: A böngésző Accept-Language: A támogatott nyelv Accept-Charset: A támogatott karakterkészlet 2009
HTML kód generálása 2009
HTML kód generálása 2009
HTML űrlapok feldolgozása Az űrlapok adatai egy gomb („Submit”) megnyomása után továbbítódnak a szerver felé. A HTML FORM „action” attribútumában kell megadni, hogy mely szerver oldali komponenshez kerüljenek a FORM-ban megadott adatok. A „Submit” gomb hatására elküldésre kerülnek az adatok (action attribútum!) A szerver oldalon, a „HttpServletRequest” objektum „getParameter(String name)” metódusával kérjük el a paramétereket. A „name”, a HTML form-ban megadott elem neve. 2009
A HTML űrlap 2009
A feldolgozó Servlet 2009
Fájl feltöltése Egy fájl feltöltő űrlap elem kell a HTML FORM-ba A Servlet-nek fel kell dolgoznia a kapott tartalmat. A http://www.servlets.com/cos/ -ról segéd API. 2009
Fájl feltöltése A Servlet kódja 2009
A kérés delegálása A klienstől érkező kérést továbbíthatjuk egy servlet vagy pl. egy JSP lap felé. Az URL, változatlanul továbbítódik a fogadóhoz. A „RequestDispatcher” objektum segítségével, kétféleképpen delegálhatunk: forward(ServletRequest request, ServletResponse response): A válasz generálása, a fogadó oldal dolga Statikus fájl esetén, annak tartalma belegenerálódik a válaszba include(ServletRequest request, ServletResponse response): Más erőforrások tartalmát fűzhetjük bele a válaszba A válasz generálása a küldő oldal dolga 2009
A delegáló Servlet 2009
A fogadó JSP lap 2009
Munkamenet kezelés Munkamenet („session”) Állapotmentesség feloldása Az ugyanazon klienstől érkezett kérések összessége. Állapotmentesség feloldása A HTTP protokoll, ún. állapotmentes. Megoldás: A) Sütik („cookie”) B) URL-újraírás Session kezelése A „HttpSession” objektum A „HttpServletRequest” objektum „getSession(boolean create)” metódusával elkérve. create == true: session létrehozása create == false: null, ha korábban még nem hoztuk létre. 2009
Munkamenet kezelés Session kezelése A munkamenet („Session”) lezárása setAttribute(String key, Object value): Tetszőleges objektum tárolása, a „key” azonosításával. getAttribute(String key): eltárolt objektum lekérdezése a „key” alapján. A munkamenet („Session”) lezárása A): A böngésző bezárásakor B): Programozott módon: „session.invalidate()” C): Alapértelmezett lejárati idő: A „web.xml” –ben Munkamenet azonosítása Minden Session objektumnak van egy ID-ja, ami a „getId()” metódussal, lekérdezhető. 2009
Sütik Speciális HTTP fejlécek A kliens oldalon tárolódnak el A sütik a böngészőben letilthatóak A kliensnek, a szerver által küldött azonosítót kell elmentenie, majd a munkamenet elévüléséig innen beolvassa a SESSIONID-t, amelyet elküld a szervernek. Fejlécek: Set-Cookie: a szerver által generált azonosító Cookie: a klienstől származó kérésekfejlécében. 2009
URL-újraírás A session azonosítója, ekkor az URL-ben kerül elküldésre. Pl. http://host/webapplication/servlet;jsessionid=xyz Ekkor, minden hivatkozáshoz (amelyet a servlet-ünk generál) hozzá kell fűznünk, a session azonosítót. A mai korszerű alkalmazások (JSP, JSF), az objektumok, és adatok SESSION-ben való kezelését, automatikus módon oldják meg. Nekünk csak a SESSION nyitásáról, és lezárásáról kell gondoskodnunk! 2009
Szűrő (Filter) készítése Egy szűrő segítségével feldolgozható a klienstől érkező kérés, ill. a válasz. Lényegében a kliens és a szerver közé ékelődő objektum. Nagyon hasonló a Servletekhez. Az osztály, implementálja a „javax.servlet.Filter” interfészt. A tényleges szűrést a „doFilter(ServletRequest request, ServletResponse response, FilterChain chain)” metódus végzi. 2009
Szűrő (Filter) készítése 2009
Szűrő (Filter) készítése 2009
Szűrő (Filter) készítése 2009
Szűrő (Filter) regisztrálása 2009