Wstęp do GWT

post_img

Google Web Toolkit (GWT) to framework dostarczony przez Google do budowania aplikacji opartych na języku Java z bogatym front-endem AJAXowym. GWT pozwala pisać aplikacje w Javie dostarczając zestaw bibliotek do tworzenia dialogów, przycisków, formularzy itp. Następnie kompiluje je i optymalizuje tworząc JavaScript, który powinien działać prawidłowo na wszystkich najpopularniejszych przeglądarkach. Kompilacja obejmuje statyczne sprawdzanie typów, wyrzucanie niepotrzebnych parametrów z metod, pól z klas, in-linowaniem metod – wszystko by maksymalnie przyśpieszyć działanie.

Instalacja  GWT jest nadzwyczaj prosta. Wystarczy pobrać zzipowaną wersję z http://code.google.com/intl/pl/webtoolkit/download.html i rozpakować w dowolne miejsce. GWT integruje się z eclipse 3.3 i 3.4 poprzez pluginy (instalacja opisana na http://code.google.com/intl/pl/eclipse/docs/download.html).

Po poprawnej instalacji wtyczki na pasku narzędziowym eclipse dostajemy trzy nowe ikony   gtwicons. Pierwsza z nich tworzy nam nowy projekt GWT, druga kompiluje go, trzecia wreszcie służy do deplyowania projektów Google App Engine.

Podczas pierwszego projektu musimy wskazać miejsce, w którym jest rozpakowane GWT. Domyślnie stworzenie nowego projektu generuje przykładową aplikację. Dodatkowo z menu kontekstowego Run As w projekcie możemy wybrać Web Application i automatycznie ona uruchomiona w dostarczonej z biblioteką przeglądarce, w tzw „hosted mode”

runaswebapp

webappbrowser

Główne zalety GWT:

  • edit – refresh – view – używając „hosted browser” do testowania aplikacji, zmiany w kodzie javy nie wymagają dodatkowej kompilacji czy restartu, wystarczy odświeżyć stronę i zmiany będą widoczne;
  • możliwość debugowania aplikacji za pomocą eclipsowego debugera;
  • wsparcie dla JSON, XML,  a także możliwość łatwego wywoływania procedur po stronie serwera (serializowanie i deserializowanie obiektów, zachowanie jak przy RMI);
  • wsparcie dla JavaScript Native Interface przez co możliwe jest samodzielne dodawanie kodu JavaScript do tworzonej aplikacji;
  • wsparcie dla przycisku „wstecz” dla przeglądarek, przez modyfikację historii przeglądanych stron;
  • współpraca z JUnit, JProfiler;
  • praca w 2 trybach – hosted mode (jw z eclipse, po wykonaniu ant hosted, itp bez całkowitej zamiany kodu na javascript) i web mode (zamiana kodu na javascript);
  • pisanie interfejsów użytkownika analogicznie jak w Swing;
  • możliwość rozbudowania o własne moduły lub inne opensourcowe pluginy (np. wspierające drag and drop w aplikacji);
  • szerokie wsparcie dla internacjonalizacji;
  • możliwość własnego ostylowania elementów za pomocą CSS.

GWT posiada kilkanaście gotowych elementów do budowy dynamicznych efektownych interfejsów, np:

  • panele (DecoratorPanel, VerticalPanel, HorizontalPanel, FlowPanel,  AbsolutePanel, DockPanel)
  • widgety (CheckBox, RadioButton, Button, CustomButton, FileUpload, DatePicker, Hyperlink)
  • listy i menu (ListBox, SelectBox, Tree, MenuBar)
  • inputy (TextBox, RichTextArea)
  • okna (DialogBox, DecoratedPopupPanel)
  • tabele (FlexTable, Grid)
  • animacje (Animation)

Możliwości frameworku można obejrzeć na następujących stronach

Dodatkowo istnieje biblioteka GWT-ext która dostarcza zdecydowanie więcej gotowych komponentów. Demo tej biblioteki można zobaczyć na http://www.gwt-ext.com/demo/

GWT docelowo jest zamieniane całkowicie na JavaScript, dlatego choć pisze się go w Javie, są pewne istotne ograniczenia w wykorzystaniu standardowych bibliotek:

  • JavaScript obsługuje tylko 64bitową wersję liczby zmienno przecinkowej, dlatego też wszystkie typy numeryczne, jak byte, short, int, są w trybie web zamieniane na double, a to z kolei pozwala na zwiększenie dozwolonego zakresu liczbowego; typ long jest emulowany na podstawie dwóch 32bitowych intów, co może spowodować spadek wydajności poprzez konieczność emulacji;
  • try, catch, finally działają poprawnie, jednak Throwable.getStackTrace() nie jest dostępne;
  • niektóre wyjątki nie występują w trybie web, np. NullPointerException, StackOverflowException czy OutOfMemoryException;  zamiast nich rzucany jest wyjątek JavaScriptException; takie zachowanie wynika z niemożności zmapowania odpowiedniego wyjątku JavaScriptowego na wyjątek Javy;
  • multithreading – interpretery JavaScript są jednowątkowe, a zatem, choć GWT akceptuje „synchronized” to tak naprawdę nie robi ono nic specjalnego; inne wsparcie wielowątkowości jak wait() notify() nie jest dostępne;
  • wykorzystywanie mechanizmu refleksji – ponieważ GWT nastawione jest na maksymalną optymalizację i szybkość działania dynamiczne ładowanie bibliotek nie jest dostępne; jednocześnie dostępna jest metoda getClass().getName();
  • strictfp nie jest dozwolone w GWT

Oto pakiety które zawierają klasy dostępne w aplikacjach GWT (w niektórych przypadkach tylko niektóre fragmenty pakietu) to

W ramach utrzymania pewnych funkcjonalności GWT udostępnia klasy

  • com.google.gwt.i18n.client.DateTimeFormat: obsługuje część funkcjonalności java.util.DateTimeFormat.
  • com.google.gwt.i18n.client.NumberFormat: obsługuje część funkcjonalności java.util.NumberFormat.
  • com.google.gwt.user.client.rpc.IsSerializable : interfejs spełniający rolę java.io.Serializable wykorzystywana przez GWT do wywoływania zdalnych procedur (RPC)
  • com.google.gwt.user.client.Timer : uproszczona klasa java.util.Timer, (z powodu jednowątkowości)

GWT wydaje się być ciekawą alternatywą dla standardowej budowy interfejsów za pomocą elementów HTMLowych. W wolnych chwilach warto poeksperymentować i zobaczyć, co Google może wnieść do tematu budowania aplikacji internetowych.

Bibliografia:

– http://code.google.com/intl/pl/webtoolkit/


Dodaj komentarz

Twój adres email nie zostanie opublikowany. Pola, których wypełnienie jest wymagane, są oznaczone symbolem *

2 komentarzy do “Wstęp do GWT