Pull to refresh

Ajax + Google = GWT

Reading time2 min
Views1.4K

История из жизни.(Предисловие)

Год назад пришлось заняться разработкой UI для вебсервиса на javascript. Со временем UI переросла в полноценный тонкий клиент с довольно динамичным интерфейсом и немаленькой бизнес логикой. Как же меня начал раздражать этот javascript.

В основном выделялись 3 проблемы
1) отсутствие наследования и инкапсуляции. Это серьезно сказывалось на бизнес логике. Конечно есть Prototype и много разных других фреймверков для решения этой проблемы, но после Java это все казалось притянутым за уши.
2) невозможность создать сложные UI элементы. Хотелось вынести повторяющиеся куски UI в отдельные контролы и юзать их, просто переопределяя некоторую функциональность.
3) мультибраузерность. Даже если писать все под firefox — это не всегда работает в IE. Особо радовали различия в парсинге XML и дефолтовые значения стилей padding и marging.

На мой взгляд первые две проблемы порождало отсутствие ООП. Ясного и интуитивного. Решение было простое и в лоб: написать транслятор Java в JavaScript(JS). С точки зрения синтаксиса Java гораздо строже JS, и поэтому трансляция казалась вполне решаемой задачей. После дополнительных исследований меня удивил и обрадовал факт, что Google просто взяли и решил все мои проблемы…

Google Web Toolkit(GWT).

Все очень просто — мы пишем приложение на Java, используя стандартные наборы утилит и классов Java 1.4, готовые контролы для UI и набор базовых классов от Google. Есть там и ограничения, но не слишком сильные. Очень близко к обычному GUI приложению.
Потом все это компилируется GWT-компилятором и на выходе мы получае html файл с js-кодом. Получаем 6 разных вариантов: default, opera, safari, gecko, gecko1.8, ie6. Ничего лишнего. Для каждого браузера грузится только свой вариант кода.

С точки зрения Java-разработчика (и не только) GWT поддерживает такие полезные вещи
1) компилятор Java в JavaScript
2) дебаг.
3) мультибраузерность.
4) возможность написания модулей.
5) широкий набор виджетов, панелей и контролов.
6) RPC
7) JUnit
8) интернационализация/Resource banding.
9) JavaScript Native Interface — Вставки на чистом javascript'е. Возможность дергать из Java javascript и наоборот.
10) JSON и многое многое другое.

На GWT (или его прототипах)были написаны Google Mail, Google Maps, Google Base

Для кого предназначен GWT.

Думаю что данный фреймверк будет в основном полезен Java-разработчикам, которые в силу тех или иных причин пишут UI. GWT дает возможность не отказываться от высокоуровневых языков и их преимуществ. Уже есть поддержка GWT в IntellijIDEA и Ecipse.

Пример
public class HelloCrazyWorld implements EntryPoint
{
    public void onModuleLoad()
    {
         Label label = new Label("Click me ");
         label .addClickListener( new ClickListener()
         {
             public void onClick( Widget sender )
             {
                 Window.alert("Hello!");
             }
        });

       RootPanel.get().add(label )  ; 
    }
}


PS. кто подскажет, как лучше обрамить код тегами?
Tags:
Hubs:
Total votes 10: ↑8 and ↓2+6
Comments3

Articles