Google Web Toolkit. Piotr Findeisen

Podobne dokumenty
Google Web Toolkit Michał Węgorek ZPO 2009

Programowanie obiektowe

Anna Wrona, Janis Paraschidis, Igor Klimer. 6 kwietnia 2009

FLEX ( ) Przygotowanie środowiska developerskiego Hello world w MXML Hello world w ActionScript

Tworzenie aplikacji w języku Java

Kurs programowania. Wykład 1. Wojciech Macyna. 3 marca 2016

Programowanie obiektowe

Języki Programowania II Wykład 3. Java podstawy. Przypomnienie

Programowanie obiektowe

Java - wprowadzenie. Programowanie Obiektowe Mateusz Cicheński

Bezpieczeństwo frameworków WEBowych Java na przykładzie ataku CSRF

Aplikacje w środowisku Java

Aplikacje Internetowe. Najprostsza aplikacja. Komponenty Javy. Podstawy języka Java

Programowanie w Internecie. Java

JAVA. Java jest wszechstronnym językiem programowania, zorientowanym. apletów oraz samodzielnych aplikacji.

Wykład 2 Wybrane konstrukcje obiektowych języków programowania (1)

Google Web Toolkit. Powinieneś wiedzieć... Przydatna będzie podstawowa znajomość JAVA.

Wykład 7: Pakiety i Interfejsy

Podstawy języka Java. przygotował:

Wątki. Definiowanie wątków jako klas potomnych Thread. Nadpisanie metody run().

JAVA W SUPER EXPRESOWEJ PIGUŁCE

1. Co można powiedzieć o poniższym kodzie (zakładając, że zaimportowano wszystkie niezbędne klasy)?

Sposoby tworzenia projektu zawierającego aplet w środowisku NetBeans. Metody zabezpieczenia komputera użytkownika przed działaniem apletu.

Operatory. Składnia. Typy proste. Znaki specjalne

Wywoływanie metod zdalnych

1. Czynności przygotowujące aplikację działającą na platformie Java SE Biblioteka5 (należy ją pobrać z załącznika z p.1)

Elementy JEE. 1. Wprowadzenie. 2. Prerekwizyty. 3. Pierwszy servlet. obsługa parametrów żądań 4. JavaServer Pages.

Kurs programowania. Wykład 13. Wojciech Macyna. 14 czerwiec 2017

Wprowadzenie. Narzędzia i środowiska programistyczne. Laboratorium 1. Prowadzący: Kierunek: Semestr: Rok: Tomasz Gądek Informatyka Zimowy 2

Programowanie RAD Delphi

Java w Internecie - czy to ma sens? ;)

Programowanie obiektowe

Projektowanie aplikacji internetowych laboratorium

Wywoływanie metod zdalnych

Java Platform Micro Edition

Wykład dla studentów Informatyki Stosowanej UJ 2012/2013

Remote Method Invocation 17 listopada 2010

Interaktywne aplety obsługa zdarzeń, uruchamianie apletu przez przeglądarkę lub maszynę wirtualną Javy. Tworzenie łącz w apletach

Kompresja stron internetowych

Programowanie obiektowe

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Remote Method Invocation 17 listopada Dariusz Wawrzyniak (IIPP) 1

Podstawy Języka Java

Akademia ETI. Wprowadzenie do programowania w Javie PG Java User Group Przemysław Kulesza

Podejście obiektowe do budowy systemów rozproszonych

Programowanie w języku Java WYKŁAD

2. Składnia, środowisko i konwencje w Javie

Języki i metody programowania Java. Wykład 2 (część 2)

Programowanie Multimediów. Programowanie Multimediów JAVA. wprowadzenie do programowania (3/3) [1]

Zad.30. Czy można utworzyć klasę, która implementuje oba interfejsy?

Multimedia JAVA. Historia

Obiektowe programowanie rozproszone Java RMI. Krzysztof Banaś Systemy rozproszone 1

Programowanie obiektowe. Literatura: Autor: dr inŝ. Zofia Kruczkiewicz

Język JAVA podstawy. wykład 2, część 2. Jacek Rumiński. Politechnika Gdańska, Inżynieria Biomedyczna

Java Programowanie Obiektowe Ćwiczenie 1- wprowadzenie

Narzędzia i aplikacje Java EE. Usługi sieciowe Paweł Czarnul pczarnul@eti.pg.gda.pl

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Wykład 4_1. Interaktywne aplety obsługa zdarzeń, uruchamianie apletu przez przeglądarkę lub maszynę wirtualną Javy.

Metaprogramowanie w Ruby

Programowanie poprzez testy z wykorzystaniem JUnit

public - może być używana w kodzie poza klasą, jedna klasa ModyfikatorKlasy może być kombinacją wyrażeń:

Współbieżność w środowisku Java

Instrukcja tworzenia aplikacji EE na bazie aplikacji prezentowanej na zajęciach lab.4 z PIO umożliwiająca przez sieć dostęp wielu użytkownikom.

JavaScript funkcyjność

Kurs programowania. Wykład 6. Wojciech Macyna. 7 kwietnia 2016

Zaawansowane aplikacje internetowe - laboratorium Architektura CORBA.

Programowanie, algorytmy i struktury danych

Java: otwórz okienko. Programowanie w językach wysokiego poziomu. mgr inż. Anna Wawszczak

Remote Method Invocation 17 listopada rozproszonych. Dariusz Wawrzyniak (IIPP) 1

Java - tablice, konstruktory, dziedziczenie i hermetyzacja

Java jako język programowania

Programowanie obiektowe

Aplikacje RMI

Komponenty sterowane komunikatami

Java niezbędnik programisty spotkanie nr 3. Modyfikatory, jednostki kompilacji, tworzenie/inicjalizacja, odśmiecanie/ finalizacja...

JAX-RS czyli REST w Javie. Adam Kędziora

Tworzenie i wykorzystanie usług

OpenLaszlo. OpenLaszlo

Aplikacje RMI Lab4

Programowanie kontraktowe w Javie

Zaawansowane aplikacje WWW - laboratorium

Aplikacja webowa w Javie szybkie programowanie biznesowych aplikacji Spring Boot + Vaadin

Wykład 1: Wprowadzenie do technologii Java

Obszar statyczny dane dostępne w dowolnym momencie podczas pracy programu (wprowadzone słowem kluczowym static),

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

Na przykładzie języków Java, C# i odrobiny C++ Dariusz Brzeziński. Politechnika Poznańska, Instytut Informatyki

Programowanie w języku Java - Wyjątki, obsługa wyjątków, generowanie wyjątków

Wprowadzenie do języka Java

Programowanie obiektowe zastosowanie języka Java SE

Podejście obiektowe do budowy systemów rozproszonych

Java RMI. Dariusz Wawrzyniak 1. Podejście obiektowe do budowy systemów rozproszonych. obiekt. interfejs. kliencka. sieć

1 Atrybuty i metody klasowe

Badania poziomu bezpieczeństwa portalu dostępowego do infrastruktury projektu PL-Grid

Zaawansowane aplikacje internetowe

Aplikacje internetowe i rozproszone - laboratorium

Przetwarzanie danych w chmurze

Programowanie w Javie Lista nr 1. Wybieramy kategorię Java, a wśród Projektów Java Application i [NEXT]

WSNHiD, Programowanie 2, Lab. 3. Trwałość danych

Analiza i projektowanie aplikacji Java

Platformy Programistyczne Podstawy języka Java

Transkrypt:

Google Web Toolkit Piotr Findeisen findepi@students.mimuw.edu.pl

Czym jest GWT kompilator Javy do Javascriptu biblioteki Java/Javascript emulacja części java.lang i java.util webowe okienka narzędzia do tworzenia projektów GWT Hosted Web Browser

GWT: możliwości kompilatora rozumie Java 2 Standard Edition 1.4.2 i wcześniejsze typy proste: byte, char, short, int, long, float, double, Object, String, T[] Java long Javascript double try, catch, finally także wyjątki zdefiniowane przez użytkownika bez getstacktrace() także poprzez Java Javascript RPC

Czego kompilator nie umie tak nie można (dodane w J2SE 1.5): for (String c : new String[] {"abc", "def")... ArrayList<Integer> a; Java assert Javscript no-op brak finalize() brak synchronized, Object.wait(); notify() brak strictfp Java serialization

Więcej różnic... wyrażenia regularne podobne, ale nie identyczne używać ostrożnie! brak ładowania klas na życzenie cała logika użytkownika trafia do jednego pliku tylko częściowa implementacja java.lang i java.util więcej o zgodności: http://code.google.com/webtoolkit/documentation/jre.html

IDE dla GWT GWT nie jest związane z konkretnym IDE IntelliJ IDEA, Eclipse, NetBeans, JCreator, JBuilder, vim... Eclispe żaden plugin nie jest potrzebny GWT Hosted Mode to com.google.gwt.dev.gwtshell.main() kiedyś specjalny plugin: Googlipse darmowe narzędzia od Cypal Solutions http://www.cypal.in/studiodocs

GWT w Eclipse wygeneruj projekt Eclipse: projectcreator -eclipse MyProject dodaj do niego GWT: applicationcreator -eclipse MyProject com.mycompany.client.myapplication... i uruchom./myapplication-shell lub zaimportuj projekt do Eclipse Run lub Debug (już zdefiniowane)

GWT Hosted Mode

Debugowanie w Eclipse

Hello World: html Najprostsza strona dołączająca kod GWT src/edu/taw/public/hello.html <html> <head> <script language='javascript' src='edu.taw.hello.nocache.js'> </script> </head> <body></body> </html>

Hello World: moduł gwt.xml src/edu/taw/hello.gwt.xml (istotny do wdrożenia) <module> <!-- Inherit the core Web Toolkit stuff.--> <inherits name='com.google.gwt.user.user'/> <!-- Specify the app entry point class. --> <entry-point class='edu.taw.client.hello'/> </module>

Hello World: Java src/edu/taw/client/hello.java package edu.taw.client; import com.google.gwt.core.client.entrypoint; import com.google.gwt.user.client.ui.*; public class Hello implements EntryPoint { public void onmoduleload() { Label l = new Label("Strona dynamiczna."); RootPanel.get().add(l);

Hello World: efekt końcowy <html><head> <script src="edu.taw.hello.nocache.js" language="javascript"> </script> <script> edu_taw_hello.oninjectiondone('edu.taw.hello') </script> </head> <body> <iframe src="ec79bab10271672dbc9d5bc7e9a11901.cache.html" id="edu.taw.hello" style="border: medium none ; position: absolute; width: 0pt; height: 0pt;"></iframe> <div class="gwt-label">strona dynamiczna.</div> </body></html> http://students.mimuw.edu.pl/~findepi/gwt/hello/hello.html

JavaScript: nie próbuj tego samemu c=k.getelementbyid('edu.taw.hello');var b=c.contentwind function edu_taw_hello(){var l=window,k=document,t=l.ex function y(){if(ab&&w){var c=k.getelementbyid('edu.taw. function s(){var j,h=' gwt_marker_edu.taw.hello',i;k.w ;if(j&&j.src){p=d(j.src);if(p==''){var c=k.getelements function D(){var f=document.getelementsbytagname('meta' function n(a,b){return b in db[a]; function m(a){var b=z[a];return b==null?null:b; function cb(d,e){var a=o;for(var b=0,c=d.length-1;b<c;+ function r(d){var e=f[d](),b=db[d];if(e in b){return e; F['user.agent']=function(){var d=navigator.useragent.to var u;function x(){if(!u){u=true;var a=k.createelement( if(k.addeventlistener){k.addeventlistener('domcontentlo edu_taw_hello. gwt_inithandlers=function(i,e,j){var d= http://students.mimuw.edu.pl/~pf219427/gwt/hello/edu.taw.hello.nocache.js http://students.mimuw.edu.pl/~pf219427/gwt/hello/ec79bab10271672dbc9d5bc7e9a11901.cache.html

GWT: dalsze możliwości wiele żywych kawałków na jednej stronie brak zależności w kodzie Java czy HTML <module> <!-- Inherit the core Web Toolkit stuff.--> <inherits name='com.google.gwt.user.user'/> <!-- Specify the app entry point class. --> <entry-point class='edu.taw.client.hello'/> <entry-point class='edu.taw.client.byebye'/> </module>

GWT a istniejące strony kod GWT może modyfikować tylko wybrany fagment strony (lub nic) package edu.taw.client; import com.google.gwt.core.client.entrypoint; import com.google.gwt.user.client.ui.*; public class Hello implements EntryPoint { public void onmoduleload() { Label l = new Label("Strona dynamiczna."); RootPanel.get("writehere").add(l);

Historia w przeglądarce DHTML brak historii wystarczy dodać do hello.html kod: <iframe src="javascript:''" id=" gwt_historyframe" style="width:0;height:0;border:0"></iframe> historię kontroluje com.google.gwt.user.client.history historię zmienia com.google.gwt.user.client.ui.hyperlink (link zmieniający stan aplikacji)

JavaScript Native Interface JSNI to asembler dla Javy umożliwia zaimplementowanie pojedynczych metod z Javy wprost w JavaScripcie package edu.taw.client; import com.google.gwt.core.client.entrypoint; public class Hello implements EntryPoint { public native void onmoduleload() /*-{ $doc.body.innerhtml = "Strona dynamiczna."; -*/; kontekst wykonania

ImageBundle trywialne w obsłudze umożliwia sklejanie obrazków przyspiesza transfer np. obrazki z googla: http://code.google.com/webtoolkit/documentation/com.google.gwt.doc.developerguide.userinterface.html#imagebundles

ImageBundle: przykład public interface MyImageBundle extends ImageBundle { /** 'new_file_icon.png', 'new_file_icon.gif', or 'new_file_icon.png' */ public AbstractImagePrototype new_file_icon(); /** @gwt.resource open_file_icon.gif */ public AbstractImagePrototype openfileicon(); public class Hello implements EntryPoint { public native void onmoduleload() { MyImageBundle ib = (MyImageBundle) GWT.create(MyImageBundle.class); RootPanel.get().add( ib.new_file_icon().createimage());

internationalization Constants type-safe, definiowane w plikach, statyczne Messages jak Constants, ale całe wyrażenia Dictionary zupełnie dynamiczne nie tylko napisy

internationalization Localizable public interface Person extends Localizable { String name(); public class Person_en implements Person { public String name() { return "John"; public class Person_pl implements Person { public String name() { return "Jaś"; inlineowane public void localperson() { Person p = (Person) GWT.create(Person.class);

and more... strona z tą prezentacją: http://students.mimuw.edu.pl/~findepi/gwt/ strona GWT przykłady dokumentacja dostępnych klas bardzo ciekawe prezentacje