Google Web Toolkit

34
1 Google Web Toolkit Łukasz Kosson

description

Google Web Toolkit. Łukasz Kosson. Plan prezentacji. Czym jest GWT? Omówienie systemu: Kompilator Biblioteka klas Komponenty UI RPC. Porównanie z innymi rozwiązaniami. Subiektywne wrażenia. Czym jest GWT?. Zestaw bibliotek i narzędzi do tworzenia aplikacji webowych. - PowerPoint PPT Presentation

Transcript of Google Web Toolkit

1

Google Web Toolkit

Łukasz Kosson

2

Plan prezentacji

Czym jest GWT? Omówienie systemu:

Kompilator Biblioteka klas Komponenty UI

RPC. Porównanie z innymi rozwiązaniami. Subiektywne wrażenia.

3

Czym jest GWT?

Zestaw bibliotek i narzędzi do tworzenia aplikacji webowych. Kompilator Java do HTML+JavaScript. Środowisko do debugowania i testowania. Brak własnego środowiska programisycznego.

4

Kompilator GWTCompiler

Przekształca źródło programu w Javie na JavaScript. Umożliwia pisanie lekkich aplikacji webowych w całości w Javie. Mamy statyczne typowanie więcej błędów wykrytych w czasie

kompilacji. Niezależność od docelowej „platformy” – otrzymany kod rozpoznaje

przeglądarkę i korzysta charakterystycznych dla niej kruczków. Można pisać w obecnie istniejących, dobrze rozwiniętych IDE. Własna implementacja dziedziczenia i wołania metod wirtualnych.

5

Tryby pracy

Tryb „hosted” Aplikacja jest kompilowana do bajtkodu i uruchamiana na JVM wewnątrz odpowiedniej

przeglądarki. Umożliwia debugowanie z poziomu istniejących środowisk IDE (np. Eclipse, NetBeans).

Tryb „web” Kompilacja do HTML i JavaScript. Aplikacja gotowa do wystawienia na serwerze webowym lub do bezpośredniego

uruchomienia. Strony gotowe do wyświetlenia w dowolnej przeglądarce. Praktycznie brak możliwości debugowania.

6

Przykład generowanego kodu – plik źródłowy

7

Przykład generowanego kodu – plik wynikowy (1)

8

Przykład generowanego kodu – plik wynikowy (2)

9

Przykład generowanego kodu – plik wynikowy (3)

10

Biblioteka klas – wybrane typy z JRE

java.lang: String, Integer, Float, Math, StringBuffer i inne podstawowe typy. Throwable, Exception, Error oraz niektóre wyjątki (np. NPE, IOOBE,

IAE, NFE) java.util:

Kolekcje – m.in. ArrayList, HashTable, Stack, Array, Vector, Set Date Wyjątki

java.io: PrintStream, OutputStream

11

Biblioteka klas

Ograniczenia i różnice: Brak refleksji. Brak wątków. Problemy z dokładnością FP. System.out, System.err działa tylko w trybie „hosted”. Brak śladu stosu w Throwable. Parę innych, mniej znaczących (np. parametry Vectora). Wydajność (Character.isDigit)

Za mało czy w sam raz?

12

Komponenty UI

Rodzaje komponentów: Panele Kontrolki HTML Złożone i specjalizowane komponenty

Przykład użycia. Tworzenie własnych komponentów.

13

Komponenty: panele

Rodzaje: FlowPanel VerticalPanel, HorizontalPanel DockPanel PopupPanel

Umożliwiają rozmieszczenie kontrolek na stronie. Podobieństwa i różnice w porównaniu do AWT/Swing:

Nazewnictwo i zachowanie. Sposób obsługi. Brak LayoutManagerów.

14

Komponenty – panele

15

Komponenty HTML

Przyciski Pola tekstowe Pola wyboru Listy

16

Komponenty specjalizowane

Tree MenuBar TabPanel PopupPanel Google Maps API Google Search API SVG

17

Komponenty UI – sposób użycia

18

Własne kontrolki

Dziedziczymy z Composite. W konstruktorze tworzymy naszą kontrolkę z innych klocków i/lub

HTMLa. Implementujemy wybrane metody:

OnClick,OnMouseEnter, OnMouseLeave, OnMouseDown, ... OnKeyPressed, OnKeyTyped, ... OnFocus, OnFocusLost OnLoad, OnError

I już można korzystać w nowej kontrolki.

19

Obsługa zdarzeń

Brak znanych ze Swinga modeli. Ale są za to listenery:

ClickListener ChangeListener TreeListener HistoryListener

Obsługa zdarzeń odbywa się po stronie klienckiej. Ale oczywiście można wywoływać zdalne metody (o RPC będzie

później)

20

JSNI – JavaScript Native Interface

Co z wydajnością? Integracja z istniejącymi rozwiązaniami. Zgodność z obecną składnią. Nie tracimy dostępu do obiektów Java. Nadal można sensownie debugować (póki co tylko pod Windows). Brak utraty kontroli typów.

21

JSNI – przykład

22

RPC – wstęp

Sposoby komunikacji z serwerem: Własny mechanizm XMLHttpRequest JavaScript Object Notation (JSON)

Tworzenie serwera: Zaprojektowanie interfejsu w wersji synchronicznej i asynchronicznej. Implementacja interfejsu synchronicznego w klasie dziedziczącej z RemoteServiceServlet.

Modyfikacja konfiguracji na potrzeby debugowania.

23

RPC – przykład, interfejsy

24

RPC – przykład, serwer

25

RPC – przykład, klient

26

RPC – Serializacja

Parametry i wyniki wszystkich metod muszą być serializowalnego typu.

Typy domyślnie serializowalne: Typy podstawowe: char, byte, int itd. Opakowania na typy podstawowe: Character, Byte, String, Integer itd. Tablice typu serializowalnego.

27

RPC – własna serializacja

Klasa jest serializowalna gdy: Bezpośrednio lub pośrednio implementuje ten interfejs. Wszystkie* jej pola są serializowalne.

* - prawie wszystkie – pola final i transient nie muszą.

28

Porównanie z innymi rozwiązaniami.

ASP.NET Ajax Web Extensions for ASP.NET (ATLAS) PHP i podobne Swing (!)

29

Porównanie: ASP.NET

Wygląd ekranu konstruowany w IDE, jako strona HTML/ASP.NET. Bardzo podobny mechanizm obsługi zdarzeń. Wszelkie operacje są wykonywane po stronie serwera. Każde zdarzenie to ponowne odesłanie formularza. ASP.NET oferuje większą liczbę gotowych komponentów.

30

Porównanie: Atlas

Właściwie to samo co w ASP.NET, ale: Zdarzenia są obsługiwane asynchronicznie. Więcej przetwarzania dzieje się po stronie klienta. Dodatkową

funkcjonalność musimy sami oprogramować w JavaScript. Obsługa zdarzeń i generowanie HTML nadal odbywa się po stronie

serwera. Wszystkie komponenty z ASP.NET działają asynchronicznie. Atlas: Dużo bogatsza kolekcja komponentów client-side. GWT: Znacznie trudniejsze tworzenie własnych kontrolek. W Atlasie AJAX jest podstawowym mechanizmem; w GWT –

dodatkiem.

31

Porównanie: PHP i spółka

Zupełnie inna filozofia – GWT jest nastawiony na tworzenie aplikacji a nie stron.

Musimy oprogramować wiele rzeczy, które w GWT byśmy mieli za darmo (m.in. zdarzenia)

Można napisać całkiem złożoną aplikację w GWT ani razu nie dotykając się do HTMLa.

32

Porównanie: AWT/Swing/SWT

Dwa bardzo zbliżone rozwiązania, mimo że służą do zupełnie innych celów.

GWT wymusza bardziej wyraźny podział aplikacji na warstwy.

33

Inne podobne kompilatory

GWTCompiler nie jest nowym pomysłem. Istnieją podobne kompilatory dla innych języków: C# (Script#, jsc),

Lisp (ParenScript), Smalltalk (ST2JS), Python (pyjamas). GWT jako jeden z nielicznych jest rozwijany (i to przez więcej niż

jedną osobę).

34

Materiały

Agile Ajax

http://blogs.pathf.com/agileajax/ GWT Developer Guide

http://code.google.com/webtoolkit/documentation/ GWT Basics

www.javapassion.com/ajax/GWT_speakernoted.pdf GWT In Action

http://www.manning.com/hanson/