Google Web Toolkit
Google Web Toolkit (GWT)
O Google Web Toolkit ( GWT ) é um conjunto de ferramentas de software desenvolvido pelo Google para criar e manter aplicativos dinâmicos da web implementando JavaScript , usando linguagem e ferramentas Java . É um software gratuito distribuído sob os termos da licença Apache 2.0.
GWT enfatiza soluções eficientes e reutilizáveis para os problemas normalmente encontrados pelo desenvolvimento AJAX : dificuldade de depuração de JavaScript, gerenciamento de chamadas assíncronas, problemas de compatibilidade entre navegadores, gerenciamento de histórico e favoritos, etc.
Princípio
O GWT é construído em torno de um conceito original: durante a fase de desenvolvimento, a aplicação é escrita em Java da maneira clássica, em um ambiente de desenvolvimento integrado Java, e pode ser depurada com as ferramentas Java usuais. Uma vez que o aplicativo está pronto para ser implantado, o compilador GWT o traduz em puro JavaScript , com suporte automático e transparente para os principais navegadores ( Internet Explorer , Firefox , Chrome , Safari , Opera ). O código JavaScript gerado usa HTML dinâmico e técnicas de manipulação de Document Object Model (DOM) para os aspectos dinâmicos da interface.
Este princípio é possibilitado pelos diferentes componentes do GWT:
- o compilador Java para JavaScript
- um navegador especialmente modificado para permitir a execução (e depuração) de código Java nativo sem a necessidade de compilação de JavaScript
- uma biblioteca de emulação JRE: esta é uma implementação JavaScript de um subconjunto da biblioteca de classes Java padrão (em particular quase todo o pacote java.lang e parte de java.util)
- uma biblioteca de componentes gráficos contendo widgets básicos que permitem a construção de uma interface gráfica
O GWT é um framework que dá liberdade ao desenvolvedor ao não impor uma estrutura muito rígida; Como o próprio nome sugere, é uma caixa de ferramentas que oferece soluções que facilitam o desenvolvimento de soluções web / AJAX, aproveitando as ferramentas e habilidades Java existentes, e ignorando a complexidade normalmente associada a este tipo de tecnologia.
Folha técnica
- Componentes gráficos dinâmicos e reutilizáveis
- Mecanismo de chamada RPC simples
- Gerenciamento do histórico de navegação (botões anterior / seguinte do navegador)
- Capacidade de depurar o aplicativo com um depurador Java
- Gerenciamento transparente de diferenças comportamentais entre navegadores
- Integração com JUnit
-
Internacionalização simplificada
- Capacidade de integrar JavaScript diretamente no código-fonte usando uma técnica chamada JSNI (JavaScript Native Interface)
- Suporte para bibliotecas API do Google (incluindo Google Gears )
- Completamente Open Source
- O desenvolvimento é feito em Java puro, o que permite verificações de consistência de compilação (ao contrário do JavaScript que é interpretado), refatoração assistida, etc.
- Disponibilidade de muitas bibliotecas de terceiros que estendem a funcionalidade do GWT
Widgets disponíveis
Encontramos no GWT um conjunto de widgets para construir uma interface de usuário:
- Painéis
- Botões
- Caixas de seleção
- Tabelas / Grades
- Caixa de diálogo
- HTML primitivo (incluindo imagens e hiperlinks)
- Menus e barras de menu
- Janelas de rolagem
- Abas
- Arvores
Sempre que possível e viável, os widgets GWT usam o controle HTML nativo equivalente (por exemplo, Checkbox gera um elemento INPUT do tipo checkbox), mas também é possível construir widgets totalmente sintéticos.
Embora ofereça recursos mais avançados do que os componentes HTML, a biblioteca de widgets do GWT permanece espartana quando se trata de criar uma GUI avançada; é por isso que as bibliotecas de terceiros surgiram. Podemos citar:
Embora os wrappers de biblioteca JavaScript do GWT sejam frequentemente ricos em componentes, eles não seguem a filosofia do GWT de gerar código JavaScript inteiramente de Java.
Histórico de versão
Ambientes de desenvolvimento
Por design, o GWT é independente de qualquer IDE e pode ser integrado a qualquer. No entanto, existem plug-ins que facilitam o desenvolvimento de um aplicativo GWT:
-
GWT Designer é um plugin gratuito para Eclipse derivado do WindowsBuilder Pro, que oferece ferramentas de design gráfico.
-
gwtDeveloper é um editor WYSIWYG para JDeveloper.
-
O plug - in GWT Studio é um plug-in para IntelliJ IDEA que oferece suporte a aspectos de criação de artefatos específicos do GWT, verificações de validade ( inspetores ), refatoração, ações de inicialização, etc.
-
Cypal Studio é um plugin para Eclipse que oferece funcionalidade semelhante. Está limitado à versão 1.5 do GWT
-
GWT4NB é um plugin GWT para NetBeans .
Finalmente, ao mesmo tempo que o GWT 1.6, o Google lançou um plugin para Eclipse que integra os aspectos do GWT e do Google App Engine .
Vantagens e desvantagens
- No modo hospedado , o aplicativo é executado como bytecode Java, exatamente como um aplicativo normal; portanto, todas as possibilidades de depuração nativas do Java são utilizáveis.
- O uso do mecanismo RPC facilita a comunicação entre cliente e servidor, automatizando completamente a serialização de dados. No entanto, requer suporte específico do lado do servidor. No entanto, o acesso a todos os tipos de serviços é possível via HTTP, em particular Web Services usando SOAP e outros serviços de codificação de dados com JSON .
- O código Java pode ser compartilhado entre o cliente e o servidor, em particular para objetos que passam entre eles. No entanto, essa funcionalidade é limitada, pois o cliente só oferece suporte a um subconjunto limitado da API Java.
- O GWT permite limitar as trocas com o servidor à recepção e envio de dados empresariais. A lógica de negócios pode ser totalmente incorporada ao navegador do cliente. A capacidade de resposta da interface gráfica é assim aumentada e a largura de banda da rede preservada ... Mas o código às vezes é mais importante e o problema de segurança deve ser gerenciado com atenção.
- O código JavaScript gerado é grande, mas não requer a inclusão de bibliotecas externas. O código pode ser dividido em vários pacotes, cada um sendo baixado apenas quando necessário.
- O código JavaScript gerado é difícil de ler. No entanto, na mente dos projetistas do GWT, esse código não se destina a ser lido ou otimizado por um ser humano, mas apenas pelo navegador; de acordo com esse ponto de vista, pode-se considerar o JavaScript como o equivalente do que o assembler é para as linguagens de alto nível. Ainda existem opções para gerar códigos menos densos e mais legíveis, em detrimento do tamanho dos arquivos gerados e do desempenho.
- A fase de compilação do GWT é relativamente longa e cresce com o número de classes e o número de permutações (combinações de navegador + idioma). Isso se deve às muitas otimizações estáticas realizadas pelo compilador GWT. No entanto, é possível restringir o número de permutações geradas.
- O uso do GWT não deve esquecer os aspectos de segurança.
- O GWT faz parte dos frameworks RIA que oferecem uma implementação pelo menos parcial do ARIA permitindo enfrentar os problemas de acessibilidade de interfaces ricas .
- O GWT pode ser usado como a única tecnologia de cliente da web ou em conjunto.
Versão 2.0
O GWT versão 2.0 oferece vários novos recursos em comparação com as versões anteriores, incluindo:
- Modo de desenvolvimento no navegador (também chamado de modo hospedado fora do processo, OOPHM): antes da versão 2.0, o modo hospedado incluía uma versão modificada de um navegador para permitir a execução e depuração da versão bytecode do aplicativo durante o desenvolvimento. Com a versão 2.0, o modo hospedado, renomeado como "modo de desenvolvimento", permite o uso de qualquer navegador (compatível), por meio de um plugin. O plug-in se comunica com o shell do modo de desenvolvimento via TCP / IP, que permite a depuração cruzada (por exemplo, depurar um aplicativo no Internet Explorer no Windows a partir de um shell do modo de desenvolvimento em execução no Linux)
- Divisão de código: contando com a orientação do desenvolvedor no código-fonte, o compilador GWT é capaz de dividir o código JavaScript gerado em várias partes menores, em vez de um único bloco. Isso ajuda a reduzir o tempo de inicialização do aplicativo, reduzindo o tamanho do download inicial.
- Construção de interface declarativa: por meio de um formato XML, a nova funcionalidade chamada "UiBinder" oferece a possibilidade de criar interfaces de usuário de forma declarativa, em oposição à criação através de código Java. Isso permite uma separação clara da construção da interface e a implementação do comportamento dinâmico da mesma.
- Agrupamento de recursos: a interface ClientBundle permite o agrupamento transparente de recursos de todos os tipos (imagens, CSS, texto, binários) que serão transferidos juntos em uma única operação, reduzindo assim o número de viagens de ida e volta entre o cliente e o servidor, e no ao mesmo tempo reduzindo a latência.
Como o novo "modo de desenvolvimento" removeu a maior parte do código escrito especificamente para uma plataforma de destino, a nova versão será distribuída como um único arquivo (contra um por plataforma como era o caso com as versões anteriores).
Produtos concorrentes
Abordagem “estilo GWT” (o cliente é pré-gerado):
Abordagem RIA clássica (HTML e JavaScript gerados a partir do servidor):
Estruturas associadas
Notas e referências
-
" Versão 2.9.0 " ,2 de maio de 2020(acessado em 3 de maio de 2020 )
-
“ https://code.google.com/webtoolkit/versions.html ”
-
Aspectos de segurança
-
(in) Developer's Guide - Accessibility Support, Google Code e WAI-ARIA Implementation in JavaScript UI Libraries - atualizado, The Paciello Group Blog , Steve Faulkner, julho de 2009.
Apêndices
Artigos relacionados
links externos