Az Apache Wicket keretrendszer



Hasonló dokumentumok
JAVA webes alkalmazások

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

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

Web-fejlesztés NGM_IN002_1

RIA Rich Internet Application

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

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

Web-fejlesztés NGM_IN002_1

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

Bevezető. Servlet alapgondolatok

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 Server Pages - JSP. Web Technológiák. Java Server Pages - JSP. JSP lapok életciklusa

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

Ajax és Echo 2. Bokor Attila

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

Webes alkalmazások fejlesztése

JEE tutorial. Zsíros Levente, 2012

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

Java I. A Java programozási nyelv

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

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

A Java EE 5 plattform

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

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

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

PHP II. WEB technológiák. Tóth Zsolt. Miskolci Egyetem. Tóth Zsolt (Miskolci Egyetem) PHP II / 19

Java Servlet technológia

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

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

JAVA PROGRAMOZÁS 2.ELŐADÁS

strings.xml res/values/strings.xml fájlban hozzuk létre a hiányzó string adatforrásainkat A jelenlegi helyett ez álljon: <resources> <string

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

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

MVC. Model View Controller

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

Struts2 keretrendszer

Osztályok. 4. gyakorlat

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

Model View Controller alapú alkalmazásfejlesztés

Java programozási nyelv 5. rész Osztályok III.

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

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

Enterprise JavaBeans 1.4 platform (EJB 2.0)

AJAX Framework építés. Nagy Attila Gábor Wildom Kft.

Java Programozás 4. Gy: Java GUI. Tipper, MVC kalkulátor

Az osztályok csomagokba vannak rendezve, minden csomag tetszőleges. Könyvtárhierarhiát fed: Pl.: java/util/scanner.java

Stateless Session Bean

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

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

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.

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

JavaServer Pages (JSP) (folytatás)

Java Programozás 11. Ea: MVC modell

Segédanyag: Java alkalmazások gyakorlat

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

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

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

Programozás II gyakorlat. 7. Példák a polimorfizmus alkalmazásaira

Web programoz as

Java programozási nyelv 4. rész Osztályok II.

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?

Java VI. Egy kis kitérő: az UML. Osztály diagram. Általános Informatikai Tanszék Utolsó módosítás:

Modern unit és integrációs tesztelés

Java Web technológiák

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

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

Java technológiák - ANTAL Margit. komponensek. A HTTP protokoll. Webkonténerek és szervletek. Egyszerű HTTP. ANTAL Margit.

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

OOP #14 (referencia-elv)

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)

Programozási nyelvek Java

Segédanyag: Java alkalmazások gyakorlat

Objektumorientált programozás

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

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 és módszerek Java Thread-ek

A gyakorlat során az alábbi ábrán látható négy entitáshoz kapcsolódó adatbevitelt fogjuk megoldani.

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

Reaktív programozás szerver oldalon

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

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

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

Számítástechnika II. BMEKOKAA Előadás. Dr. Bécsi Tamás

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?

Bevezetés a Seam keretrendszer használatába

Java I. A Java programozási nyelv

Java és web programozás

Programozás III KIINDULÁS. Különböző sportoló típusok vannak: futó, magasugró, focista, akik teljesítményét más-más módon határozzuk meg.

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

C++ programozási nyelv

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

Java és web programozás

Miután létrehoztuk, szeretnénk neki beszédesebb nevet adni. A név változtatásához a következőt kell tenni:

Objektumorientált programozás C# nyelven

Java és web programozás

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

Bevezetés a programozásba Előadás: Objektumszintű és osztályszintű elemek, hibakezelés

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

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

Átírás:

Az Apache Wicket keretrendszer JUM 2007. július 11. Cserép János cserepj@metaprime.hu

Tartalom Bemutatkozás Java Web keretrendszerek Wicket Bevezetés, alapkoncepciók Application, Session, Component, és társaik Model típusok AJAX Unit Testing Kérdések, válaszok

Bemutatkozás 9 éve foglalkozom webprogramozással 2002 óta Java-val és EE-vel 2005-ben találtam rá a Wicket-re 3 + 1 Wicket projekt az elmúlt másfél évben Vezető fejlesztőként: Egy 15 képernyőből álló Struts alkalmazás komplett újraírása 5 hét alatt 2 a projekt közben betanuló emberrel Tudásátadás wicket-tel ismerkedő fejlesztőknek Pet project : Web alapú CMS fejlesztése Java-ban, Wicket-tel, JPA-val: http://www.szeretgom.hu

Java Web keretrendszerek Servlet Servlet + Template (velocity, webmacro) JSP Model 1 Model 2 (MVC) Kérés alapú Struts 1, Webworks, Struts 2, shale Komponens alapú keretrendszerek JSF, Tapestry, RIFE, Echo2, Wicket

Komponens alapú keretrendszer Szerver Kliens Kérés (e s e m é n y e k ) UI Válasz (m a rk u p )

Wicket Nyílt forrású (Apache 2 licence) 2004-ben indult a fejlesztése (1.0) Június óta teljes jogú Apache projekt (1.3) Komponens alapú keretrendszer A Markup és a kód teljes szétválasztása Nincs üzleti logika a markupban. Valid X(HT)ML. Beépített AJAX támogatás, amihez javascript tudás nem szükséges Nincsen semmilyen XML konfigurációs állomány:) Csupán a web.xml, egyetlen Servlet (1.2-ig) vagy Filter (1.3- tól) definiálása

Wicket célok Objektumorientált fejlesztés a web rétegben Struktúra vs. műveletek Komponensek könnyű újrahasznosíthatósága Feladatok szétválasztása HTML a prezentáció Java az állapot, modell, felületi logika Produktivitás, karbantarthatóság (tesztelhetőség)

Állapotot tárolni? A Wicket állapotot tároló (stateful) komponenseket definiál REST vs Állapottárolás Állapotmentes szolgáltatási réteg: vissza a procedurális programozáshoz Lassabb implementáció CPU és sávszélesség vs memória Tényleg minden oldal csak egyvalamit csinál?

Állapottal rendelkező komponensek Minden renderelt oldal mögött a szerveren egy komponens fa él a felhasználó session-jében A komponensek verziózottak, korábbi komponensfák elérhetőek (1.3: nem feltétlenül a memóriából) Elegáns programozási modell Wicket-ben szinte minden komponens A markupban wicket:id attribútum jelöli a helyüket Java kódban id property a konstruktorban HTML <span wicket:id= name ></span> Java add(new Label( name ));

Újrahasznosítás A komponensek bepakolhatók egy.jar-ba A szükséges resource-ok szintén HTML, CSS, képek, javascript.jar a classpath-ba A gyári komponenseken túl több tucat alprojekt wicket-gmap wicket-dojo wicket-scriptacolus Wicket-ben alapvetően nem oldalakat fejlesztünk Hanem komponenseket...

Wicket alaptulajdonságok Markup inheritance Ahol az esemény kiváltódik ott kezeljük le add(new Button("print", new StringResourceModel("activityreport.print", this, null)) { @Override public void onsubmit() {... } Beépített lokalizációs lehetőségek.properties és.html külön-külön lokalizálható <wicket:message key= person.name > Annotációkkal komponens szinten (és nem feltétlenül URL-enként) leírhatóak az authorizációs igények, pluggable az authorizáció implementáció

Egy Wicket alkalmazás package wicket.examples.helloworld; import wicket.protocol.http.webapplication; public class HelloWorldApplication extends WebApplication { public HelloWorldApplication() { } public Class gethomepage() { return HelloWorld.class; } }

HelloWorld.java package wicket.examples.helloworld; import wicket.markup.html.webpage; import wicket.markup.html.basic.label; public class HelloWorld extends WebPage { public HelloWorld() { add(new Label("message", "Hello World!")); } }

HelloWorld.html <html> <body> <span wicket:id="message">message goes here</span> </body> </html> Ugyanabban a könyvtárban (package-ben) mint a HelloWorld.java Ez általánosságban is igaz minden markuppal rendelkező komponensre (Page, Panel, Border) Ha egy komponenshez nincs.html, akkor a superclass-ét fogja használni

Application (WebApplication) 1 db példányosodik belőle, nem thread safe Application.get() Érdekesebb metódusok: init() getsessionfactory(), newsession() (WebApplication) gethomepage() get****settings() mountbookmarkablepage() mountsharedresource()

Session (WebSession) 1 felhasználó, 1 Session objektum, thread safe Saját céljainkra általánan létrehozunk egy subclass-t a WebSession-ből, és erősen típusosan használjuk a benne tárolt objektumokat (nincs getattributes()/setattributes()) Page-et érintő kérésfeldolgozás a Session-re synchronized() blokkban fut Érdekes metódusok: dirty() error(), warn() getlocale(), setlocale()

Component Érdekes metódusok getparent() getmodel()/setmodel()/initmodel() isvisible()/setvisible() getpage(), getsession(), getapplication() findpage(), findparent() getlocale(), getlocalizer() getstyle() add(ibehaviour m) debug(string), info(string), warn(string), error(string) és fatal(string) setresponsepage()

MarkupContainer extends Component Gyermek komponenseket tartalmazó komponensek őse Metódusok: getchildren() add(component c), replace(component c), remove(component c) visitchildren(component.ivisitor v)

Page extends MarkupContainer WebPage-ből származtatunk Konstruktor: () ha public, akkor bookmarkolható a Page (PageParameters param) GET paraméterek átvétele Page-ek állnak a felépített komponensobjektum hierarchia tetején A Wicket framework dolga egy bejövő URL-hez a megfelelő Page-et, azon belül a megfelelő akciót, eseménykezelőt meghívni és a kérést lekezelni

WebMarkupContainerWithAssociatedMarkup Saját.html template fájlal rendelkező komponensek Border <wicket:border> First <wicket:body/> Last </wicket:border> Panel <wicket:panel> <span wicket:id="mylabel">label</span> </wicket:panel>

FormComponent Leszármazottai a megszokott HTML form komponensek, a nevek AWT-ből ismerősek lehetnek Érdekes metódusok: setrequired()/isrequired() add(ivalidator v) Button: getlabel()/setlabel() onsubmit()

Wicket modellek A komponensek az adatokat tartalmazó POJO-kat model adaptereken keresztül érik el add(new Label( name, new Model( Gipsz Jakab )); add(new Label( name, new PropertyModel(personBean, name ); setmodel(new CompoundPropertyModel(personBean); add(new Label( name )); setmodel(new CompoundPropertyModel(new DetachablePersonModel(personBean))); add(new Label( name )); Label( name, model) PropertyModel(personBean, name ) <<Person>> +name: String

Modellek Detachable modellek Csak egy azonosítót tárol, nem magát a teljes objektumot On demand be tudja tölteni az objektumot Amikor már nem kell, eldobja a referenciát Compound modellek Szülő komponensen haszálandó Modell nélküli komponenshez az id alapján keres hozzá objektumot

Wicket AJAX először egy példa Normál link final Label label =...; add(new Link( link ) { public void onclick() { label.setvisible(! label.isvisible()); } }); HTML: <a href= # wicket:id= link > Toggle </a> Ajax link final Label label =...; add(new AjaxLink( link ) { public void onclick(ajaxrequesttarget t) { } }); label.setvisible(! label.isvisible()); t.addcomponent(label);

Wicket AJAX HTML-ben semmi változás AJAX-szal frissítendő komponenseken: setoutputmarkupid(true); Normál komponensek AJAX-osított komponensek Link AjaxLink, Button AjaxButton AJAX Behaviour-ök, amiket normál komponensekhez lehet add()-olni: userspresentpanel.add(new AjaxSelfUpdatingTimerBehavior(Duration.ONE_MINUTE); DropDownChoice choice=new DropDownChoice(...); choice.add(new AjaxEventBehavior("onchange") { protected void onevent(ajaxrequesttarget target) { target.addcomponent(componenttorefresh); } }

WicketTester Mock javax.servlet osztályok segítségével container nélkül teszi lehetővé a komponensek unit tesztelését Érdemes a leválasztott Service/Dao réteget Mock osztályokkal emulálni a tesztekhez private WicketTester tester; public void setup() { tester = new WicketTester(); } public void testrendermypage() { //start and render the test page tester.startpage(mypage.class); //assert rendered page class tester.assertrenderedpage(mypage.class); //assert rendered label component tester.assertlabel("mymessage", "Hello!"); }

Resource Az alkalmazáshoz tartozó statikus vagy dinamikus erőforrások kezelésére Pl: a.jar-ba csomagolt.css vagy.jpg file, vagy egy adatbázisból visszaadott blob, esetleg egy RSS feed Egy resource Mount-olható egy URL-re Kiszolgálás közben nem szinkronizál a Session-re mini servlet, 1 példány él belőle az adott alkalmazásban

Összefoglalva A Wicket egy sokoldalú, komponens alapú open source keretrendszer 100% Java, 100% OO jobb programozóvá tesz Tipikusan az első alkalmazását fél év után feleannyi LoC-ból újra tudja írni az ember Jelenleg hivatalosan kissé aluldokumentált 1 db angol nyelvű könyv az 1.2-ről, 1.3-ról készül egy új De egész jók az example-ök és a javadoc, a forrás is olvasmányos További információk: http://wicket.sourceforge.net http://incubator.apache.org/wicket - remélhetőleg hamarosan http://wicket.apache.org

Kérdések, válaszok?