Try English version of Quizful



Раздаем бесплатные Q! подробности в группе Quizful.Alpha-test
Партнеры
Рекрутерам: Прескрининг кандидатов about
Топ контрибуторов
loading
loading
Знаете ли Вы, что

В разделе "Статьи" можно найти обучающие статьи по информационным технологиям, а также узнать о новостях сервиса Quizful.

Лента обновлений
ссылка 20:57:36
Комментарий от Recrut_rf:
Спасибо, сохранил функцию, может пригодится когда - ни...
ссылка 20:53:59
Добавлен вопрос в тест ASP.NET - Основы
ссылка 08:41:09
Комментарий от Krosster:
Гарний сайт для новачків. Правда деякі питання підступн...
ссылка Apr 22 22:06
Добавлен вопрос в тест SQL - Средний уровень
ссылка Apr 22 10:13
Комментарий от Entrery:
вроде выбрал ООП в сишарпе, а тут вопросы по джаве...
Статистика

Тестов: 153, вопросов: 8596. Пройдено: 402471 / 1961092.

Введение в GWT

head tail Статья
категория
Java
дата17.07.2009
авторPavlushka_EKT
голосов24

[Disclaimer: Данная статья была переведена в рамках "Конкурса на лучший перевод статьи" на сервисе Quizful. Ссылка на оригинал находится внизу страницы.]

Что такое GWT?

Написание веб-приложений с использованием технологии AJAX (Асинхронный JavaScript и XML) для браузеров может оказаться очень утомительным занятием, которое требует глубокого знания как JavaScript, так и множества несоответствий различных браузеров. Google Web Toolkit (GWT) это Фреймворк с открытым исходным кодом, который позволяет Java разработчикам легко разрабатывать веб-приложения на AJAX без углубленного изучения JavaScript и браузерной разработки.

GWT предоставляет разработчику специальное Java API и позволяет разрабатывать компонентно-ориентированные графические пользовательские интерфейсы (GUI), избегая работы с JavaScript и абстрагируясь от протокола HTTP и DOM моделей, лежащих в основе браузеров. Все это достигается использованием GWT компилятора, который не генерирует Java байт-код, точнее он генерирует JavaScript! GWT компилятор берет клиентский Java код и генерирует JavaScript. Скомпилированное GWT приложение состоит из фрагментов HTML, XML и JavaScript. Если вы хотите, чтобы ваше веб-приложение соединялось с веб-сервером, GWT и здесь вам поможет. В арсенале GWT есть Remote Procedure Call (RPC) – механизм удаленного вызова процедур, который осуществляет простой обмен Java-объектами между клиентом и сервером в обе стороны.

GWT также позволяет разработчикам эффективно тестировать и отлаживать приложения без необходимости преобразования приложений в JavaScript и развертывания их на веб-сервере. GWT позволяет приложениям быть запущена в так называемом "Хостинг режиме"(“Hosted Mode”). В "Хостинг режиме" JVM исполняет код вашего GWT приложения в виде Java байт-кода внутри встроенного браузера. Запуск GWT приложений в "Хостинг режиме" делает отладку вашего GWT приложения очень простой. После того, как Вы проверили ваши GWT приложений в "Хостинг режиме", вы можете скомпилировать исходный код Java в JavaScript и развернуть ваше приложение. GWT приложения, которые были развернуты, называются запущенными в "Веб-режиме"(“Web Mode”).

Итак, короче говоря, вы пишите клиентскую и серверную части своего приложения на Java, и тогда GWT компилятор превратит ваши клиентские Java классы в совместимые с браузером JavaScript и HTML. После чего вы можете развернуть эти JavaScript и HTML на ваших веб-серверах, так что конечные пользователи будут видеть только веб-версию вашего приложения, в то время как классы серверной стороны могут быть развернуты на Tomcat или на любом сервлет-контейнере по вашему выбору.

Справочные материалы

Для получения дополнительной информации о GWT, получения ресурсов, инструментов, библиотек, которые вы можете использовать в ваших проектах, посетите Неофициальную страницу Google Wiki посвещенную GWT. На ней содержится список плагинов, которые доступны для различных IDE, присутствуют множество виджетов / GWT компонентов, которые можно использовать в ваших проектах. Страница также содержит ссылки на такие проекты, как MyGWT и GWT-EXT, которые позволяют произвести интеграцию с EXT JavaScript библиотеками. Вы можете также найти ссылки на библиотеку журналов GWT (GWT log library), drag-and-drop библиотеку (drag and drop library) и музыкальную библиотеку GWT (GWT sound library).

Чтобы узнать больше о GWT, рекомендем читать следующие хорошие книги - GWT Solutions, GWT Applications, AJAX Security.

Однажды познакомившись с GWT после прочтения этого руководства, мы долго изучали эту технологию. Теперь у нас есть множество материала, который покажет вам, как использовать GWT в реальном мире на сайте developerlife.com. Мы охватили такие темы, как разработка модулей, развертывание сценариев, используя RPC сессии, поддержка истории / гиперссылок и многое другое. У нас также имеются учебники и для других технологий, например, XML - SAX, DOM, Использование Java для обработки XML, доступ к базам данных с использованием XML, парсинг XML из веб-служб и т.д. Кроме этого у нас есть уроки по использованию Swing в графическом программировании, по многопоточности в Java, по SOA, по JavaME/J2ME.

GWT Primer – вещи, которые необходимо знать перед началом работы

Поддержка браузеров GWT

По состоянию на GWT версии 1.4, GWT поддерживае следующие браузеры:

  • Firefox 1.0, 1.5, 2.0
  • Internet Explorer 6, 7
  • Safari 2.0
  • Opera 9.0

GWT Компилятор

В GWT компилятор преобразует исходный код Java в JavaScript. В GWT компилятор поддерживает большую часть возможностей языка Java и эмулирует их в Java Runtime Library.

Языковая поддержка

По состоянию на GWT версии 1.4, GWT компилятор может компилировать исходный код, совместимый с J2SE 1.4.2 или старше.

GWT компилятор:

  • поддерживает все внутренне типы данных (byte, char, short, int, float, double, Object, String) и массивы. Имейте в виду, что, поскольку в JavaScript нет поддержки 64-битного интегрального типа, Java переменные такого типа преобразуются на JavaScript в значения двойной точности с плавающей точкой. Используйте переменные типа int, когда это возможно.
  • поддерживает Java обработчики исключений. try, catch, finally и определенные пользователем исключения. Throwable.getStackTrace() поддерживается только в "Хостинг режиме".
  • разбирает Java assert statements, но не генерирует JavaScript код для них
  • не поддерживает Reflection или динамическую загрузку классов.
  • не поддерживает финализацию объекта в ходе сбора мусора
  • не поддерживает Strict Floating Point (ключевое слово strictfp) и не может обеспечить какой-либо конкретной степени точности для операций с плавающей запятой.
  • не поддерживает Java сериализацию

Эмуляция Библиотек времени выполнения (Runtime Library Emulation)

GWT предоставляет библиотеку эмулирующую JRE. Эта библиотека НЕ эмулирует все J2SE и J2EE классы. GWT эмулятор JRE поддерживает только некоторые классы из java.lang и java.util пакетов. Узнать, какие классы поддерживаются, можно в JRE Emulation Reference Manual.

Регулярные выражения Java не полностью поддерживается в GWT. Если вы собираетесь использовать регулярные выражения в GWT приложениях, нужно, чтобы вы использовали только тот синтаксис Java регулярных выражений, который используется в JavaScript.

GWT эмулятор JRE не поддерживает Java сериализации. Ему в замен, однако, в GWT имеется RPC средства, которые обеспечивают автоматическую сериализацию объектов. Эти RPC средства позволяют коду на стороне клиента создать удаленный метод для передачи сериализованных объектов в качестве параметров.

Клиентский код

GWT веб-приложения состоят из двух отдельных частей. Часть вашего приложения, которое отправляется по сети к пользователю, где оно работает, как JavaScript внутри веб-браузера, называется клиентской код. При написании клиентского кода важно иметь в виду, что этот код будет в конечном итоге превращаться в JavaScript. Поэтому убедитесь, что используете библиотеки и языковыхе конструкции, которые могут быть переведены на javascript.

Серверный код

Часть вашего приложения, которое работает на сервере, называется серверный код. Вашему GWT приложению, для взаимодействия с сервером, возможно, потребуется, например, загрузить или сохранить часть данных. Для того чтобы сделать это, приложение делает запрос к клиентскому коду (в браузере) с RPC механизма GWT. Пока обрабатывается RPC запрос, серверный код начинает выполняться выполняется. В GWT, компиляция клиентского кода не зависит от серверного кода. Как результат, на стороне сервера код не имеет каких-либо ограничений, которые налагаются на стороне клиента. В результате ваш серверный код не имеет, каких либо ограничений которые налогаются на клиентскую часть и следовательно вы свободны в выборе технологии кото he. Вы будете использовать в вашем серверном коде.

Отложенное связывание (Deferred Binding)

Отложенное связывание является одним из ключевых элементов. Оно позволяет GWT производить хорошо оптимизированный код JavaScript. Как вы видели ранее, GWT компилятор не поддерживает Java Reflection или динамическую загрузку классов (также называемую динамическим связыванием). Это происходит потому, что JavaScript среда, в которой GWT приложение будет запущенно, не поддерживает его. Ввиду невозможности динамичного связывания в GWT, вместо него используется так называемые отложенное связывание (deffered binding). Отложенное связывание похоже на динамическую загрузку классов. В то время как динамическая загрузка класса происходит во время выполнения, отложенное связывание происходит во время компиляции.

Когда GWT компилятор компилирует ваш клиентский код, он определяет различные "особенности браузера", которые должен поддерживать, и генерирует оптимизированный вариант приложения для каждой конкретной конфигурации. Поэтому через некоторое время у вас будут самые различные версии вашего приложения для каждого из поддерживаемых браузеров. Но отложенное связывание это нечто большее, чем просто мультибраузерная поддержка.

Хороший пример того, где отложенное связывание может быть полезным является мульти-языковая поддержка. GWT Компилятор использует отложенное связывание для создания совершенно разных версий вашего приложения для каждого языка. Таким образом, если GWT поддерживает 4-браузера, и вы напишите ваше приложение на 4 языках, GWT будет генерировать 16 различных подстановок вашего приложения во время компиляции. Во время запуска и выполнения, GWT выбирает подходящую версию вашего приложения и показывает его пользователю.

GWT загрузка (Bootstrapping)

Ниже приведен обзор процедуры загрузки для GWT приложений:

  1. Браузер загружает и обрабатывает HTML хост-страницу.
  2. Когда браузер доходит до метки <script src=”<Module Name>.nocache.js”> в хост-странице, JavaScript код загружается и исполняется.
  3. Файл .nocache.js содержит JavaScript код, который выбирает конфигурацию отложенного связывания (например, определение браузера, языка страницы и т.д.). Браузер использует таблицы поиска, сгенерированных в GWT компиляторе, чтобы определить, какой из .cache.html файлов использовать.
  4. затем JavaScript код в .nocache.js создает скрытый <iframe>, вставляет его в DOM хост-страницы и загружает файл .cache.html в этот iframe.
  5. после того, как .cache.html файл загружен, фактически начинает выполняться логика GWT программы.

Результат работы GWT Компилятора

GWT компилятор создает серию нескольких файлов. По состоянию на GWT версии 1.4, вы должны видеть, как правило, следующие типы файлов:

  • <Module Name>.nocache.js (или <Module Name>-xs.nocache.js для включения скриптов с других сайтов)
  • <Alphanumeric>.cache.html
  • <Alphanumeric>.gwt.rpc

.no-cache.js File

В файле "nocache.js" происходит отложенное связывание. Перед запуском GWT приложения любой динамически связанный код должен быть обработан. Обработка может включать в себя выбор специфической версии классов для различных браузеров, строк выбранного пользователем языка, и т.д. Файл "nocache.js" содержит таблицы поиска с метками для выбора Cache.html файлов-подстановок. Например, записи в таблице поиска: "Firefox на немецком языке", и "Сафари на Английском" будет указывать на разные. cache.html файлы.

Файл называется ".nocache.js", чтобы указать, что он никогда не должен кэшироваться, т.е. он должен загружается и выполняется каждый раз вновь, когда браузер открывает ваше GWT приложение. Этот файл должен повторно загружаются каждый раз потому, что GWT компилятор заново генерирует его каждый раз, но в рамках того же имени файла. Если разрешить браузеру кэширование файла то в результате браузер не будет скачивать последнюю версию файла каждый раз, даже если ваше приложение прекомпилированно.

Файлы .cache.html

Эти файлы, на самом деле содержат логику вашего GWT приложения. Файл .cache.html содержит код JavaScript, завернутый в тонкую оболочку HTML. GWT компилятор не выдает простые JavaScript (.js) файлы, поскольку некоторые браузеры, при определенных обстоятельствах, не правильно обрабатывать сжатие JavaScript-файла. Обертка JavaScript в HTML-файл решает эти проблемы.

Для каждого .сache.html файла в качестве имени используется MD5-hash от его содержимого. Это гарантирует отсутствие детерминированного поведения GWT компилятором. Если вы перекомпилировали ваше приложение без изменения кода, выходной JavaScript код не меняется, и поэтому сумма MD5 (и имена файлов) не изменится. Если вы измените исходный код, то полученный JavaScript код будет изменен, и поэтому сумма MD5 (и имена файлов) будут меняться. Так как эти файлы всегда будут иметь уникальные имена, нет никакой опасности в кэшировании их браузером, отсюда и название "cache.html".

Файл .gwt.rpc

По состоянию на GWT версии 1.4, типы, которые реализуют интерфейс java.io.Serializable теперь также подлежат сериализации через RPC, но только если они включены в файл .gwt.rpc генерируемый GWT компилятором. Файл .gwt.rpc задает политику сереализации и указывает, какие типы могут быть сериализированы.

HTML хост - страницы

Теперь, когда вы знаете, что GWT компилятор производит на выходе, вы наверное удивляетесь, каким же образом это может быть отображено в веб-браузере. А сделать это можно с помощью "Хост -страницы". Любой HTML файл с соответствующим набором тегов может быть использован для отображения GWT приложений.

Вот пример HTML хост-станицы:

   1: <html>
2: <head>
3:
4: <!-- Свойства, указанные в мета-теге используются для выбора отложенного связывания -->
5: <meta name='gwt:property' content='locale=en_US'>
6:
7: <!-- Страницы стилей необязательны -->
8: <link rel="stylesheet" href="ExampleApp.css">
9:
10: <!-- Заголовки необязательны -->
11: <title>Example Application</title>
12:
13: </head>
14: <body>
15:
16: <!-- Полностью определенное имя модуля, а затем 'nocache.js' -->
17: <script language="javascript" src="com.developerlife.example.ExampleApp.nocache.js"></script>
18:
19: <!-- Необходимо включить IFRAME в историю, если вы хотите включить полную поддержку GWT истории -->
20: <!-- IFRAME ID должно быть именно таким, как показано -->
21: <iframe src="javascript:''" id="__gwt_historyFrame" style="width:0;height:0;border:0"></iframe>
22:
23: </body>
24: </html>

----------
Статью перевел Бажин Павел (pavlushka_ekt [at] in [dot] com)
Оригинальный текст статьи: GWT Tutorial

Если Вам понравилась статья, проголосуйте за нее

Голосов: 24  loading...
googperson   googman   googler   admin   rubynovich   benvolio   mismatch   DrRu   yohan   Pavlushka_EKT   oleger   windwail   uniservise   silicon   helpa   elvisjagger   andrey_z91h   kato_kun   AlexTheLost   izakacman   SamTan   dimaatkaev   livelie   dmitryfromhell1