AJAX Framework építés. Nagy Attila Gábor Wildom Kft. nagya@wildom.com



Hasonló dokumentumok
Web-fejlesztés NGM_IN002_1

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

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

JAVA webes alkalmazások

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

Pick Pack Pont kereső és boltválasztó alkalmazás

12.óra jquery Framework #1. Gyimesi Ákos

Webes alkalmazások fejlesztése. Bevezetés az ASP.NET MVC 5 keretrendszerbe

MicroSigner Közvetítő Szerver fejlesztői dokumentáció

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

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

Kiknek szól ez a könyv? Miről szól a könyv? Hogyan épül fel a könyv? Mire van szükség a könyv használatához? Szokások Forráskód Hibajegyzék

Google Web Toolkit. Elek Márton. Drótposta kft.

AJAX AJAX. AJAX: Asynchronous JavaScript and XML. az alábbi technológiákon alapul: AJAX-ot támogató keretrendszerek

Szabadkai Műszaki Szakfőiskola. Web programozás. dr Zlatko Čović

Flex: csak rugalmasan!

A Java EE 5 plattform

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

MicroSigner Közvetítő Szerver fejlesztői dokumentáció

RIA Rich Internet Application

Jquery. Konstantinusz Kft.

Nyilvántartási Rendszer

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

Mozgásvizsgálati mérések internetes megjelenítése. Zemkó Szonja - Dr. Siki Zoltán

AJAX-ot támogató keretrendszerek

MVC. Model View Controller

Ajax és Echo 2. Bokor Attila

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

Zimbra levelező rendszer

Mobilizálódó OSZK. A nemzeti könyvtár mobileszközöket célzó fejlesztései az elmúlt időszakban. Garamvölgyi László. Networkshop, 2013.

Inczédy György Középiskola, Szakiskola és Kollégium Nyíregyháza, Árok u. 53. TANMENET. Informatika szakmacsoport

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

JavaScript Web AppBuilder használata

Kalumet Számlázó. Termék leírás

Webszolgáltatások (WS)

PHP-MySQL. Adatbázisok gyakorlat

Miért ASP.NET? Egyszerű webes alkalmazás fejlesztése. Történet ASP ASP.NET. Működés. Készítette: Simon Nándor

Google App Engine az Oktatásban 1.0. ügyvezető MattaKis Consulting

"Egységes erdélyi felnőttképzés Kárpát-medencei hálózatban" JAVA ALAPÚ WEBPROGRAMOZÁS. M6 Modul: A DOM Modell

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

Elektronikus Információs és Nyilvántartási Rendszer a Doktori Iskolák fiatal kutatói részére

Webes alkalmazások fejlesztése

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

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

Smarty AJAX. Miért jó ez? Ha utálsz gépelni, akkor tudod. Milyen műveletet tudunk elvégezni velük:

ELEKTRONIKUS MUNKABÉRJEGYZÉK MODUL

Web programoz as

GIS fejlesztés Web platformra nyílt forráskódú ingyenes eszközökkel

Tel.: 06-30/ Közösségi megosztás előnyei és alkalmazása

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

Image Processor BarCode Service. Felhasználói és üzemeltetői kézikönyv

Valimed API. REST API a magyarországi orvos pecsétszámok validálására

Információ és kommunikáció

PHP. Adatbázisok gyakorlat

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

MicroSigner Közvetítő Szerver fejlesztői dokumentáció

FELHASZNÁLÓI KÉZIKÖNYV

Két tűz között. statikus site generátorok és javascript alkalmazások és a Drupal

FELHASZNÁLÓI KÉZIKÖNYV SCHEDULEDETAIL KEZELÉSI ÚTMUTATÓ (TATABÁNYA VÁROS KÖZLEKEDÉSE) 1.00 verzió Dátum:

SZABADKAI MŰSZAKI SZAKFŐISKOLA. PREZENTÁCIÓ E-mobil tantárgyból Jquery Mobil Keretrendszer SZABADKA, 2015.

web2-es és web3-as szolgáltatások

Internet programozása. 1. előadás

Információ és kommunikáció

JavaScript bűvésztrükkök, avagy PDF olvasó és böngésző hackelés

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

1. fejezet Bevezetés a web programozásába (Balássy György munkája) Az internet működése... 11

Böngésző kompatibilitás

A szerzõrõl... vii Köszönetnyilvánítás... ix Bevezetés... xi A könyv példakódjai... xiii Áttekintés... xv Tartalomjegyzék... xvii

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

FELHASZNÁLÓI KÉZIKÖNYV SCHEDULEDETAIL KEZELÉSI ÚTMUTATÓ (DEBRECEN VÁROS KÖZLEKEDÉSE) 1.00 verzió Dátum:

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

Dinamikus terhelés hatására létrejövő deformáció mérése. Dr. Siki Zoltán Moka Dániel BME Általános- és Felsőgeodézia tanszék

A WEB programozása - Bevezetés őszi félév Dr. Gál Tibor

Nem szerencsétlenkedünk többet szörfözés közben! Egy új technológia egyre több

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

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

Tisztelt Felhasználó!

Webapp (in)security. Gyakori hibákról és azok kivédéséről fejlesztőknek és üzemeltetőknek egyaránt. Veres-Szentkirályi András

Szoftver labor III. Tematika. Gyakorlatok. Dr. Csébfalvi Balázs

Sütik kezelése (cookie)

Információs technológiák 2. Gy: CSS, JS alapok

Eseménykezelés. Szoftvertervezés és -fejlesztés II. előadás. Szénási Sándor.

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

Útmutató az OKM 2007 FIT-jelentés telepítéséhez

Bevezető. Servlet alapgondolatok

Objektumorientált programozás

HunGrid Grid technológiák hozzáférési lehetőségei az intézetben

Magic xpi 4.0 vadonatúj Architektúrája Gigaspaces alapokon

KlausenMobi. Követelmény dokumentáció. Verzió: 1.0. Dátum: Státusz: Released

Tudásalapú információ-kereső rendszerek elemzése és kifejlesztése

Tartalomjegyzék. Előszó... 10

Mobil SEO Kell-e külön foglalkozni a mobil jelenlétünk kereső optimalizálásával? Adam Lunczner Digital Director

A leírás bemutatja hogy mint minden másra, Favicon készítésre is alkalmas az ingyenes Gimp rajzolóprogram.

Web programozás. 3. előadás

Sütik (cookie) kezelése

Készítette: Enisz Krisztián, Lugossy Balázs, Speiser Ferenc, Ughy Gergely

OpenCL alapú eszközök verifikációja és validációja a gyakorlatban

Információ és kommunikáció

WEB-PROGRAMOZÁS II. 1. Egészítse ki a következő PHP kódot a következők szerint: a,b,c,d: <?php. interface Kiir { public function kiir();

Élő webes alkalmazások rendszerfelügyelete cím- és tartalomteszteléssel

Átírás:

AJAX Framework építés Wildom Kft. nagya@wildom.com

Mi az AJAX? Asynchronous JavaScript and XML Ennél azért kicsit több: Koncepció váltás a felhasználói interface tervezésben Standard kompatibilis HTML! XML-en kívül más adatformátumok is (sőt!): JSON (JavaScript Object Notation) Plain text HTML 30/2

AJAX vagy hagyományos HTTP? AJAX Kisebb sávszélesség és CPU terhelés Alkalmazás logikai és prezentációs réteg jobb elválasztása Kliens oldali logika: tárolt adatok, navigáció követhető Kényelmesebb felhasználói felület HTTP Bevált eszközök: IDE, framework, template engine Böngésző független Ismert erőforrások Kereső motorok könnyebben tudják indexelni 30/3

Miért nem használtuk eddig? Böngésző inkompatibilitás Kezdetleges JavaScript (fontos eszközök hiánya) Komoly JavaScript futtatásához lassú gépek és böngészők Nem megfelelően alkalmazott HTML Lassú internet kapcsolatok (rossz válaszidők) 30/4

Mi változott? Erősebb gépek Standard kompatibilis HTML, XHTML Letisztult JavaScript, jól használható DOM specifikáció Ezekre épített cross-browser alkalmazás könyvtárak Gyorsabb internet (jobb válaszidők) 30/5

Vonzó példák Meglepően jól működő rendszerek: gmail netvibes flickr del.icio.us stb Én is akarok ilyet! 30/6

Mire használnak AJAX-ot? Kezelhetőség segítése flickr adatlapok del.icio.us iwiw Desktop imitálása gmail google maps flickr képrendező netvibes 30/7

Konkrét esetben Volánbusz on-line jegyrendelő rendszer Sok bonyolító tényező: nehezen megkülönböztethető termékek (jegyek) szigorú kontingens kezelés - zárolások több ajánlat készítése on-line fizetés (nem csak rendelés) Step-by-step, varázsló jellegű működés 30/8

Miért AJAX? A hagyományos működés nem vált be A szabad előre-hátra lépkedés nagyon megbonyolítja a rendszert: zárolások kezelése nehézkes helyett az oldalak nem támaszkodhatnak egymásra A rendszert több helyre is be kellett illeszteni, ezért függetleníteni kellett a weboldal rendszerétől A varázslók tipikus asztali alkalmazások 30/9

Mit használjak? Teljes körű könyvtárak Yahoo UI Google Web Toolkit Túl összetett (megtanulni) Alapkönyvtárak Prototype jquery advajax TrimPath Egyik sem tud mindent 30/10

Rakjuk össze darabonként Az alapkönyvtárak jól kiegészítik egymást Együtt használva sem túl nagyok A kiválasztott eszközök: Prototype advajax TrimPath JavaScript Templates 30/11

Mire kell: Prototype Legalsó réteg Böngésző függetlenség kialakítása Eseménykezelés megoldása Egyszerűsíti a programozást, olvashatóságot 30/12

Mire kell: advajax JavaScript és a webszerver közötti kommunikációra Használhattuk volna a Prototype szolgáltatásait is, de ez szerintem: Egyszerűbben használható Több szolgáltatást nyújt: Összetett hibakezelés Egy időben futó kérések összehangolása Jó paraméterezhetőség 30/13

Mire kell: JavaScript Templates A szerver válasza alapján összetett oldalakat kell előállítani: Táblázatok, listák Űrlapok Tisztán a DOM csak apró módosítások esetén kényelmes Szintaktikája hasonló a Smartyhoz Megjelenítés elválasztható a logikától 30/14

JST lehetőségei <h1>személy:</h1> <p>név: ${user.name}</p> <p>cím: ${user.address}</p> <p>házas: {if user.married}igen{else}nem{/if}</p> <h1>gyermekek:</h1> <ul> {for child in user.children} <li>${child.name}</li> {forelse} <li><em>nincs</em></li> {/for} </ul> 30/15

Oldalak leírása A keretrendszer bemenete Leegyszerűsíti egy oldal betöltését var PAGES = { 'index': {template: 'index.tpl'}, 'search': {template: 'search.tpl'}, 'data': {template: 'data.tpl'} }; 30/16

Oldal betöltés A fenti oldalleírás alapján letöltjük az oldalt function loadpage(name, contentdata) { var pagedata = PAGES[name]; advajax.get({url: TEMPLATE_ROOT+pageData.template, onsuccess: initialisetemplate, onerror: errorhandler, tag: {'pd': pagedata}}); } 30/17

Oldal megjelenítés TrimPath Template objektum előállítása function initialisetemplate(obj) { var template = TrimPath.parseTemplate(obj.responseText); intialisepage(template, obj.tag.pd); } function initialisepage(template, pd) { $(TARGET_NODE_ID).innerHTML = template.process(pd.contentdata); } 30/18

Testreszabhatóság 1. Hookok bevezetése var PAGES = { 'index': {template: 'index.tpl' init: function() {...}, onload: function() {...}}, 'search': {template: 'search.tpl'}, 'data': {template: 'data.tpl'} }; 30/19

Testreszabhatóság 2. Hookok bevezetése function initialisepage(template, pd) { // init hook hívása var parameters = pd.init? pd.init(pd.contentdata) : pd.contentdata; $(TARGET_NODE_ID).innerHTML = template.process(parameters); // onload hook hívása if (pd.onload) pd.onload(); } 30/20

További egyszerű bővítések Betöltött template-ek cachelése memóriába, így a kliens és a szerver terhelése is csökkenthető Globális paraméterek: az initialisepage minden oldalletöltésnél hozzáadja a paraméterekhez (például képek elérési útja, nyelv beállítás, stb) onunload kezelése, például zárolások feloldására. Nagyon megbízható! pl: <body onunload= releaselocks() > 30/21

Események kiváltása Az oldalon található vezérlők indítják el a funkciókat <a> tag nem jó: kivezet az oldalról ha a metódus nem tér vissza false értékkel ha a kódban hiba történik Helyette <span> tagek használata célszerű: <span id= next class= link onclick= loadpage('kovetkezo'); >tovább</span> 30/22

Vezérlők automatikus elhelyezése Így a template-be egyáltalán nem kell JavaScriptet írni Oldalleírás: var PAGES = { 'index': {template: 'index.tpl' init: function() {...}, onload: function() {...}, hotspots: {'prev': function() {...}, 'next': function() { }}, loadpage('nextpage'); }; 30/23

Vezérlők automatikus elhelyezése onclick események definiálása az oldal betöltése után: function initialisepage(template, pd) { (...) $(TARGET_NODE_ID).innerHTML = template.process(parameters); for (var i in pd.hotspots) { } var hotspot = $(i); if (hotspot} hotspot.onclik = pd.hotspots[i]; } (...) 30/24

Előre, hátra gombok kezelése Felhasználó nagyon hozzászokott ha baj van, azonnal a vissza gombot nyomja meg Bonyolult feladat: Eseményként nem kapható el Böngészőnként változó megoldás Firefox, Safari: url hash részének figyelése egy időzítővel. Könnyű, megbízható, és elegáns. IE: rejtett iframe-be töltünk egy oldalt, ami visszahívja a szülő alkalmazást. Nehézkes, és bizonytalan. Bővebben: http://www.contentwithstyle.co.uk/articles/38/ 30/25

Architektúrális felépítés Szerver Adatbázis Alkalmazás logika API jellegű interface a JavaScript felé Session kezelés Template-ek előkészítése (például i18n) Kliens Állapotgép, eldönti mely API hívások szükségesek Megjelenítés Felhasználói input előszűrése, és eljuttatása a szerver felé 30/26

Adatkommunikáció Tartalmak: HTML, plain text Adatok: JSON XML: nehezebb kezelni szerver és kliens oldalon is JavaScript oldalon egy eval PHP implementáció: http://mike.teczno.com/json.html Érdemes egy réteget készíteni erre Adatok hozzáadása, küldése Hiba küldés 30/27

Biztonság Kliensben sosem bízhatunk meg! Többet tudó kliens, ezért jobban kell figyelni Klienstől jövő adatokat akkor is ellenőrizni kell, ha azt a JavaScript már megtette Adatok szintaktikai helyessége Helyes API hívási sorrend Apró hiba esetén is mindent megállítani! Egyszerűsödő szerver: használjuk ki ellenőrzésre! 30/28

Biztonság Csak azt adjuk ki a JavaScript felé, amire okvetlenül szüksége van API metódusok jól körülhatárolható funkciókat lássanak el, például: Visszaadja a célállomások nevét Útvonalat keres két település között Adott napra kikeresi a járatokat A sessionben tárolt járatokra megadja a jegyárat 30/29

Linkek Prototype: http://www.prototypejs.org/ jquery: http://jquery.com/ advajax: http://advajax.anakin.us/index-en.htm TrimPath JST: http://trimpath.com/project/wiki/javascripttemplates Yahoo! UI: http://developer.yahoo.com/yui/ Google WebToolkit: http://code.google.com/webtoolkit/ 30/30