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 режим позволяет выполнять отладку быстро и легко.
GWT компилятор поддерживает:- все внутренние типы данных и массивы
- обработку исключений(try, catch, finally и пользовательские исключения)
- обрабатывает ключевое слово assert, но не генерирует код для них
- Reflection или динамическую загрузку классов
- финализацию объекта в ходе сбора мусора
- Strict Floating Point (ключевое слово sctricfp)
- Java сериализацию
GWT приложение состоит из клиентской и серверной части. Важно помнить, что клиентский код будет преобразован в JavaScript, поэтому следует проверять используемые библиотеки и языковые конструкции. Компиляция клиентского кода не зависит от серверного кода. Серверная часть не имеет ограничений, в отличии от клиентской части. Следовательно выбор технологий используемых на сервере зависит только от вас.
Что такое Deffered Binding(отложенное связывание)?
В процессе компиляции клиентского кода GWT компилятор определяет различные особенности браузера, которые должен поддерживать, и генерирует оптимизированный вариант для каждой конкретной конфигурации. Например, если GWT-приложение поддерживает 3 браузера и 3 языка, то будет сгенерировано 9 реализаций приложения во время компиляции. Во время запуска GWT выбирает подходящую версию приложения.
Как происходит загрузка GWT приложений?
Сначала браузер загружает и обрабатывает HTML хост-страницу. Когда браузер доходит до след.строчки:
<script type="text/javascript" language="javascript" src="gwtapp.nocache.js" ></script>
загружается и исполняется JavaScript код. Файл gwtapp.nocache.js содержит JavaScript код, который выбирает подходящую конфигурацию. GWT компилятор генерирует таблицы поиска, которые браузер использует для определения какой из *.cache.js файлов нужно использовать. Далее JavaScript код в .nocache.js создает скрытый iframe, вставляет его в DOM хост-страницы загружает в созданный iframe файл .cache.html. После загрузки .cache.html начинается выполняться логика GWT приложения.
Давайте разберемся что же это за файлы *.nocache.js и <MD5-hash>.nocache.html.
<html>
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8">
<link type="text/css" rel="stylesheet" href="Mvp4gApp.css">
<title>Mvp4g GWT Application</title>
<script type="text/javascript" language="javascript" src="mvp4gapp/mvp4gapp.nocache.js" ></script>
</head>
<body>
<!-- OPTIONAL: include this if you want history support -->
<iframe src="javascript:''" id="__gwt_historyFrame" tabIndex='-1' style="position:absolute;width:0;height:0;border:0"></iframe>
<!-- RECOMMENDED if your web app will not function without JavaScript enabled -->
<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>
<h1 align="center">Mvp4g GWT Application</h1>
</body>
</html>
* This source code was highlighted with Source Code Highlighter.
Отлично!
ОтветитьУдалитьЕдинственное, Deferred Binding по-моему вполне можно считать динамической подгрузкой классов: кроме проверки юзер-агента можно реагировать на другие различные условия. И Code Splitting туда же: динамическая подгрузка не классов, но блоков кода.