В этой статье я бы хотел рассказать о фреймворке Google Web Toolkit (GWT, а точнее о его расширении – Smart GWT, но сути не меняет). Для начала немного теории.
Что же вообще такое фреймворк? Далеко ходить не будем, цитата из википедии: «Каркас (англ. framework) — в информационных системах структура программной системы; программное обеспечение, облегчающее разработку и объединение разных компонентов большого программного проекта. В его состав могут входить вспомогательные программы, библиотеки кода, язык сценариев и прочее». Данное объяснение как нельзя лучше описывает данный термин. По сути – это набор из множества классов, которые позволяют решать различные задачи с более высокой скоростью за счет экономия времени (избавляемся от привычки создания очередных «велосипедов»).
GWT (Google Web Toolkit) – один из фреймворков, предназначенных для написания приложений на Java. И не простых приложений, а именно ориентированных на веб.
У опытных Java-программистов может возникнуть уместный вопрос: зачем нужен некий фреймворк для разработки веб-приложений, если уже и так есть возможность создания апплетов (если приемлемо исполнение на стороне клиента) и сервлетов (если необходимо исполнение на стороне сервера). Действительно, зачем? Есть очень весомый нюанс, который собственно и является сутью фреймворка. Google Web Toolkit не только предоставляет набор классов, упрощающих разработку, но и еще способен «скомпилировать» проект в набор JavaScript и HTML файлов. Уже интересно. Пишем на Java, а на выходе получаем оптимизированные скрипты. Преимущества такого подхода на поверхности: во-первых, для запуска такого приложения уже не требуется наличие Java-машины и во-вторых, добиваемся почти 100%-ой кросс-платформенности (JS в наше время поддерживают все современные бразуеры) и кросс-браузерности (здесь вопрос, конечно, спорный, но в большинстве своем именно так и есть).
Smart GWT – это довольно внушительная пристройка к стандартному GWT со своим набором классов. Попробуем на его основе создать первый простенький проект.
Во-первых, нам потребуется среда разработки. Eclipse – оптимальный вариант. Так как я тестировал фреймворк в версии 3.5, то в дальнейшем все ссылки будут относиться именно к этой редакции среды.
http://www.eclipse.org/downloads/packages/eclipse-classic-350/galileor — ссылка для скачивания Eclipse.
Среда кросс-платформенная: выбираем нужную ОС и устанавливаем.
Для интегрирования фреймворка GWT в среду необходимо установить плагин. Заходим в пункт меню Help -> Install New Software. Нажимаем на Add и вводим следующий url: http://dl.google.com/eclipse/plugin/3.5 (вместо 3.5 можно вписать другую версию, подробнее http://code.google.com/intl/ru-RU/eclipse/docs/download.html).
Нажимаем Next. Если все необходимые компоненты присутствуют, то вас попросят принять лицензионное соглашение и после этого пойдет процесс установки, по окончанию которого потребуется перезапуск среды.
После перезапуска в меню File -> New должен появиться новый пункт: Web Application Project. Выбираем его. Делаем настройки, как на скриншоте ниже и жмем Finish.
Создастся проект с минимальным набором файлов. В него входят основные конфигурационные xml-файлы, а также несколько Java-классов со стартовым приложением. Так как мы хотим написать свое, а не разбираться в чужом, то эти классы нам не нужны. Удаляем из проекта файлы GreetingService.java и GreetingServiceAsync.java.
Теперь перейдем к конфигурации нашего проекта. Перво-наперво, подключим к нему библиотеки Smart GWT. Скачиваем их http://code.google.com/p/smartgwt/downloads/list, далее щелкаем правой кнопкой по значку проекта и выбираем properties. Далее JavaBuildPath и во вкладке Libraries нажимаем на кнопку Add External JAR’s.
Идем в папку, в которую были закачаны библиотеки и выбираем два соответствующих .jar файла. Далее идем в Google -> Web Application и кнопкой Add добавляем наши библиотеки.

Теперь необходимо сделать корректировки в конфигурационных файлах. Выбираем файл YourGWTApplication.xml (YourGWT – имя вашего проекта) и добавляем туда строчку:
<inherits name='com.smartgwt.SmartGwt'/>;Полный листинг файла:
<?xml version="1.0" encoding="UTF-8"?> <module rename-to='firstgwtapplication'> <inherits name='com.google.gwt.user.User'/> <inherits name='com.smartgwt.SmartGwt'/> <inherits name='com.google.gwt.user.theme.standard.Standard'/> <entry-point class='com.myprog.client.FirstGWTApplication'/> <source path='client'/> <source path='shared'/> </module>
Далее выбираем файл web.xml (находится в /war/WEB-INF), и убираем из него лишнее. Листинг файла:
<?xml version="1.0" encoding="UTF-8"?> <!DOCTYPE web-app PUBLIC "-//Sun Microsystems, Inc.//DTD Web Application 2.3//EN" "http://java.sun.com/dtd/web-app_2_3.dtd"> <web-app> <!-- Default page to serve --> <welcome-file-list> <welcome-file>FirstGWTApplication.html</welcome-file> </welcome-file-list> </web-app>
И наконец открываем файл YourGWTApplication.html и приводим его к следующему виду:
<!doctype html>
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link type="text/css" rel="stylesheet" href="FirstGWTApplication.css">
<script type="text/javascript" language="javascript" src="firstgwtapplication/firstgwtapplication.nocache.js"></script>
</head>
<body>
<iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
<noscript>
<div style="width: 22em; position: absolute; left: 50%; margin-left: -11em; color: red; background-color: white; border: 1px solid red; padding: 4px; font-family: sans-serif">
Your web browser must have JavaScript enabled
in order for this application to display correctly.
</div>
</noscript>
</body>
</html>Ну и теперь перейдем к созданию нашего приложения. Открываем файл YourGWTApplication.Java, удаляем из него созданный шаблон (за исключением основного класса с методом onModuleLoad). Напишем простенький код, который отобразит в браузере кнопку и по нажатию выдаст MessageBox.
package com.myprog.client; import com.google.gwt.core.client.EntryPoint; import com.smartgwt.client.util.SC; import com.smartgwt.client.widgets.IButton; import com.smartgwt.client.widgets.events.ClickEvent; import com.smartgwt.client.widgets.events.ClickHandler; public class FirstGWTApplication implements EntryPoint { public void onModuleLoad() { IButton button = new IButton(); button.setTitle("Click!"); button.addClickHandler(new ClickHandler(){ @Override public void onClick(ClickEvent event) { SC.say("Hello World! :)"); } }); button.show(); } }
Для того чтобы посмотреть результат выполнения приложения нажмите на кнопку Run (располагается на основной панели инструментов). Справа появится список с url, который нужно открыть в браузере.
Ну вот, пожалуй, все. Напоследок хочу привести несколько полезных ссылок, которые помогут в изучении Smart GWT:
- http://www.smartclient.com/smartgwt/showcase/ (демонстрация различных возможностей фреймворка со всеми сопутствующими исходными кодами)
- http://www.smartclient.com/smartgwt/javadoc/ (документация)




Спасибо! Очень полезная статья мне очень помогла!
На здоровье. Летом долго мучился из-за того, что по Smart GWT в сети практически не было никаких вводных статей. В основном только документация по классам.
Теперь необходимо сделать корректировки в конфигурационных файлах.
а где эти конфигурационный файлы?
Эти конфигурационные файлы создаются автоматически при создании проекта GWT.
И это називатеся смарт? Болле ужасного фреймворка чем GWT не возможно найти. Генерировать тонну кода чтобы написать hello world? Писать код на Java чтобы получить java Script? зачем? Здесь абсолютно нет фронтенда. Вы теряете layer. JSF 2.1 The Best
По-моему очевидно, зачем: перенести некоторое клиентское приложение без ручного переписывания кода на просторы Web. Единственное, что нужно — это «сверстать» GUI уже конкретно через GWT, а если приложение проектировалось грамотно, то весь функционал писался отдельно от графического интерфейса. А уж связать одно с другим — это дело одного дня.
Вот казалось бы, зачем кому-то может понадобиться транслировать код с Delphi (да-да, именно с DELPHI) в JS? Оказывается нужно, и не для какого-то маленького проекта, а для большой системы — http://habrahabr.ru/post/137336/
А «тонной» кода вы видимо называет конфиги xml’ные. Ну, ничего не поделать — эти файлы часть проекта. Зато один раз настроивши, больше возвращаться к ним не придется. И проблема здесь сугубо в IDE или же плагине GWT’шном, который автоматизированно это не умеет генерировать (кстати, не факт что сейчас все также, ибо статья писалась давно).
Очень полезная статья.
Все доступно и понятно. Особенно тем, кто первый раз садится за настройку.
По maven бы было еще что-нибудь подобное