SlideShare ist ein Scribd-Unternehmen logo
1 von 29
Google Web Toolkit
  Введение в средство разработки
пользовательского WEB интерфейса




                                       Anton Antonov
                      anton.antonov@sigmaukraine.com
                                                2011
Содержание

 Трудности
 GWT решение
 Как работает GWT?
 Возможности GWT
 Паттерны и библиотеки
WEB приложение: трудности
GWT решение
 Дружественная для
 разработчиков
 – Совместимость с IDE,
   отладка, рефакторинг,
   строгая типизация…
 Не зависит от
 реализации и платформы
 сервера
 – Java (Tomcat, Jboss, и т.д.)
 – PHP/CGI (Apache)
 – .Net (IIS)
GWT: основной принцип

 Пишем код на Java
 Компилируем Java код в JavaScript
 JavaScript выполняется в браузере
GWT: HelloWorld

public class HelloWorld implements EntryPoint {
  public void onModuleLoad() {
     RootPanel panel = RootPanel.get();
     Label message = new Label("Hello World!!!");
     panel.add(message);
     Button button = new Button("Click ME");
     panel.add(button);
     button.addClickHandler(new ClickHandler() {
        public void onClick(ClickEvent event) {
           Window.alert("Hello World!");
        }
     });
  }
}
Более полезные приложения

 Google Wave
 – https://wave.google.com


 Google AdWords
 – https://adwords.google.com


 А так же много других
 – http://gwtgallery.appspot.com
GWT Архитектура




http://www.slideshare.net/dgirard/introduction-to-google-web-toolkit
Виджеты




http://gwt.google.com/samples/Showcase/Showcase.html
Поддержка истории (back button)

    Одностраничный интерфейс с поддержкой истории
    GWT ShowCase - как пример


History.addValueChangeHandler(new ValueChangeHandler<String>() {
        public void onValueChange(ValueChangeEvent<String>
stringValueChangeEvent) {
           //do something on history change
       }
    });
Декларативный интерфейс (UiBinder)

 Разделение Вида от Поведения
 XML вместо Java кода
 Шаблонизация виджетов и их взаимного расположения
 Интеграция с внешними ресурсами (CSS, картинки)
AJAX: RPC это просто
private void getData() {
   DataServiceAsync rpc = (DataServiceAsync) GWT.create(DataService.class);
   rpc.getDataModel(5, 6, new AsyncCallback<DataModel>() {
      public void onFailure(Throwable throwable) {
        Window.alert("Unable get data from server"
              + throwable);
      }

      public void onSuccess(DataModel dataModel) {
        Window.alert("Server response:n"
              + dataModel.getDataString()
              + dataModel.getDataInt());
      }
    });
}
Сериализуемые типы

 java.io.Serializable совместимая*
 – Наследник java.io.Serializable
 – Конструктор без аргументов (или без конструктора) любой видимости
 – Все non-final и non-transient поля должны быть сериализуемы
Мост из Java в JavaScript (JSNI)

 Возможность вызова JS методов из GWT Java кода
private native void someJSFunction(Date value) /*-{
  $wnd.someJSFunction(value);
}-*/;


 Возможность вызова GWT методов из JS кода
   – Код на следующем слайде
 Существует множество обверток над существующими JS
 библиотеками (Google Charts, JQuery и т.д.)
 Можно легко писать свои обвертки
JavaScript Overlay типы
private native void registerGWTFunction() /*-{
   var _this = this;
   $wnd.registeredGWTFunction = function (v) {
      _this.@com.sigmaukraine.jug.jsni.client.JSNI
           ::jsAccessibleFunction
           (Lcom/sigmaukraine/jug/jsni/client/overlay/JSOverlay;)
           (v);
   };
}-*/;

private void jsAccessibleFunction(JSOverlay overlay) {
   Window.alert("I'm GWT:nstr:"
        + overlay.getStr() + "nvalue:"
        + overlay.getValue());
}
Оптимизация
Cross-browser поддержка




 Скомпилированный JavaScript оптимизирован
 Только необходимое API грузится браузером (пермутация)
 –   IE грузит JS только для IE, FireFox – JS только для FF
 –   Неиспользуемое API исключается из скомпилированного JS
Сборка ресурсов

1 запрос вместо 12
ClientBundle
–   CSSResource
–   ImageResource
–   TextResource
–   И т.д.
    (http://code.google.com/webtoolkit/doc/latest/DevGuideClientBundle.html#ClientBundle )
Разделение кода

 Отдельные части большого приложения загружаются по
 требованию

 GWT.runAsync(new RunAsyncCallback() {
   public void onFailure(Throwable reason) {
     Window.alert("Can't load script part");
   }

   public void onSuccess() {
     //The following code will be loaded on demand
     root.add(new HelloWorldPanel(textCell.getValue()));
   }
 });
Отладка
Отладка скомпилированного JS

 Это возможно!
 Достаточно изменить один параметр компилятора
 – -style pretty
 Зачастую в этом нет необходимости*
 – * это пока единственный способ отладки JSNI методов
JUnit тестирование

 Возможность тестирование не «родного» кода
 непосредственно с помощью JUnit
 GWTTestCase в противном случае
  – Позволяет тестировать логику виджетов, которые используют DOM модель,
    DeferredBinding или JSNI.
 Интеграция с IDE
MVP (GWT pattern)

 Model
 – Модель данных, бизнес модель
 View
 – Отображение данных (UiBinder widget, GWT plain widget, etc.)
 Presenter
 – Поведение или логика
Activities & Places (GWT pattern)

 Место (Place)
  – Состояние UI конвертируемое в/из URL hash (#...)
 Активность (Activity)
  – Инкапсуляция действия пользователя
      • Wake up
      • Set up
      • Show up
  – Обычно приводит к смене «места»
GWT паттерны и библиотеки

 MVP (Model View Presenter) GWT-Platform
 – http://code.google.com/webtoolkit/articles/mvp-architecture.html
 – http://code.google.com/p/gwt-platform/
 Activities & Places
 – http://code.google.com/webtoolkit/doc/latest/DevGuideMvpActivitiesAndPlaces.html
 Gin (Dependency injection for GWT, based on Guice)
 – http://code.google.com/p/google-gin/
 Spring MVC RPC integration (gwt-widget SL)
 – http://gwt-widget.sourceforge.net/gwt-sl/reference-1.0/index.html
Q&A

Weitere ähnliche Inhalte

Was ist angesagt?

Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)
DrupalYug
 
библиотека Google closure java script
библиотека Google closure java scriptбиблиотека Google closure java script
библиотека Google closure java script
Yova Stoika
 
Библиотека Google Closure Java Script
Библиотека Google Closure Java ScriptБиблиотека Google Closure Java Script
Библиотека Google Closure Java Script
Volodymyr Forfutdinov
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
2ГИС Технологии
 
Android: Как создать свое первое приложение?
Android: Как создать свое первое приложение?Android: Как создать свое первое приложение?
Android: Как создать свое первое приложение?
Kuban Dzhakipov
 
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
Ontico
 
Selenium. Stas Kuzminov
Selenium. Stas KuzminovSelenium. Stas Kuzminov
Selenium. Stas Kuzminov
ADCI Solutions
 

Was ist angesagt? (20)

Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)Реактивный фронтенд фреймворк для людей (Константин Комелин)
Реактивный фронтенд фреймворк для людей (Константин Комелин)
 
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
Сергей Морковкин "Разработка realtime SPA с использованием VueJS и RethinkDB"
 
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
Объять необъятное, или как использовать несколько MVVM фреймворков в одном XA...
 
библиотека Google closure java script
библиотека Google closure java scriptбиблиотека Google closure java script
библиотека Google closure java script
 
Библиотека Google Closure Java Script
Библиотека Google Closure Java ScriptБиблиотека Google Closure Java Script
Библиотека Google Closure Java Script
 
Database automated deployment and versioning ...for smart people
Database automated deployment and versioning ...for smart peopleDatabase automated deployment and versioning ...for smart people
Database automated deployment and versioning ...for smart people
 
Moxy – реализация MVP под Android. С щепоткой магии
Moxy – реализация MVP под Android. С щепоткой магииMoxy – реализация MVP под Android. С щепоткой магии
Moxy – реализация MVP под Android. С щепоткой магии
 
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVMKNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
KNOCKOUTJS КАК РЕАЛИЗАЦИЯ MVVM
 
Автоматизируем GUI тесты на питоне
Автоматизируем GUI тесты на питонеАвтоматизируем GUI тесты на питоне
Автоматизируем GUI тесты на питоне
 
МАПО 2013 Лекция 03 Программирование Blockly
МАПО 2013 Лекция 03 Программирование BlocklyМАПО 2013 Лекция 03 Программирование Blockly
МАПО 2013 Лекция 03 Программирование Blockly
 
Cобытия в JavaScript
Cобытия в JavaScriptCобытия в JavaScript
Cобытия в JavaScript
 
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
«Организация Frontend-разработки на крупном проекте» — Дмитрий Кузнецов
 
МАПО 2013 Лекция 04 Фабрика Blockly
МАПО 2013 Лекция 04 Фабрика BlocklyМАПО 2013 Лекция 04 Фабрика Blockly
МАПО 2013 Лекция 04 Фабрика Blockly
 
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ..."nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
"nw.js: введение в кросс-платформенные декстопные приложения на JavaScript", ...
 
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
Стабильность WebGL приложений / Кирилл Дмитренко (Яндекс)
 
«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mai...
«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mai...«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mai...
«Buzzwords everywhere, или Борьба с ветряными мельницами», Артём Дроздов, Mai...
 
MVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоватьсяMVP, Moxy. Как правильно пользоваться
MVP, Moxy. Как правильно пользоваться
 
Android: Как создать свое первое приложение?
Android: Как создать свое первое приложение?Android: Как создать свое первое приложение?
Android: Как создать свое первое приложение?
 
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
Как взаимодействовать с графическими дизайнерами: готовим UI Kit / Артем Моло...
 
Selenium. Stas Kuzminov
Selenium. Stas KuzminovSelenium. Stas Kuzminov
Selenium. Stas Kuzminov
 

Ähnlich wie Gwt jug basic

Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
UA Mobile
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Softengi
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
Yandex
 
Web internship java script
Web internship   java scriptWeb internship   java script
Web internship java script
Noveo
 

Ähnlich wie Gwt jug basic (20)

iOS and Android Mobile Test Automation
iOS and Android Mobile Test AutomationiOS and Android Mobile Test Automation
iOS and Android Mobile Test Automation
 
Mobile automation uamobile
Mobile automation uamobileMobile automation uamobile
Mobile automation uamobile
 
Сергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3CСергей Константинов — Что интересного готовит нам W3C
Сергей Константинов — Что интересного готовит нам W3C
 
JSSDK: Начало
JSSDK: НачалоJSSDK: Начало
JSSDK: Начало
 
RoboGuice
RoboGuiceRoboGuice
RoboGuice
 
Mobile Fest#spb 2012
Mobile Fest#spb 2012Mobile Fest#spb 2012
Mobile Fest#spb 2012
 
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары SoftengiРазработка Web-приложений на Angular JS. Архитектурные семинары Softengi
Разработка Web-приложений на Angular JS. Архитектурные семинары Softengi
 
Desktop app based on node js and html5
Desktop app based on node js and html5Desktop app based on node js and html5
Desktop app based on node js and html5
 
Как стать продуктивным Android разработчиком
Как стать продуктивным Android разработчикомКак стать продуктивным Android разработчиком
Как стать продуктивным Android разработчиком
 
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации..."Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
"Адаптивный дизайн интерфейса JS API Яндекс.Карт и особенности его реализации...
 
Web internship java script
Web internship   java scriptWeb internship   java script
Web internship java script
 
Web&java. gwt
Web&java. gwtWeb&java. gwt
Web&java. gwt
 
AngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для пониманияAngularJS. Введение и простые примеры для понимания
AngularJS. Введение и простые примеры для понимания
 
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
Vue.js и его брат-близнец Vue-server.js / Андрей Солодовников (НГС)
 
Node.js введение в технологию, КПИ #ITmeetingKPI
Node.js введение в технологию, КПИ  #ITmeetingKPINode.js введение в технологию, КПИ  #ITmeetingKPI
Node.js введение в технологию, КПИ #ITmeetingKPI
 
JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"JavaScript-модули "из прошлого в будущее"
JavaScript-модули "из прошлого в будущее"
 
Angular js
Angular jsAngular js
Angular js
 
Behavior Driven Development
Behavior Driven DevelopmentBehavior Driven Development
Behavior Driven Development
 
Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0Что нового в Visual Studio 2010 и .Net 4.0
Что нового в Visual Studio 2010 и .Net 4.0
 
2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock2014 Jeeconf - Geb Spock
2014 Jeeconf - Geb Spock
 

Mehr von Alex Tumanoff

Navigation map factory by Alexey Klimenko
Navigation map factory by Alexey KlimenkoNavigation map factory by Alexey Klimenko
Navigation map factory by Alexey Klimenko
Alex Tumanoff
 
Serialization and performance by Sergey Morenets
Serialization and performance by Sergey MorenetsSerialization and performance by Sergey Morenets
Serialization and performance by Sergey Morenets
Alex Tumanoff
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey Teplyakov
Alex Tumanoff
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
Alex Tumanoff
 
Bdd by Dmitri Aizenberg
Bdd by Dmitri AizenbergBdd by Dmitri Aizenberg
Bdd by Dmitri Aizenberg
Alex Tumanoff
 
Разработка расширений Firefox
Разработка расширений FirefoxРазработка расширений Firefox
Разработка расширений Firefox
Alex Tumanoff
 

Mehr von Alex Tumanoff (20)

Sql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen NedaskivskyiSql server 2019 New Features by Yevhen Nedaskivskyi
Sql server 2019 New Features by Yevhen Nedaskivskyi
 
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis ReznikOdessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
Odessa .net-user-group-sql-server-2019-hidden-gems by Denis Reznik
 
Azure data bricks by Eugene Polonichko
Azure data bricks by Eugene PolonichkoAzure data bricks by Eugene Polonichko
Azure data bricks by Eugene Polonichko
 
Sdlc by Anatoliy Anthony Cox
Sdlc by  Anatoliy Anthony CoxSdlc by  Anatoliy Anthony Cox
Sdlc by Anatoliy Anthony Cox
 
Kostenko ux november-2014_1
Kostenko ux november-2014_1Kostenko ux november-2014_1
Kostenko ux november-2014_1
 
Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3Java 8 in action.jinq.v.1.3
Java 8 in action.jinq.v.1.3
 
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас..."Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
"Drools: декларативная бизнес-логика в Java-приложениях" by Дмитрий Контрерас...
 
Spring.new hope.1.3
Spring.new hope.1.3Spring.new hope.1.3
Spring.new hope.1.3
 
Sql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton VidishchevSql saturday azure storage by Anton Vidishchev
Sql saturday azure storage by Anton Vidishchev
 
Navigation map factory by Alexey Klimenko
Navigation map factory by Alexey KlimenkoNavigation map factory by Alexey Klimenko
Navigation map factory by Alexey Klimenko
 
Serialization and performance by Sergey Morenets
Serialization and performance by Sergey MorenetsSerialization and performance by Sergey Morenets
Serialization and performance by Sergey Morenets
 
Игры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей РыбаковИгры для мобильных платформ by Алексей Рыбаков
Игры для мобильных платформ by Алексей Рыбаков
 
Android sync adapter
Android sync adapterAndroid sync adapter
Android sync adapter
 
Async clinic by by Sergey Teplyakov
Async clinic by by Sergey TeplyakovAsync clinic by by Sergey Teplyakov
Async clinic by by Sergey Teplyakov
 
Deep Dive C# by Sergey Teplyakov
Deep Dive  C# by Sergey TeplyakovDeep Dive  C# by Sergey Teplyakov
Deep Dive C# by Sergey Teplyakov
 
Bdd by Dmitri Aizenberg
Bdd by Dmitri AizenbergBdd by Dmitri Aizenberg
Bdd by Dmitri Aizenberg
 
Неформальные размышления о сертификации в IT
Неформальные размышления о сертификации в ITНеформальные размышления о сертификации в IT
Неформальные размышления о сертификации в IT
 
Разработка расширений Firefox
Разработка расширений FirefoxРазработка расширений Firefox
Разработка расширений Firefox
 
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So..."AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
"AnnotatedSQL - провайдер с плюшками за 5 минут" - Геннадий Дубина, Senior So...
 
Patterns of parallel programming
Patterns of parallel programmingPatterns of parallel programming
Patterns of parallel programming
 

Kürzlich hochgeladen

СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
Хроники кибер-безопасника
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
Хроники кибер-безопасника
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
Хроники кибер-безопасника
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Ирония безопасности
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
Ирония безопасности
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
Хроники кибер-безопасника
 

Kürzlich hochgeladen (9)

СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdfСИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
СИСТЕМА ОЦЕНКИ УЯЗВИМОСТЕЙ CVSS 4.0 / CVSS v4.0 [RU].pdf
 
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdfMalware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
Malware. DCRAT (DARK CRYSTAL RAT) [RU].pdf
 
Cyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdfCyberprint. Dark Pink Apt Group [RU].pdf
Cyberprint. Dark Pink Apt Group [RU].pdf
 
2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf2023 Q4. The Ransomware report. [RU].pdf
2023 Q4. The Ransomware report. [RU].pdf
 
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
Cyber Defense Doctrine Managing the Risk Full Applied Guide to Organizational...
 
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
ИСТОЧНИКИ ИННОВАЦИОННОСТИ КИТАЯ (ПО ВЕРСИИ DGAP) | The Sources of China’s Inn...
 
MS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdfMS Navigating Incident Response [RU].pdf
MS Navigating Incident Response [RU].pdf
 
CVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdfCVE. The Fortra's GoAnywhere MFT [RU].pdf
CVE. The Fortra's GoAnywhere MFT [RU].pdf
 
Ransomware_Q3 2023. The report [RU].pdf
Ransomware_Q3 2023.  The report [RU].pdfRansomware_Q3 2023.  The report [RU].pdf
Ransomware_Q3 2023. The report [RU].pdf
 

Gwt jug basic

  • 1. Google Web Toolkit Введение в средство разработки пользовательского WEB интерфейса Anton Antonov anton.antonov@sigmaukraine.com 2011
  • 2. Содержание Трудности GWT решение Как работает GWT? Возможности GWT Паттерны и библиотеки
  • 4. GWT решение Дружественная для разработчиков – Совместимость с IDE, отладка, рефакторинг, строгая типизация… Не зависит от реализации и платформы сервера – Java (Tomcat, Jboss, и т.д.) – PHP/CGI (Apache) – .Net (IIS)
  • 5. GWT: основной принцип Пишем код на Java Компилируем Java код в JavaScript JavaScript выполняется в браузере
  • 6. GWT: HelloWorld public class HelloWorld implements EntryPoint { public void onModuleLoad() { RootPanel panel = RootPanel.get(); Label message = new Label("Hello World!!!"); panel.add(message); Button button = new Button("Click ME"); panel.add(button); button.addClickHandler(new ClickHandler() { public void onClick(ClickEvent event) { Window.alert("Hello World!"); } }); } }
  • 7. Более полезные приложения Google Wave – https://wave.google.com Google AdWords – https://adwords.google.com А так же много других – http://gwtgallery.appspot.com
  • 10. Поддержка истории (back button) Одностраничный интерфейс с поддержкой истории GWT ShowCase - как пример History.addValueChangeHandler(new ValueChangeHandler<String>() { public void onValueChange(ValueChangeEvent<String> stringValueChangeEvent) { //do something on history change } });
  • 11. Декларативный интерфейс (UiBinder) Разделение Вида от Поведения XML вместо Java кода Шаблонизация виджетов и их взаимного расположения Интеграция с внешними ресурсами (CSS, картинки)
  • 12. AJAX: RPC это просто private void getData() { DataServiceAsync rpc = (DataServiceAsync) GWT.create(DataService.class); rpc.getDataModel(5, 6, new AsyncCallback<DataModel>() { public void onFailure(Throwable throwable) { Window.alert("Unable get data from server" + throwable); } public void onSuccess(DataModel dataModel) { Window.alert("Server response:n" + dataModel.getDataString() + dataModel.getDataInt()); } }); }
  • 13. Сериализуемые типы java.io.Serializable совместимая* – Наследник java.io.Serializable – Конструктор без аргументов (или без конструктора) любой видимости – Все non-final и non-transient поля должны быть сериализуемы
  • 14. Мост из Java в JavaScript (JSNI) Возможность вызова JS методов из GWT Java кода private native void someJSFunction(Date value) /*-{ $wnd.someJSFunction(value); }-*/; Возможность вызова GWT методов из JS кода – Код на следующем слайде Существует множество обверток над существующими JS библиотеками (Google Charts, JQuery и т.д.) Можно легко писать свои обвертки
  • 15. JavaScript Overlay типы private native void registerGWTFunction() /*-{ var _this = this; $wnd.registeredGWTFunction = function (v) { _this.@com.sigmaukraine.jug.jsni.client.JSNI ::jsAccessibleFunction (Lcom/sigmaukraine/jug/jsni/client/overlay/JSOverlay;) (v); }; }-*/; private void jsAccessibleFunction(JSOverlay overlay) { Window.alert("I'm GWT:nstr:" + overlay.getStr() + "nvalue:" + overlay.getValue()); }
  • 16.
  • 18. Cross-browser поддержка Скомпилированный JavaScript оптимизирован Только необходимое API грузится браузером (пермутация) – IE грузит JS только для IE, FireFox – JS только для FF – Неиспользуемое API исключается из скомпилированного JS
  • 19. Сборка ресурсов 1 запрос вместо 12 ClientBundle – CSSResource – ImageResource – TextResource – И т.д. (http://code.google.com/webtoolkit/doc/latest/DevGuideClientBundle.html#ClientBundle )
  • 20. Разделение кода Отдельные части большого приложения загружаются по требованию GWT.runAsync(new RunAsyncCallback() { public void onFailure(Throwable reason) { Window.alert("Can't load script part"); } public void onSuccess() { //The following code will be loaded on demand root.add(new HelloWorldPanel(textCell.getValue())); } });
  • 21.
  • 23. Отладка скомпилированного JS Это возможно! Достаточно изменить один параметр компилятора – -style pretty Зачастую в этом нет необходимости* – * это пока единственный способ отладки JSNI методов
  • 24. JUnit тестирование Возможность тестирование не «родного» кода непосредственно с помощью JUnit GWTTestCase в противном случае – Позволяет тестировать логику виджетов, которые используют DOM модель, DeferredBinding или JSNI. Интеграция с IDE
  • 25.
  • 26. MVP (GWT pattern) Model – Модель данных, бизнес модель View – Отображение данных (UiBinder widget, GWT plain widget, etc.) Presenter – Поведение или логика
  • 27. Activities & Places (GWT pattern) Место (Place) – Состояние UI конвертируемое в/из URL hash (#...) Активность (Activity) – Инкапсуляция действия пользователя • Wake up • Set up • Show up – Обычно приводит к смене «места»
  • 28. GWT паттерны и библиотеки MVP (Model View Presenter) GWT-Platform – http://code.google.com/webtoolkit/articles/mvp-architecture.html – http://code.google.com/p/gwt-platform/ Activities & Places – http://code.google.com/webtoolkit/doc/latest/DevGuideMvpActivitiesAndPlaces.html Gin (Dependency injection for GWT, based on Guice) – http://code.google.com/p/google-gin/ Spring MVC RPC integration (gwt-widget SL) – http://gwt-widget.sourceforge.net/gwt-sl/reference-1.0/index.html
  • 29. Q&A