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



Hasonló dokumentumok
BME IK 2 JAVA SERVER FACES UML-1 20/11/2013. Apache Struts. Spring MVC. Java Server Faces. Google Web Toolkit. Képességek

JAVA webes alkalmazások

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

SZAKDOLGOZAT CSEHI MIKLÓS DEBRECEN 2009.

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

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

Web-fejlesztés NGM_IN002_1

Web-fejlesztés NGM_IN002_1

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

A Java EE 5 plattform

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

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

Programozási technológia

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

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

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

Java Web technológiák

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

JEE tutorial. Zsíros Levente, 2012

Bevezető. Servlet alapgondolatok

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

A JavaServer Pages (JSP)

A JavaServer Pages (JSP)

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

webalkalmazások fejlesztése elosztott alapon

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

Swing GUI készítése NetBeans IDE segítségével

Ajax és Echo 2. Bokor Attila

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.

C#, OOP. Osztályok tervezése C#-ban

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.

Közösség, projektek, IDE

Java I. A Java programozási nyelv

Az Apache Wicket keretrendszer

A JavaServer Pages (JSP)

ESEMÉNY VEZÉRELT ALKALMAZÁSOK FEJLESZTÉSE I. Bevezetés. Készítette: Gregorics Tibor

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

OOP és UML Áttekintés

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

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

A TANTÁRGY ADATLAPJA

RIA Rich Internet Application

MVC. Model View Controller

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

Modellinformációk szabványos cseréje. Papp Ágnes, Debreceni Egyetem EFK

Viczián István IP Systems JUM XIX szeptember 18.

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

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

eseményvezérelt megoldások Vizuális programozás 5. előadás

Áttekintés. Tartalom. Mi is az a Bean?

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

Testreszabott alkalmazások fejlesztése Notes és Quickr környezetben

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

Bevezetés a Seam keretrendszer használatába

Enterprise JavaBeans 1.4 platform (EJB 2.0)

Petőfi Irodalmi Múzeum. megújuló rendszere technológiaváltás

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

Eseményvezérelt alkalmazások fejlesztése II 12. előadás. Objektumrelációs adatkezelés (ADO.NET) Giachetta Roberto

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

JAVA SE/ME tanfolyam tematika

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

Junior Java Képzés. Tematika

Struts2 keretrendszer

Flex: csak rugalmasan!

JavaServer Pages (JSP) (folytatás)

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

Autóipari beágyazott rendszerek. Komponens és rendszer integráció

ZH mintapélda. Feladat. Felület

Java-ról Kotlinra. Ekler Péter AutSoft BME AUT. AutSoft

Komponens alapú fejlesztés

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

A TANTÁRGY ADATLAPJA

Komponens alapú programozás Bevezetés

Web programoz as

Metamodellezés. Simon Balázs BME IIT, 2011.

SOA modell: Ez az interfész definiálja az elérhető adatokat, és megadja, hogy hogyan lehet azokhoz hozzáférni.

Sorosítás (szerializáció) és helyreállítás. 1. Bináris sorosítás és helyreállítás Szükséges névterek Attribútumok. 1.3.

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

WCF, Entity Framework, ASP.NET, WPF 1. WCF service-t (adatbázissal Entity Framework) 2. ASP.NET kliens 3. WPF kliens

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

Adatelemzés SAS Enterprise Guide használatával. Soltész Gábor solteszgabee[at]gmail.com

1. Mi a fejállományok szerepe C és C++ nyelvben és hogyan használjuk őket? 2. Milyen alapvető változókat használhatunk a C és C++ nyelvben?

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

CORBA Áttekintés. Mi a CORBA? OMG and OMA. Ficsor Lajos. Miskolci Egyetem Általános Informatikai Tanszék

Szolgáltatás Orientált Architektúra a MAVIR-nál

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

Üzleti intelligencia eszköztár a SAS 9.2 platformon

Programozási nyelvek Java

ASP.NET CORE MVC Model réteg bevezetése Model Binding Repository tervezési minta Dependency Injection Transient és Singleton Custom Binding AutoMapper

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();

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

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

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

Szoftver-technológia II. Szoftver újrafelhasználás. (Software reuse) Irodalom

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

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

munkafüzet open eseményéhez

OOP #14 (referencia-elv)

Programozási alapismeretek 4.

Java Servlet technológia

Átírás:

Webalkalmazás fejlesztés Java EE környezetben NetBeans segítségével: JavaServer Faces 1.2 AJAX Varga Péter peter.varga@sun.hu Zsemlye Tamás tamas.zsemlye@sun.com

Áttekintés Hagyományos webalkalmazás-fejlesztés JavaServer Faces A JSF és az AJAX kapcsolata A JSF barátsága a vizuális fejlesztőeszközökkel A NetBeans JSF támogatása

Hagyományos webalkalmazás fejlesztés JAVA segítségével Servlet specifikáció Többszálú kérésfeldolgozási modell Skálázhatóság J2EE szabvány része, sok-sok elérhető szolgáltatás Objektum orientált szemlélet Hátránya, hogy JAVA tudás szükséges

Hagyományos webalkalmazás fejlesztés JAVA segítségével JavaServer Pages specifikáció HTML közeli leírónyelv, mégis dinamikus tartalom A JSP szervletté alakul futási időben Scriptlet (nem szerencsés) Action Tag libraries (JSP 2.0 óta beépített: JSTL) JavaBeans szabvány Expression Language (JSP 2.0)

JavaBeans komponensek Ez egy Java osztály, mely: Teljesen egységbe zárt (nincs publikus változója) Rendelkezik publikus, paraméterek nélküli konstruktorral Tulajdonságai (bean-property) get, és set metódusok által definiáltak.

JavaBeans komponensek public class Customer { private String myname; private Address myaddress; public String getname() { return myname; } public void setname(string name) { myname = name; } public Address getaddress() { return myaddress; }

JavaBeans komponensek public class Address { private String city; private String street; public String getcity() { return city; } public String getstreet() { return street; } }

Expression Language session.getattribute("cust").getaddress().ge tcity(); ${sessionscope.cust.address.city} ${1 + (3 * 4)} ${not empty mybean.customerlist} ${applicationscope.mymap['list'][param.i ]}

Java alapú webalkalmazás fejlesztés szakaszai Model 1 architektúra - káosz Model-View-Controller web adaptációja - Model 2 Web MVC keretrendszerek Szabványos keretrendszer JavaServer Faces (J2EE 5.0 óta)

Model-View-Controller Notify changes Model Retrieve data Update View User events Select view Controller

Model 2 architektúra Model Retrieve data Update model Retrieve data JSP (view) User events Select view, send data Servlet (controller)

Model 2 keretrendszerek Tervezési minták alkalmazása kézbentartható webfejlesztés > Front Controller > Application Controller > Command > Context Object Kész keretrendszerek használata > Sun's J2EE blueprints Web Application Framework > Apache Struts (de facto szabvánnyá vált) > Spring WebMVC > Sok egyéb... > JavaServer Faces

JavaServer Faces Alapelvek Az alapkoncepció az absztrakció ereje > Komponens modell feketedoboz jellegű építőelemek > Komponensek adatmodellel való összekötése - EL > Navigáció egy irányított gráf (ha akarjuk) Futási idejű teljesítmény > Több implementáció válasszuk a leggyorsabbat > Minden ponton bővíthető/lecserélhető felépítés: lecserélhető az implementáció tetszőleges része egy saját, optimalizált verzióval

JavaServer Faces (folytatás) Alapelvek Elkülöníthető szerepkörök > Oldal készítő > Komponens fejlesztő > Alkalmazás fejlesztő > Fejlesztőeszköz készítő

JSF komponensek Egy komponens egy önálló felhasználói interakciót reprezentáló egység, például: > Logikai érték beállítás > Szövegbeírás > Egy lista elemének kiválasztása > Egy lista több elemének kiválasztása Függetlenek az adatátviteli protokolltól Függetlenek a megjelenéstől A komponensek élete egy kérés feldolgozásáig tart Saját állapotuk van ez elmenthető és visszaállítható

JSF komponens hierarchia

JSF komponensek A felhasználó által ismert komponensek az absztrakt komponensek és a rendererek együtteséből állnak össze, például: > UIData + Table = DataTable > UIInput + Text = InputText > UIInput + Secret = InputSecret > UISelectOne + Listbox = SelectOneListbox > UISelectOne + Menu = SelectOneMenu > UISelectOne + Radio = SelectOneRadio > UISelectMany + Listbox = SelectManyListbox > UISelectMany + Menu = SelectManyMenu > UISelectMany + Radio = SelectManyRadio

JSF komponens fa A JavaServer Faces a nézetet (view) komponensek fa struktúrájaként ábrázolja (csakúgy, mint a Swing)

JSF komponens fa (folytatás) Composite design pattern:

Egy kis példa

A példa komponens fája

A példa komponens fa definíciója <f:view> <h1><h:outputtext id="title" value="list of Customers (#{CustomerList.numberOfCustomers})" /></h1> <h:form id="myform"> <h:messages /> <h:datatable id="t1" value="#{customerlist.customers}" var="customer" cellspacing="2" cellpadding="2" style="background-color: grey"> <h:column id="c1"> <h:outputtext id="id" value="#{customer.ssn}"/> </h:column> <h:column id="c2"> <h:inputtext id="name" value="#{customer.custname}" size="20"/> </h:column>

A példa komponens fa definíciója (folyt.) size="40"/> <h:column id="c3"> <h:inputtext id="addr" value="#{customer.address}" </h:column> <h:column id="c4"> <h:commandbutton id="del" value="delete" action="#{customerlist.delete}"/> </h:column> </h:datatable> <h:commandbutton id="upd" value="update" action="#{customerlist.update}"/> </h:form> </f:view>

Managed bean-ek MVC modell-jének reprezentálói JavaBeanek, meghatárzott névvel, és scope-pal <managed-bean> <managed-bean-name>customerlist</managed-bean-name> <managed-bean-class> list.customerlist </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean>

Webalkalmazás scope-ok

Komponensek Modell kapcsolata Expression Language segítségével A managed bean-ek halmaza a kiindulási pont <managed-bean> <managed-bean-name>customerlist</managed-bean-name> <managed-bean-class> list.customerlist </managed-bean-class> <managed-bean-scope>session</managed-bean-scope> </managed-bean>

Komponensek Modell kapcsolata Expression Language segítségével A managed bean-ek halmaza a kiindulási pont <h:datatable id="t1" value="#{customerlist.customers}" var="customer" cellspacing="2" cellpadding="2" style="background-color: grey">

A JSF kérésfeldolgozási ciklusa

A JSF kérésfeldolgozási ciklusa Request Restore View Apply Request Values Process Validations Update Model Values Response Render Response Invoke Application

A JSF kérésfeldolgozás első lekérés Request Restore View Apply Request Values Üres komponensfa létrehozása viewid beállítása a fa gyökerén Process Validations Update Model Values Response Render Response Invoke Application

A JSF kérésfeldolgozás első lekérés Request Restore View Apply Request Values Process Validations Update Model Values Response Render Response Invoke Application

A Render Response fázis teendői Fabejárás három fázisban: > encodebegin > encodechildren > encodeend A szabványos komponensek a renderer ugyanilyen nevű metódusát hívják Request Response Restore View Render Response Apply Request Values Invoke Application Process Validations Update Model Values

A fabejárás

A fabejárás

A fabejárás

A fabejárás

A fabejárás

A fabejárás rowid = null clientid = myform:t1 #{customer} = null #{CustomerList.customers} =

A fabejárás rowid = 0 clientid = myform:t1:0 #{customer} = #{CustomerList.customers} =

A fabejárás rowid = 0 clientid = myform:t1:0 #{customer} = #{CustomerList.customers} =

A fabejárás rowid = 0 clientid = myform:t1:0 #{customer} = #{CustomerList.customers} =

A fabejárás rowid = 0 clientid = myform:t1:0 #{customer} = #{CustomerList.customers} =

A fabejárás rowid = 0 clientid = myform:t1:0 #{customer} = #{CustomerList.customers} =

A fabejárás rowid = 0 clientid = myform:t1:0 #{customer} = #{CustomerList.customers} =

A fabejárás rowid = 0 clientid = myform:t1:0 #{customer} = #{CustomerList.customers} =

A fabejárás rowid = 0 clientid = myform:t1:0 #{customer} = #{CustomerList.customers} =

A fabejárás rowid = 0 clientid = myform:t1:0 #{customer} = #{CustomerList.customers} =

A fabejárás rowid = 1 clientid = myform:t1:1 #{customer} = #{CustomerList.customers} =

A fabejárás rowid = 1 clientid = myform:t1:1 #{customer} = #{CustomerList.customers} =

A fabejárás rowid = 1 clientid = myform:t1:1 #{customer} = #{CustomerList.customers} =

A fabejárás rowid = 1 clientid = myform:t1:1 #{customer} = #{CustomerList.customers} =

A fabejárás rowid = 1 clientid = myform:t1:1 #{customer} = #{CustomerList.customers} =

A JSF kérésfeldolgozás visszaküldés Request Restore View Apply Request Values Komponensfa helyreállítása Process Validations Update Model Values Response Render Response Invoke Application

A JSF kérésfeldolgozás visszaküldés Request Restore View Apply Request Values Komponensek állapotának frissítése Értékek konvertálása (request value => submitted value) Process Validations Update Model Values Response Render Response Invoke Application

A konvertálási mechanizmus Egyszerű interfész (javax.faces.convert.converter): > getasobject(string) : Object > getasstring(object) : String Számos beépített konverter: > Primitív típusokra > DateTimeConverter > EnumConverter Converter hozzárendelési módok > converterid alapján > Típus (Class) alapján

Eseménykezelés A komponensek eseményeket generálnak, a GUI-ban megszokott módon kezeljük az eseményeket (observer pattern, FacesListener, FacesEvent) Minden fázisban keletkezhetnek események, de általában másik fázisban kell őket kezelni: a gomb megnyomása esetén az ActionEvent már az Apply Request Values fázisban létrejön, de csak az Invoke Application fázisban kezeljük ActionEvent alapértelmezett listener

A JSF kérésfeldolgozás visszaküldés Request Restore View Apply Request Values Process Validations Konvertált értékek validálása Update Model Values Response Render Response Invoke Application

A JSF kérésfeldolgozás visszaküldés Request Restore View Apply Request Values Process Validations A komponensekben tárolt értékek az összerendelt (bind-olt) backing bean property-kbe való beírása (setterek hívásával) Update Model Values Response Render Response Invoke Application

A JSF kérésfeldolgozás visszaküldés Request Restore View Apply Request Values Az alkalmazás action metódusa meghívódik A navigáció megtörténik Process Validations Update Model Values Response Render Response Invoke Application

A JSF kérésfeldolgozás visszaküldés Request Restore View Apply Request Values Process Validations Kimenet generálása a kliens számára (HTML, WML, stb.) Update Model Values Response Render Response Invoke Application

A JSF és az AJAX A JSF AJAX barát, mert jellemzője: > A rugalmas és bővíthető komponens modell, > A jól definiált kérésfeldolgozási ciklus > A rugalmas és bővíthető renderelési modell Alapelvek, melyek lehetővé teszik az AJAX használatát > Egységbe zárás: el lehet rejteni a JavaScript-et az oldal készítője elől, de meg lehet mutatni a komponensfejlesztőnek > Állapot menedzsment: könnyű szinkronban tartani a szerver oldali és a kliens oldali állapotot JSF és AJAX integrációja JSF 2.0

A JSF és az AJAX Kimenet generálása a kliens számára (HTML, WML, stb.)

A JSF barátsága a vizuális fejlesztőeszközökkel Komponens alapú > A rugalmas és bővíthető komponens modell, > A komponensek JavaBeanek (design time, runtime választás) A response gyártás a specifikáció szerint fel van készítve a fejlesztőeszközökre > A ResponseWriter osztály olyan, hogy a kimenet készítése közben mindig meg kell mondani, hogy melyik komponenshez tartozik az adott generált kód (HTML, WML, XML, stb.)

A NetBeans IDE 5.5 JSF támogatása Leíró XML-ek ismerete, kódkiegészítés, validáció > web.xml > faces-config.xml Komponens Tag library-k használatában való segítség, deployolás nélküli validáció Managed Bean-ek nyilvántartása - EL kifejezések kiegészítése

A NetBeans Visual Web Pack plugin Eredetileg Java Creator Studio néven futó termékből NetBeans plugin lett J2EE 5.0, JSF 1.2 támogatással Vizuális oldal szerkesztés rapid fejlesztés Komponens hierarchia vizuális megjelenítése Komponensek tulajdonságainak szerkesztése testreszabott property szerkesztőkkel Saját (szabványban leírt komponensektől jóval kifinomultabb) komponens könyvtár Bővíthető komponenskészlet

Összegzés Gyors és hatékony fejlesztési mechanizmus Szabványos, komponens alapú technológia minden alkalmazásszerver része J2EE 5.0 óta Rapid fejlesztőeszközbarát és már létezik ilyen: Netbeans Visual Web Pack plugin Extrém rugalmas: tetszőleges része testreszabható JSF + AJAX: egymásnak teremtettek Kérdés: Milyen meredek a JSF tanulási görbéje?

Kérdések/Demo