Java. Menetkezelés. Eseményfigyelők. ANTAL Margit. Munkamenetek. ANTAL Margit. Sapientia - EMTE



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

Szervlet-JSP együttműködé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.

Java szervlet technológia

Menetkövetés lehetőségei

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

JEE tutorial. Zsíros Levente, 2012

Web-fejlesztés NGM_IN002_1

JavaServer Pages (JSP) (folytatás)

Web-fejlesztés NGM_IN002_1

Java servlet technológia 1 / 40

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 és web programozás

Java bevezet o Kab odi L aszl o Kab odi L aszl o Java bevezet o

Segédanyag: Java alkalmazások gyakorlat

Stateless Session Bean

Java. Perzisztencia. ANTAL Margit. Java Persistence API. Object Relational Mapping. Perzisztencia. Entity components. ANTAL Margit.

Helyes-e az alábbi kódrészlet? int i = 1; i = i * 3 + 1; int j; j = i + 1; Nem. Igen. Hányféleképpen lehet Javaban megjegyzést írni?

Adatbázisok webalkalmazásokban

Webfejlesztés alapjai

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

Interaktív weboldalak készítése

Segédanyag: Java alkalmazások gyakorlat

Abstract osztályok és interface-ek. 7-dik gyakorlat

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

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

JAVA webes alkalmazások

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

Java programozási nyelv 10. rész Input/output kezelés

A. függelék Webalkalmazások

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

WEBFEJLESZTÉS 2. MUNKAMENET-KEZELÉS, HITELESÍTÉS

Kivételkezelés, naplózás. Exception handling, logging

Kivételkezelés, beágyazott osztályok. Nyolcadik gyakorlat

Biztonság java web alkalmazásokban

COMET webalkalmazás fejlesztés. Tóth Ádám Jasmin Media Group

Java programozási nyelv

Segédanyag: Java alkalmazások gyakorlat

Struts2 keretrendszer

Se S r e ial a iza z t a ion o n (in n Ja J v a a v ) a Szerializáció

Web programoz as

Perzisztencia. ANTAL Margit. Sapientia - EMTE. ANTAL Margit Java technológiák 11. előadás Perzisztencia

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

Ja J v a a v a há h l á óz ó a z t a i al a ka k l a maz ma á z s á o s k o Socket, URL

CREATE TABLE student ( id int NOT NULL GENERATED ALWAYS AS IDENTITY PRIMARY KEY, name varchar(100) NOT NULL, address varchar(100) NOT NULL )

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

Programozási nyelvek Java

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

Objektumorientált programozás C# nyelven

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

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

Szerializáció. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) Szerializáció / 22

Java Web technológiák

Kivételek kezelése (exception handling) Hibakezelés old style. Kivételkezelés

Szoftvertechnológia alapjai Java előadások

Java Servletek alapjai

JAVA PROGRAMOZÁS 3.ELŐADÁS

Objektum Orientált Programozás. 11. Kivételkezelés 44/1B IT MAN

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

Programozás II. ATM példa Dr. Iványi Péter

SZÁMÍTÓGÉPES ADATBÁZIS-KEZELÉS. A MySQL adatbáziskezelő PHP folytatás JDBC, ODBC

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

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

Vé V g é r g e r h e a h j a tá t s á i s s z s ál á ak a Runnable, Thread

Overview. Service. Application Activity Activity 2 Activity 3. Fragment. Fragment. Fragment. Frag ment. Fragment. Broadcast Receiver

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Java és web programozás

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

és az instanceof operátor

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

Programozási nyelvek II.: JAVA

API tervezése mobil környezetbe. gyakorlat

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

A JavaServer Pages (JSP)

Informatika terméktervezőknek

XML adatkezelés I. Az SAX szabvány. Dr. Kovács László Miskolci Egyetem Általános Informatikai Tanszék. XML adatok kezelési lehetőségei

Szoftvertechnológia alapjai Java előadások

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

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

A JavaServer Pages (JSP)

Grafikus felhasználói felületek. Abstract Window Toolkit, a java.awt és java.awt.event csomagok

Internetes böngésző fejlesztése a mobil OO világban

JAVA PROGRAMOZÁS 8.ELŐADÁS

JNDI - alapok. Java Naming and Directory Interface

Osztályok. 4. gyakorlat

Objektumorientált programozás C# nyelven III.

A JavaServer Pages (JSP)

Webes alkalmazások fejlesztése 6. előadás. Állapotfenntartás (ASP.NET) 2015 Giachetta Roberto

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

JUnit. JUnit használata. IDE támogatás. Parancssori használat. Teszt készítése. Teszt készítése

Java IX. telkezelés a Java-ban

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

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

Java Programozás 11. Ea: MVC modell

webalkalmazások fejlesztése elosztott alapon

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

Java IX. telkezelés a Java-ban

7. K: JAVA alapok Konzultáció

Átírás:

Sapientia - EMTE 2009

A célja 1. Menetkezelés A HttpSession interfész 2. 3.

HTTP és menetkövetés A HTTP egy állapotmentes protokoll: minden kérés-válasz kapcsolat egymástól független. A webkonténer feladata egy olyan mechanizmus létrehozása, amely tárolja a menetinformációkat ügyfelenként.

Meneti hatókör Figure: Meneti hatókör [IMRE]

Sütik A sütiket a HTTP protokoll specifikálja, segítségükkel kis, szöveges információkat lehet tárolni kliensoldalon. A sütiket a webszerver (webkonténer) küldi a kliensnek (böngésző). A sütit a Set Cookie fejlécben küldi: Set Cookie: NAME=VALUE; expires=date; path=path; domain=domain;secure Miután a böngésző egy adott tartományhoz eltárolt egy sütit, az ezt követő összes, az adott tartományhoz intézett kérésben ezt visszaküldi. A sütik tárolása kliensoldalon történik.

Süti elküldése a böngészőnek Set Cookie: NAME=VALUE; expires=date; path=path; domain=domain;secure

Sütik tulajdonságai Perzisztencia perzisztens (maradandó): ha a süti tartalmazza az expires tulajdonságot nem perzisztens: másképpen ebben az esetben a böngésző bezárásakor törlődik ha lejár a süti ideje, a böngésző letörli Biztonság secure: csak HTTPS kapcsolaton keresztül küldhető másképpen: HTTP és HTTPS kapcsolaton is

Sütik a böngészőben

Süti visszaküldése böngészőből Cookie fejlécben Cookie: NAME1=VALUE1; NAME2=VALUE2; NAME3=VALUE3;

HttpSession API Figure: A HttpSession API [FJ310]

Servlet API - menetkövetés A webkonténer minden egyes ügyfeléhez hozzá van rendelve egy HttpSession objektum. Ez az objektum információkat tárol az ügyfélről, illetve lehetővé teszi az illető ügyfélhez tartozó menetinformációk mentését. A menet élettartama lejárhat: automatikusan, egy előre beállított tétlenségi idő elteltével, kézi vezérléssel. Ha egy menet érvénytelenné válik, akkor a menetobjektumból az összes információ elvesztődik Ha az információkat nem akarjuk elveszíteni ügyfél bejelentkezése+mentés adatbazisba.

Menet lejárati ideje deklaratív módszer web.xml telepítésleíró az idő percben kifejezve <web-app> <session-config> <session-timeout> 60 </session-timeout> </session-config> </web-app>

Menet lejárati ideje programozott módszer az idő másodpercben van kifejezve public interface HttpSession{ void invalidate(); long getcreationtime(); long getlastaccessedtime(); int getmaxinactiveinterval(); void setmaxinactiveinterval(int); }

Menet lejárati idejének helyes megválasztása Banki alkalmazásoknál a lejárati idő nagyon rövid biztonsági okok. Adatbázis kapcsolatokat tároló menetek is minimálisra állítják a lejárati időt. Ha a menet nem tárol költséges objektumkat, a menet lejárati idő lehet a szokásosnál hosszabb. Bevásárló kocsi tartalmát tároló menetek hosszú lejáratúak.

Szervlet doget metódus Mit csinál? response.setcontenttype("text/html;charset=utf-8"); PrintWriter out = response.getwriter(); HttpSession session=request.getsession(); Integer counter = (Integer)session.getAttribute("counter"); if( counter == null) counter=new Integer(1); else counter=new Integer(counter.intValue()+1); session.setattribute("counter",counter); out.println("<html><head><title> Session Counter</TITLE></HEAD>"); out.println("<body>"); out.println("</h4>you have visited this page "+ counter+" times</h4>"); out.println("</body>"); out.println("</html>");

Sütik összefoglalás A sütiket a webszerverek küldik. A sütiket az ügyfél gépe tárolja. A sütiket az ügyfél böngészője a webszerver tartománynevéhez asszociálva tárolja. Minden egyes kérésben, amely egy bejegyzett webszerver irányába történik, a hozzá tartozó összes süti is elküldésre kerül. A sütik élettartamát a szerveroldal állítja be a süti küldésekor, és az ügyfél böngészője kezeli.

A menetobjektum használata szerveroldal tárolja a menetazonosítót JSESSIONID, más objektumokat is tárolhat. Objektum regisztrálása meneti hatókörbe HttpSession session = request.getsession(); Course course = new Course(" SE", " Standard Edition", 1000); session.setattribute("course", course); Objektum előkeresése meneti hatókörből HttpSession session = request.getsession(); Course c = (Course)session.getAttribute("course");

Adatok küldése sütikben Ha a menetazonosítón (JSESSIONID) kívül más adatot is szeretnénk küldeni... Küldés String name = request.getparameter("name"); Cookie c = new Cookie("yourname",name); response.addcookie(c); Fogadás String name=null; Cookie[] cookies = request.getcookies(); for( int i=0; i<cookies.length; ++i ){ if(cookies[i].getname().equals("yourname")) name = cookies[i].getvalue(); }

Megkötések a sütikkel kapcsolatosan A sütik alkotják az alapértelmezett menetkezelési mechanizmust. Bizonyos böngészők nem engedélyezik a sütiket. Sütik engedélyezettségének lekérdezése: HttpServletRequest --> isrequestedsessionidfromcookie A menetazonosítót tartalmazó süti neve: JSESSIONID

A szervletek specifikációja előírja, hogy azoknál a böngészőknél is kell támogatni a menetkövetést, amelyek nem fogadnak sütiket. Egyik sütihelyettesítő eljárás az. Az kevésbé elegáns és átlátható, mint a sütik. Még a statikus HTML lapokat is dinamikusan kell előállítani, mert URL módosítás lesz minden egyes A-HREF és FORM tagban

a: encodeurl out.println("<form action= " + response.encodeurl("add_course.do") + " method= POST >");

Mihez lehet eseményfigyelőt rendelni? kérés, kérés szintű attribútum, munkamenet, munkamenet szintű attribútum, munkamenet aktiválása, webalkalmazás, webalkalmazás szintű attribútum.

Interfészek javax.servlet.servletrequestlistener javax.servlet.servletrequestattributelistener javax.servlet.http.httpsessionlistener javax.servlet.http.httpsessionattributelistener javax.servlet.http.httpsessionactivationlistener javax.servlet.servletcontextlistener javax.servlet.servletcontextattributelistener

Weblkalmazás-figyelő készítése ServletContextListener Webalkalmazás életciklusát a webkonténer szabályozza: Webkonténer indítása minden telepített webalkalmazás inicializálódik. Webkonténer leállítása Minden webalkalmazás megsemmisül. Készíthetünk olyan figyelőt, amely lekezeli a fenti eseményeket.

ServletContextListener Figure: ServletContextListener [SL314]

ServletContextListener interfész Műveletek contextinitialized(servletcontextevent) contextdestroyed(servletcontextevent)

Webalkalmazás paraméterei web.xml <context-param> <param-name>course-file</param-name> <param-value> /WEB-INF/courses.txt </param-value> </context-param>... <listener> <listener-class> InitializeCourses </listener-class> </listener>

ServletContextListener I public class ApplicationContextListener implements ServletContextListener { public void contextinitialized( ServletContextEvent arg0) { ServletContext ctx= arg0.getservletcontext(); List courselist= new LinkedList(); String coursefile=ctx.getinitparameter( "course-file"); //Fajl beolvasasa InputStream is = null; BufferedReader reader = null; try{ is = ctx. getresourceasstream(coursefile);

ServletContextListener II reader = new BufferedReader( new InputStreamReader( is )); String record; while((record = reader.readline())!=null ){ //A sor feldolgozasa: name, price Course course = new Course(name, price); courselist.add(course); } ctx.setattribute("courselist", courselist); } catch( Exception e ){ context.log("exception while processing the courses file.",e); } finally{//lezarasok} }

Menetszámláló HttpSessionListener package listeners; import javax.servlet.http.*; public class SessionCounterListener implements HttpSessionListener{ private static int sessioncounter = 0; public void sessioncreated( HttpSessionEvent e){ sessioncounter++; } public void sessiondestroyed( HttpSessionEvent e){ sessioncounter--; } public static int getsessionnumber(){ return sessioncounter; } }

Menetszámláló HttpSessionListener Kérdés Helyesen viselkedik-e az előző figyelő egyidejű kérések esetén?

Szűrővel végezhető tevékenységek jogosultságellenőrzés szervletek hatékonyságának mérése és naplózása a válasz tömörítése lokalizáció

Kérésfeldolgozás szűrővel

Kérésfeldolgozás szűrővel

A Filter API Figure: A Filter API [SL314]

Kérés paramétereinek naplózása public void dofilter( ServletRequest request, ServletResponse response, FilterChain chain) throws IOException, ServletException { Logger log=logger.getlogger("req. par.:"); Enumeration parameters= request.getparameternames(); while(parameters.hasmoreelements()){ String p=(string)parameters.nextelement(); log.info(p+": "); String[] ps=request.getparametervalues(p); for( int i=0; i<ps.length; ++i ) log.info("\t"+ps[i]); } chain.dofilter( request,response); }

Szűrő konfigurálása <filter> <filter-name>logfilter</filter-name> <filter-class> LogRequestParametersFilter </filter-class> </filter> <filter-mapping> <filter-name>logfilter</filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

leképzése Szervlet-leképzés <filter-mapping> <filter-name>perffilter</filter-name> <servlet-name> FrontController </servlet-name> </filter-mapping> URL-leképzés <filter-mapping> <filter-name>perffilter</filter-name> <url-pattern>/*.do</url-pattern> </filter-mapping>

PerformanceFilter szűrő public void dofilter(servletrequest request, ServletResponse response,filterchain chain) throws IOException, ServletException { long begin = System.currentTimeMillis(); chain.dofilter(request, response); long end = System.currentTimeMillis(); filterconfig.getservletcontext().log( "Ellapsed time: "+(end-begin)+" ms"); }

A PerformanceFilter szűrő konfigurálása <filter> <filter-name> PerformanceFilter </filter-name> <filter-class> filters.performancefilter </filter-class> </filter> <filter-mapping> <filter-name> PerformanceFilter </filter-name> <url-pattern>/*</url-pattern> </filter-mapping>

Feladat <servlet-mapping> <servlet-name>frontcontroller</servlet-name> <url-pattern>*.do</url-pattern> </servlet-mapping> <filter-mapping> <filter-name>perffilter</filter-name> <servlet-name>frontcontroller</servlet-name> </filter-mapping> <filter-mapping> <filter-name>auditfilter</filter-name> <url-pattern>*.do</url-patern> </filter-mapping> <filter-mapping> <filter-name>transfilter</filter-name> <url-pattern>*.do</url-patern> </filter-mapping>

Kérdés A fenti szűrőkonfiguráció egy app nevű webalkalmazáshoz tartozik, amely az ms.sapientia.ro szerver 8080-as portján fogadja a kéréseket. Legyen a kérés URL a következő: Kérés http://server:8080/app/admin/add_league.do Mely szűrők és milyen sorrendben hívódnak meg?