# Google Web Toolkit

GWT o Google Web Toolkit es un framework creado por Google que permite ocultar la complejidad de varios aspectos de la tecnología AJAX. Es compatible con varios navegadores, lo cual es notorio ya que cada navegador suele necesitar código específico para lograr un front-end correcto en una aplicación web. El concepto de Google Web Toolkit es bastante sencillo, básicamente lo que se debe hacer es crear el código en Java usando cualquier IDE de Java y el compilador lo traducirá a HTML y JavaScript.

## Historia

Google anunció la biblioteca GWT en la conferencia JavaOne de 2006 y lanzó la versión 1.0 RC 1 (build 1.0.20) el 16 de mayo de 2006.

### Historial de lanzamientos

* GWT 1.0 - 17 de mayo de 2006
* GWT 1.1 - 11 de agosto de 2006
* GWT 1.2 - 16 de noviembre de 2006
* GWT 1.3 - 5 de febrero de 2007
* GWT 1.4 - 28 de agosto de 2007
* GWT 1.5 - 27 de agosto de 2008
* GWT 1.6 - 7 de abril de 2009
* GWT 1.7 - 13 de julio de 2009
* GWT 2.0 - 8 de diciembre de 2009
* GWT 2.0.1 - 8 de diciembre de 2009
* GWT 2.0.2 - 2 de febrero de 2010
* GWT 2.0.3 - 12 de febrero de 2010
* GWT 2.0.4 - 2 de julio de 2010
* GWT 2.1.0 - 19 de octubre de 2010
* GWT 2.1.1 - 16 de diciembre de 2010
* GWT 2.2.0 - 11 de febrero de 2011
* GWT 2.3.0 - 3 de mayo de 2011
* GWT 2.4.0 - 8 de septiembre de 2011
* GWT 2.5.0 - 27 de junio de 2012
* GWT 2.5.1 - 15 de enero de 2013
* GWT 2.6.0 - 30 de enero de 2014
* GWT 2.6.1 - 10 de mayo de 2014
* GWT 2.7.0 - 20 de noviembre de 2014
* GWT 2.8.0 - 20 de octubre de 2016
* GWT 2.8.1 - 24 de abril de 2017
* GWT 2.8.2 - 19 de octubre de 2017
* GWT 2.9.0 - 13 de mayo de 2020 actual

## Desarrollo

Con la biblioteca GWT, los desarrolladores pueden crear y depurar aplicaciones AJAX en lenguaje JAVA usando el entorno de desarrollo que prefieran. Cuando una aplicación es desplegada, el compilador GWT traduce la aplicación Java a un archivo Javascript, que puede ser ofuscado para optimizar el rendimiento.
GWT no es sólo una interfaz de programación; proporciona un conjunto de herramientas que permiten desarrollar funcionalidades Javascript de alto rendimiento en el navegador del cliente.
Una aplicación GWT puede ser ejecutada en dos modos:
* Modo desarrollo (Dev mode): La aplicación se ejecuta como código bytecode de Java dentro de la Máquina Virtual de Java (JVM). Este modo es el más usado para desarrollo, soportando el cambio de código en caliente y el depurado.
* Modo web (Web mode): La aplicación se ejecuta como código Javascript y HTML puro, compilado a partir del código Java. Este modo se suele usar para el despliegue de la aplicación.
La utilidad de línea de comandos applicationCreator genera automáticamente todos los archivos necesarios para iniciar un proyecto GWT, incluso permite crear un proyecto para Eclipse.
Existen varios plugins de código abierto para ayudar a desarrollar en diferentes entornos de desarrollo, como GWT4NB para NetBeans, Cypal Studio for GWT para Eclipse o gwtDeveloper para JDeveloper.

## Arquitectura GWT

GWT contiene los siguientes componentes:
* GWT Java-to-JavaScript Compiler: la función de este componente es traducir el código desarrollado en Java al lenguaje JavaScript. Lo empleamos cuando usamos al GWT en modo web.
* Hosted Web Browser: este componente ejecuta la aplicación Java sin traducirla a JavaScript, en modo host usando la máquina virtual de Java.
* JRE Emulation Library: contiene las bibliotecas más importantes de las clases de Java: java.lang en donde se encuentran las clases fundamentales para poder programar en Java y un subconjunto de las clases del paquete java.util. Java.lang incluye, entre otras, la clase java.lang.object que es la clase fundamental de la que heredan o extienden todas las clases en Java. El resto de los paquetes no están soportados por GWT.
* GWT Web UI Class Library: contiene un conjunto de elementos de interfaz de usuario que permite la creación de objetos tales como textos, cajas de texto, imágenes y botones.

## Características

* Componentes gráficos dinámicos y reusables: los programadores pueden usar clases prediseñadas para implementar comportamientos que de otra manera consumirían mucho tiempo, como arrastrar y soltar o menús en árbol.
* Simple mecanismo RPC.
* Gestión del historial del navegador web.
* Soporte para depurado de Java.
* Control de diferentes características del navegador.
* Integración con JUnit.
* Internacionalización.
* Los desarrolladores pueden mezclar código escrito en Javascript dentro del código Java usando la Interfaz Nativa Javascript (JSNI).
* Soporte para las API´s de Google (inicialmente, soporte para Google Gears).
* Es de código abierto.
* Los desarrolladores pueden diseñar y desarrollar sus aplicaciones orientadas a objetos. Errores comunes en Javascript, como la discrepancia de tipos de datos, son controlados en tiempo de compilación.
* El código Javascript generado puede ser ofuscado para optimizar el rendimiento.
* Existen un numeroso conjunto de bibliotecas desarrolladas por Google y terceros que amplían las funcionalidades de GWT.

## Complementos disponibles

Desde la versión 1.4 (agosto del 2007), GWT ofrece varios complementos:
* Elementos HTML nativos, como botones, radio buttons, checkbox, cajas de texto, etc.
* PushButton, ToggleButton.
* Barra de menús
* Menú en árbol.
* Pestañas.