1 / 34

Google Web Toolkit

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.

dacia
Download Presentation

Google Web Toolkit

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


  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/

More Related