История из жизни.(Предисловие)
Год назад пришлось заняться разработкой 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. кто подскажет, как лучше обрамить код тегами?