340 likes | 497 Vues
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.
E N D
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. • Kompilator Java do HTML+JavaScript. • Środowisko do debugowania i testowania. • Brak własnego środowiska programisycznego.
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.
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.
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
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?
Komponenty UI • Rodzaje komponentów: • Panele • Kontrolki HTML • Złożone i specjalizowane komponenty • Przykład użycia. • Tworzenie własnych komponentów.
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.
Komponenty HTML • Przyciski • Pola tekstowe • Pola wyboru • Listy
Komponenty specjalizowane • Tree • MenuBar • TabPanel • PopupPanel • Google Maps API • Google Search API • SVG
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.
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)
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.
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.
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.
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ą.
Porównanie z innymi rozwiązaniami. • ASP.NET • Ajax Web Extensions for ASP.NET (ATLAS) • PHP i podobne • Swing (!)
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.
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.
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.
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.
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ę).
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/