sprawozdanie

Transkrypt

sprawozdanie
Wprowadzenie do technologii GWT
Autor: Marcin Kopański
Data: 28-06-2010
Technologia GWT (skrót ang. Google Web Toolkit) jest produktem
giganta w dziedzinie technologii internetowych (stąd nazwa tej technologii).
Oferuje ona programistom kompletny zestaw narzędzi (wraz z wtyczkami do
Eclipse i NetBeans) do tworzenia bogatych aplikacji internetowych,
popularnie zwanych RIA (skrót ang. Rich Internet Application). Dzięki temu
programiści Javy SE/EE nie muszą już uczyć się dodatkowych technologii
wykorzystywanych w aplikacjach internetowych tj.: JavaScript, XML, HTML,
ani także korzystać z hybryd takich jak JSP, JSF (używanych w ramach
JavaEE).
Całość została pomyślana tak by ułatwić jak najbardziej przejście z
programowania aplikacji okienkowych do tworzenia aplikacji internetowych
doświadczonym programistom języka Java. Dzięki temu budowa interfejsu
naszej witryny nie różni się praktycznie niczym od tworzenia interfejsu
użytkownika aplikacji okienkowych w Swingu czy AWT.
Programista używa języka Java do pisania całej swojej aplikacji
korzystając z dostarczonych przez firmę Google bibliotek. Gotowa już
aplikacja umieszczana jest na serwerze (np. Tomcat) który to w trakcie
pierwszego żądania automatycznie przetłumaczy klasy Java do JavaScriptu (i
HTML) i w takiej postaci wyśle ją do przeglądarki użytkownika.
Gdy zacząłem się zastanawiać nad złożonością całego procesu
konwersji aplikacji z GWT (Java) do JavaScript + HTML, to doszedłem do
wniosku, że projektanci zmuszeni byli do utworzenia nowej biblioteki
kontrolek GUI w celu ograniczenia funkcjonalności natywnych bibliotek
języka J2SE i otrzymać kod który będzie dostosowany do automatycznego
tłumaczenia. Starano się jednak zachować jak najwięcej podobieństw w
warstwie użytkowania klas, ale cała ich funkcjonalność wewnętrzna została
przebudowana. Stąd mamy tutaj podobne panele, zarządzanie
rozmieszczeniem elementów w ramach panelu (LayoutManager), a nawet
podobne metody określania parametrów okien.
Obsługa zdarzeń także jest podobna do tej w Swing/AWT
(przynajmniej w trakcie pisania aplikacji). Wymaga to utworzenia obiektu
obsługującego zdarzenia, przeciążenia odpowiednich metod (np.
wywoływanych w trakcie kliknięcia myszą), dodania do nich kodu
1
obsługującego dane zdarzenie i dodanie takiego obiektu do np. przycisku
który ma taką funkcjonalność wywoływać.
Komunikacja pomiędzy serwerem a klientem w przypadku typowej
aplikacji GWT odbywa się poprzez mechanizm RPC (skrót ang. Remote
Precedure Call). Mechanizm ten polega na wywoływaniu z poziomu interfejsu
użytkownika funkcjonalności znajdujących się na serwerze. Sam HTML
posiada ograniczone sposoby komunikacji klienta z serwerem oparty na
żądaniach umożliwiający przesyłanie do serwera tylko prosty tekst. RPC
poszerza znacznie te możliwości gdyż możliwa przesyłane pomiędzy klientem
całych obiektów Java w tym także kolekcji obiektów.
Dodatkowo w celu wprowadzenia nowej technologii budowania aplikacji
internetowych do już istniejących aplikacji, możliwe jest wykorzystywanie
standardowych sposobów przesyłania danych takich jak JSON czy XML. Nic
nie stoi na przeszkodzie by aplikacja kliencka (napisana w GWT)
komunikowała się z warstwą serwerową napisaną w innych językach i
odwrotnie.
Struktura projektu jest bardzo przejrzysta. Podzielona została na dwie
gałęzie podstawowe: com.sample.client (pakiet zawierający kody warstwy
klienta), com.sample.server (pakiet zawierający kody warstwy serwerowej)
oraz opcjonalnie dodatkowe pakiety, które mogą być współdzielone pomiędzy
tymi dwoma warstwami.
Z własnych doświadczeń wiem ile problemów przysparza różna
interpretacja HTML przez różne przeglądarki. Jest wiele jest niuansów z tym
związanych, które potrafią zepsuć całkowicie wygląd strony, który ładnie
wygląda w jednej a całkowicie nieprzejrzyście w drugiej.
Tu GWT także ma dla programistów niespodziankę. Załóżmy, że
używamy IE i łączymy się z naszą nowo wdrożoną aplikacją. Jeśli jest to
pierwsze połączenie z przeglądarki IE z serwerem, GWT przygotuje całą
aplikację mając na uwadze sposób prezentacji HTML w danej przeglądarce.
Jeśli inne żądanie przyjdzie z innej przeglądarki, np. Opery, GWT przygotuje
nową wersję aplikacji właśnie dla niej. Także po kilku takich połączeniach na
serwerze mamy kilka wersji kodu dostosowanego do różnych przeglądarek
utworzonych automatycznie. Chociaż niewielu programistów ufa takim
automatom to muszę przyznać, że tworzenie wersji dla różnych przeglądarek
działa zadziwiająco dobrze i strony wyglądają prawie identycznie.
2