Блог о Java технологиях
Google Web Toolkit (GWT) — это Java фреймворк, который позволяет java разработчикам создавать Ajax приложения без углубленного изучения JavaScript и браузерной обработки. Разработчикам предоставляется Java API, которое позволяет создавать GUI, избегая работы с JavaScript. GWT компилятор кросс-компилирует клиентский Java код в оптимизированный JavaScript, автоматически работающий во всех популярных браузерах. GWT компилятор выполняет полный статистический анализ и оптимизацию всего кода, создавая при этом очень оптимизированный JavaScript.
Связь с сервером осуществляется через GWT Remote Procedure Call (RPC) — механизм удаленного вызова процедур, который позволяет обмениваться Java-обьектами между клиентом и сервером. Нужно просто создать интерфейс, указывающий удаленные методы, которые нужно вызывать. При вызове удаленного метода, GWT RPC автоматически сериализует аргументы, вызывает правильный метод на сервер и десериализует возвращенное значение для кода клиента.
GWT позволяет разработчикам эффективно тестировать и выполнять отладку приложения без преобразования в JavaScript и развертывания на веб-сервере. В hosted mode режиме JVM исполняет код GWT приложения в виде Java-байт кода внутри встроенного браузера. Hosted режим позволяет выполнять отладку быстро и легко.
- все внутренние типы данных и массивы
- обработку исключений(try, catch, finally и пользовательские исключения)
- обрабатывает ключевое слово assert, но не генерирует код для них
- Reflection или динамическую загрузку классов
- финализацию объекта в ходе сбора мусора
- Strict Floating Point (ключевое слово sctricfp)
- Java сериализацию
загружается и исполняется JavaScript код. Файл gwtapp.nocache.js содержит JavaScript код, который выбирает подходящую конфигурацию. GWT компилятор генерирует таблицы поиска, которые браузер использует для определения какой из *.cache.js файлов нужно использовать. Далее JavaScript код в .nocache.js создает скрытый iframe, вставляет его в DOM хост-страницы загружает в созданный iframe файл .cache.html. После загрузки .cache.html начинается выполняться логика GWT приложения.
Давайте разберемся что же это за файлы *.nocache.js и .nocache.html.
В файле .nocache.js происходит deffered binding. Он сожержит таблицы поиска для выбора cache.html файлов. Файл наз. *.nocache.js чтобы указать, что он никогда не должен кешироваться, он должен загружаться и выполнятся всякий раз, когда браузер стартует GWT приложение. Файл должен каждый раз перезагружатся, потому что GWT компилятор генерирует его каждый раз заново, но под тем же именем.
Файлы типа
GWT.Начинающим на заметку
Эта статья предназначена в первую очередь начинающим и навряд ли принесет какую либо пользу людям бывалым. Но было бы неплохо, если бы люди с опытом привели бы парочку полезных ссылок в комментариях.
Итак, знакомство я советую начать с демо. Тогда вы сможете себе представить, а что GWT вообще может и какие виджеты доступны прямо из коробки. GWT безусловно весьма сильный Фреймворк, но его чуть ли не самая главная беда заключается как раз в том, что этих самых виджетов не так уж и много. Но эта не беда, т.к. есть много различных библиотек, которые эту проблему решают. Особый расцвет пришелся на время 2-3 года назад, когда много чего в GWT просто не было и явных фаворитов среди сторонних библиотек тоже не было заметно. Сейчас ситуация довольно сильно изменилась. Поэтому если вам нужен какой нибудь продвинутый виджет, то советую обратить внимание на SmartGWT и Ext-GWT.
SmartGWT имеет целую кучу виджетов на все случаи жизни. Смотрите сами. Обратите внимание на таблицы, что еще можно желать? Если вам все таки чего то не хватает, то виджет вы можете допилить. У библиотеки есть весьма живой форум, если у вас возникла проблема, ищите там. Я находил ответы на все мои вопросы. Не найдете, спрашивайте сами, обычно отвечают весьма оперативно. У библиотеки есть даже своя IDE, правда я ей не пользовался. О том что библиотека весьма популярна говорит и тот факт, что в плагине WindowBuilder к Эклипсе есть возможность накликать GUI из виджетов SmartGWT. У библиотеки есть большой, на мой взгляд, недостаток: вы напишите маленькую программку с одной единственной таблицей и размер этой программки станет сразу под 2 мегабайта. Т.е. написать сайт на SmartGWT конечно получится, но кто будет ждать пока он загрузится? Именно поэтому я написал этот сайт на «чистом» GWT. Но для разных вебморд для банков данных и сервисов, которыми пользуются в основном по локалке, эта библиотека первый кандидат на рассмотрение.
Если по какой то причине SmartGWT вас не устроила, обратите внимание на GWT-Ext и GXT. С ними я не работал, так что ничего сказать не могу, но выглядит не плохо.
Если же вы решили таки обойтись «чистым» GWT я рекомендую вам посмотреть вот это. Кроме того посмотрите на вот эти интересные демки. Когда я это увидел я был просто в восторге, это же jQuery для GWT! Теперь можно делать весьма приятные анимационные эффекты буквально парой строчек.
Ну а под конец несколько моментов, которые полезно знать.
На сервере не обязательно должна крутится ява. Там может быть практически все что угодно, в том числе и PHP. А может и вообще ничего не быть, если страница не «разговаривает» сервером. Вот посмотрите: раз, два. Эту штуку я сделал для предмета «E-Learning». Страницы полностью статические, в том смысле, что после загрузки сервер им не нужен.
Из GWT можно вызывать функции написанные на чистом JavaScripte. Делается это элементарно, пишите, что функция нативная и пишите там JavaScript. Здесь это весьма подробно объяснено.
Это значит, что вы можете использовать в своем GWT проекте любую чисто JavaScript‘овскую библиотеку( вот тут правда я не очень уверен, если что поправьте). Если вы хотите вытащить из JavaScripta значение какой либо переменной посмотрите в сторону класса Dictionary.
Можно и наоборот, написать логику на GWT, а потом вызывать ее в JavaScripte. Здесь описано как это делается.
Как то я даже находил в сети маленькую библиотеку, которая автоматизирует этот процесс.
Практически у каждого виджета есть статичный метод wrap(). Например если у вас есть див на статичной странице и вы хотите динамично изменять его содержимое, то вы просто пишите:
Label label = Label.wrap(DOM.getElementById("A")); label.setText("new Text");
где «А» это id вашего дива. Просто, не так ли?
Не все явовские классы имеют свои аналоги в GWT. Например класс Thread использовать не получится, что понятно, т.к. в JavaScripte многопоточность в этом смысле не реализована(пока).
Ваши дополнения интересных библиотек и фичь приветствуются!
Фреймворк GWT
Google Web Toolkit (GWT) — это свободный Java фреймворк, позволяющий создавать Ajax-приложения. Основной особенностью GWT является компилятор Java, конвертирующий искодный код в JavaScript. Web-программисты в основном всю разработку клиентской и серверной частей приложения реализовывают с использованием Java и лишь на последнем этапе осуществляют конвертацию исходных кодов в соответствующий JavaScript.
GWT включает XML парсер, поддерживает интернационализацию, имеет интерфейс удаленного вызова процедур, интегрирован с JUnit и имеет небольшой пакет виджетов для разработки элементов графического интерфейса пользователя (GUI). Виджеты могут быть созданы аналогично тому, как это делается с помощью библиотеки Swing.
Структура проекта GWT-приложения включает серверную и клиентскую части. Отладка серверной части приложения осуществляется как отладка обычного Java web-приложения. Для отладки клиентской части необходимо дополнительно устанавливать GWT Developer Plugin для браузера.
Для создания структуры нового GWT-приложения фреймворк включает утилиту командной строки webAppCreator, которая автоматически создает все файлы проекта. Для IDE Eclipse (начиная с версии 3.3) существует подключаемый модуль Google Plugin, существенно упрощающий процессы создания GWT-проекта и размещения готовых приложений на сервисе Google App Engine.
Первую версию (GWT 1.0) компания Google анонсировала в 2006 году. В 2014 году уже вышли 2 версии — GWT 2.6 (январь 2014 года) и GWT 2.7 (ноябрь 2014 года).
GWT предлагает небольшой набор графических виджетов для разработки интерфейса клиентской части приложения. Дополнительные виджеты можно подключить, используя одну из сторонних библиотек типа GXT, SmartGWT.
Фреймворк GWT включает :
- Google Plugin for Eclipse (GPE) – плагин разработки GWT-приложений в среде Eclipse.
- GWT SDK – Java-библиотеки программного интерфейса GWT-платформы, GWT-компилятор Java-кода в JavaScript-код, локальный сервер разработки, позволяющий запускать и отлаживать Java-код приложения без его компиляции в JavaScript-код.
- GWT Designer – плагин визуального редактирования GUI-интерфейса GWT-приложения в Eclipse.
- Speed Tracer – дополнение Web-браузера Chrome для анализа производительности GWT-приложения.
Инсталляция GWT в IDE Eclipse
Для начала работы с GWT-проектом необходимо установить в IDE Eclipse плагины GPE, GWT SDK и GWT Designer. Для этого в среде Eclipse (http://www.eclipse.org/downloads/) в меню Help выберем команду «Install New Software», нажмем кнопку «Add» поля «Work with» и введем адрес инсталляции плагины Google для Eclipse. Адреса плагинов Google можно найти на странице https://developers.google.com/eclipse/docs/download?hl=ru-RU.

Eclipse загрузит в интерфейс окна доступные плагины. Необходимо отметить флажки GWT-плагинов и нажать кнопку Next. На следующем шаге Eclipse представит все компоненты, которые будут установлены в среде разработки.

Далее необходимо согласиться с условиями лицензии, после чего компоненты GWT будут установлены в Eclipse.
После перезагрузки IDE в панели инструментов мы увидим дополнительные пункты меню для GWT проекта.

Инсталляция плагина «GWT Developer Plugin» в браузере
На этом можно сказать, что установка плагина фреймворка GWT в среду Eclipse завершена. Можно переходить к разработке. Однако необходимо пару слов сказать о браузере. Лучше, конечно, для отладки GWT-приложения использовать родной Google Chrome, хотя можно и любой другой. Предыдущие версии GWT требовали дополнительной установки плагина в браузере, GWT Developer Plugin. Для разных браузеров использовался свой плагин. Проявлялось это при первом открытии GWT-приложения в браузере в виде следующей страницы.

С использованием GWT SDK версии 2.6 можно плагин GWT Developer Plugin в браузере не устанавливать. Для этого достаточно стартовать приложение в режиме «Super Dev Mode», как это представлено на следующем скриншоте.

Отложенное связывание, Deferred Binding
Отложенное связывание (Deferred Binding) является одним из важных элементов фреймворка. Оно позволяет GWT формировать хорошо оптимизированный код JavaScript. Следует отметить, что GWT компилятор не поддерживает java reflection или динамическую загрузку классов, также называемую динамическим связыванием. Связано это с тем, что JavaScript среда, в которой GWT приложение будет функционировать, не поддерживает это. Ввиду невозможности динамичного связывания в GWT, вместо него используется так называемые отложенное связывание Deffered Binding. Отложенное связывание похоже на динамическую загрузку классов. Если динамическая загрузка класса происходит во время выполнения приложения, то отложенное связывание происходит во время компиляции.
Во время компиляции клиентского кода GWT приложения компилятор определяет «особенности браузера», которые код должен поддерживать, и генерирует оптимизированный вариант приложения для каждой конкретной конфигурации. Поэтому при правильной настройке файла конфигурации можно получить различные версии приложения для каждого из поддерживаемых браузеров. Но отложенное связывание это нечто большее, чем просто мультибраузерная поддержка.
Хороший пример того, где отложенное связывание может быть полезным является мультиязыковая поддержка. GWT компилятор использует Deferred Binding для создания совершенно разных версий приложения для каждого языка. Таким образом, если GWT поддерживает 4 типа разных браузера и в файле конфигурации приложения будет определено 4 языка, то GWT компилятор будет генерировать 16 различных реализаций. Во время запуска и выполнения, GWT выбирает подходящую версию приложения для браузера.
Отложенное связывание имеет несколько преимуществ :
- снижает размер сгенерированного JavaScript кода, таким образом клиенту будет необходимо скачать только код необходимый для запуска под определенным браузером (использованно в Internationalization модуле).
- автоматически генерирует код, имплементирующий интерфейс или создающий прокси класс — использовано в GWT RPC модуле.
Особенности GWT-проекта
В GWT-проекте необходимо учитывать особенности использования ресурсных файлов изображений и сообщений, временных зон TimeZone, описанных здесь.
Google Web Toolkit
Google Web Toolkit (GWT , ˈɡwɪt ) — свободный Java-фреймворк, который позволяет веб-разработчикам создавать Ajax-приложения на основе Java. Выпускается под лицензией Apache версии 2.0. GWT делает акцент на повторное использование и кросс‐браузерную совместимость.
История
Версия 1.0 RC 1 (build 1.0.20) выпущена 16 мая 2006 года. Компания Google анонсировала GWT на конференции JavaOne в 2006 году.
- GWT 1.0 — 17 мая2006 года
- GWT 1.1 — 11 августа2006 года
- GWT 1.2 — 16 ноября2006 года
- GWT 1.3 — 5 февраля2007 года
- GWT 1.4 — 28 августа2007 года
- GWT 1.5 — 27 августа2008 года
- GWT 1.6 — 7 апреля2009 года
- GWT 1.7 — 13 июня2009 года
- GWT 1.7.1 — 22 сентября2009 года
- GWT 2.0 — 8 декабря2009 года
- GWT 2.0.1 — 2 февраля2010 года
- GWT 2.0.2 — 12 февраля2010 года
- GWT 2.0.3 — 18 февраля2010 года
- GWT 2.0.4 — 2 июля2010 года
- GWT 2.1.0 — 19 октября2010 года
- GWT 2.1.1 — 16 декабря, 2010 года
- GWT 2.2.0 — 11 февраля, 2011 года
- GWT 2.3.0 — 5 мая, 2011 года
- GWT 2.4.0 — 8 сентября, 2011 года
- GWT 2.5.0 — 27 июня, 2012 года
Разработка
Используя GWT, разработчики могут быстро писать и отлаживать AJAX приложения на языке Java, используя инструментарий отладки Java. Компилятор GWT переведёт код Java приложения в соответствующий браузеру JavaScript и HTML.
Утилита командной строки applicationCreator, поставляемая вместе с GWT, автоматически создает все файлы, необходимые для нового GWT-проекта. Она также позволяет создавать файлы проекта Eclipse.
Существует подключаемый модуль Google Plugin для IDE Eclipse версий 3.3 — 3.7, позволяющий упростить процессы создания GWT-проекта и размещения готовых приложений на сервисе Google App Engine.
Компоненты
Основные компоненты GWT:
Компилятор GWT Java-to-JavaScript Переводит Java код в JavaScript. GWT Hosted Web Browser Позволяет запускать GWT приложения в режиме hosted (приложения запускаются как Java код в JVM без компиляции в JavaScript). JRE emulation library Реализация часто используемых стандартных Java классов на JavaScript. GWT Web UI class library Множество пользовательских интерфейсов и классов для создания виджетов.
Примечания
- ↑Google Web Toolkit Release Archive — Google Web Toolkit — Google Code
См. также
Ссылки
ColdSpring • Fusebox • Mach-II • Model-Glue
Apache (Cocoon • Struts • Velocity • WebWork 2) • AppFuse • Aranea • Eclipse • Facelets • Flexive • FreeMarker • Google Web Toolkit • Grails • Hamlets • ItsNat • JavaServer Faces • Jspx • JBoss Seam • jZeno • Makumba • OpenLaszlo • OpenXava • Reasonable Server Faces (RSF) • Restlet • RichFaces • RIFE • Shale • SmartClient • Spring • Stripes • Tapestry • ThinWire • Vaadin • WebMacro • WebWork • WebObjects • Wicket • ZK
Catalyst • Interchange • Titanium • Maypole • HTML:Mason
Acode • Akelos • BlueShoes • CakePHP • Canvas • CodeIgniter • DIY • Drupal • Fuse • Horde • Kohana • LiveStreet • PHP For Applications • PHPOpenbiz • PRADO • Qcodo • Seagull • Solar • Symfony • W3Core • Yii • Zend • Zoop • Joomla
Camping • Nitro • IOWA • Ramaze • Cerise • Merb • Ruby on Rails • Sinatra • Padrino
Macintosh Toolbox/Carbon • Windows API • Intrinsics • Intuition • Xlib
BOOPSI • Magic User Interface • Zune • ReAction GUI
Cocoa • MacApp • MacZoop • PowerPlant
ASWing • Adobe Flex • Gnash • SWF2EXE Software
Ample SDK • CougarXML • Dojo Toolkit • Echo • ExtJS • GladeXML • Google Web Toolkit • jQuery • Lively Kernel • MooTools • Pyjamas • qooxdoo • Rialto Toolkit • script.aculo.us • XML User Interface • XUL • Yahoo! UI Library
Agar • CEGUI • Component Library for Cross Platform • dlib C++ Library • FLTK • FOX toolkit • OpenGL User Interface Library • GTK+ • IUP • Juce • JX Application Framework • Qt • TnFOX • Visual Component Framework • wxWidgets • YAAF • XForms • XVT • Ultimate++
CAPI • Common Graphics • CLIM • McCLIM • Garnet
Pyjamas • PyQt • PyGTK • PyGUI • wxPython • PySide • Tkinter