domingo, 5 de outubro de 2008

Struts, JSF, GWT, Qual o Melhor Framework Java para WEB?

Java é uma linguagem que tem diversos frameworks para desenvolvimento WEB, uns mais parecidos com outros, e alguns nem tanto. Como a ênfase do Java no mercado é WEB, isto tem motivado inclusive o surgimento de novas soluções nesta área.
Semana passada tive um debate com alguns colegas sobre arcabouços (frameworks) para desenvolvimento WEB em Java. De certa forma, ter muitas opções é bom, indica a riqueza de ferramentas disponíveis aos desenvolvedores, porém demanda mais cuidado na escolha da opção mais propícia. Vamos a uma análise comparativa simples de alguns dos frameworks mais comuns, que pode o ajudar na hora da decisão certeira e fundamental de seu projeto...

  • JSF (Java Server Faces): Este é original da Sun, que de início foi preterido porque não parecia funcionar tão bem, mas hoje é bem sólido e poderoso. Desenvolver em JSF tem se tornado trivial com a ajuda de ferramentas poderosas como o Netbeans, que agiliza muito o trabalho. Para sistemas de telas padronizadas e arquitetura baseada em CRUD, o JSF é o ideal: agiliza o desenvolvimento, simplifica e previne erros com o uso de JSTL, etc.
  • Apache Struts Framework: Durante muitos anos, esteve presente na maioria maciça de sistemas WEB em Java, junto com o Tiles, que se tornou um projeto independente a partir da versão 2.0 (o Tiles 2 pode ser integrado a JSF e a outros frameworks). É indicado para sistemas de páginas mais flexíveis. Também tem suas taglibs (que nunca foram exatamente muito boas) e suporta JSTL. É indicado para os sistemas onde o JSF não vai tão bem, com telas diferenciadas, muito complexas ou muito personalizadas.
  • Direct Web Remoting (DWR): Como você vê, tanto Struts quanto JSF são arcabouços tradicionais que supõem um cliente burro, passivo, e, embora não se oponham ao DHTML (manipulação de dados da página com Javascript), só conseguem falar com o servidor no recarregamento da página (refresh). Por padrão, não suportam AJAX. Mas não se preocupe: para isto existem pequenos frameworks como o DWR. O DWR implementa chamadas remotas via RPC, possibilitando que seu sistema faça AJAX muito comodamente. Integra bem com Struts e JSF. A partir da versão 2 permite, inclusive, o reverse AJAX: mecanismo pelo qual o Java no servidor controla o navegador através da publicação de scripts. Sem dúvida, a melhor saída para páginas dinâmicas ricas, em Web 2.0, que necessitam de muito AJAX.
  • Google Web Toolkit (GWT): O GWT recolucionou drasticamente o desenvolvimento WEB para Java. Desconstruiu toda a complexidade dos sistemas carregados em múltiplos frameworks, descritores XML, etc., e mergulhou profundamente em Web 2.0. Com o GWT, seu sistema só carrega uma vez a partir de um arquivo HTML. Não tem recarregamento de página. Todas as requisições ao servidor são RPC implementados via callback (AJAX). Não tem sequer arquivos JSP!! O segredo é que a programação é feita toda em Java, inclusive as telas e seus elementos, com direito a breakpoints e debug, e o motor do GWT, em tempo de compilação, transforma todo o Java relativo à tela em Javascript. É muito parecido com o Swing, onde o desenvolvedor compõe, em Java, a GUI do sistema, embora voltado para Web. É ideal para sistemas que exijam uma implementação visual sofisticada, muito AJAX e características de GUI, com elementos como árvores, abas, tabelas dinâmicas, DIVs móveis, Drag & Drop de componentes, exploração de CSS e estilo, etc.
  • Apache Wicket: Muito semelhante ao GWT, o Wicket tem a mesma filosofia: programe a sua GUI em Java e deixe que ele a converta para HTML. Não parece ser tão sofisticado quanto o GWT, mas tem a enorme vantagem de que a correspondência entre seus componentes e os objetos HTML DOM gerados é exata. Ou seja: enquanto, no GWT, os seus componentes normalmente geram em Javascript estruturas complexas de objetos DOM, no Wicket a correspondência é a mesma: um objeto de cá gera um de lá e pronto! Com isso, é possível que web designers e programadores Java trabalhem independentemente e com mais liberdade que com o GWT. Por outro lado, é uma alternativa ideal para sistemas mais simples que, entretanto, terão dificuldades ao sofisticar os componentes visuais, aos moldes do que o GWT oferece.
Conclusão: qual framework devo usar em meu projeto? Todos eles têm vantagens e desvantagens, mas cada um tem uma ênfase em certo aspecto. Não tenha preconceitos nem idéias megalomaníacas. A sua escolha deve ser baseada nas características do seu projeto: como ele é e o que faz. Certamente há uma melhor opção para você, que lhe facilitará a vida e alhiciará conforto e prazer ao encontrar na sua ferramenta exatamente as funcionalidades de que você precisa.

9 comentários:

Anônimo disse...

OlÁ... MUITO LEGAL ESSE POST...
MAS E A RESPEITO DOS OUTROS FRAMEWORKS COMO O MENTAWANI E VRAPTOR...
O QUE VC TEM A DIZER?
GOSTARIA DA SUA OPNIÃO

bminfo disse...

Bom dia.
Gostei da matéria, mas gostaria de sugerir o ZK (www.zkoss.org),que é excelente e utiliza a filosofia "Server-Centric". Já tenho alguns sistemas feitos com ele e, para quem quiser ver uma "pequena amostra", veja em http://bmonline.no-ip.info:8080/teste
[]'s
Francisco.

Unknown disse...
Este comentário foi removido pelo autor.
Anônimo disse...

O framework Java do qual mais gosto é o VRaptor, de longe.

Sérgio Berlotto Jr disse...

Muito Interessante mesmo ..
A diversidade deste4s frameworks é algo que mostra que esta tecnologia java tem muito para dar ... depois que entrei de fato neste mundo , gostei a aprendi a trabalhar com suas ferramentas...
Trabalho com Struts e Spring atualmente, mas estarei olhando também para o GWT que achei muito interessante...

A WEB 2.0 Exige muito pensamento e análise antes de se gerar uma simples tela de sistema, afim de trazermos agilidade e robustez aos clientes.

O Pajé disse...

Beleza, pessoal!!

É claro que existem vários frameworks que não citei, pois não queria que o artigo ficasse grande demais ou muito maçante. Como já foi citado, acredito muito no VRaptor. É um frameworks simples, ágil e poderoso. No entanto, não pode ser usado se você tem dependência de código legado que necessite rodar em Java 1.4 (porque o VRaptor usa anotações, que só existem a partir do Java 5).
Quanto ao ZK e o Mentawani, nunca os usei, mas sei que o ZK é bem direcionado para aplicativos AJAX e Web 2.0 (bom exemplo, bminfo). Lembra muito a filosofia do GWT.
Por falar nele, recomendo fortemente o GWT. Tenho utilizado com muito sucesso em diversos sistemas.
Fico feliz que o Java tenha vários frameworks diferentes, com idéias e filosofias diferentes. É na diversidade que encontramos a verdadeira riqueza!

GranKain disse...

Ola amigo, trabalho há 1 ano com JSF em um projeto e DWR em outro. O que posso dizer é "depende", qual sua experiência? Seu conhecimento com web, e com java?

O JSF pra quem não sabe nada é a melhor saída na minha opinião, se seu conhecimento for mais profundo, provavelmente você vai achar o JSF engessado e difícil de criar novos componentes. Neste caso eu sugeriria o GWT ou o DWR, sendo que o último é ideal se somado a um outro framework mais simples que você possa mexer no núcleo e criar componentes com mais facilidades (exemplo o schooter ou algum seu).

Meus proejetos usam um framework próprio mas que incluem o DWR pra ajax, lucene pra consultas textuais e indexes, itext pra pdf entre outros. E não troco ele por nada, já o JSF é ótimo pra estagiários mas é bem irritante de criar coisas novas e diferentes com rapidez.

Gran Kain disse...

somente pra completar. Se você não tem nada pronto mas entende bastante de web e java, vai direto pra GWT, acho que você não vai se arrepender ^^

Único defeito do GWT na minha opinião é que seus fontes são pouco semânticos, o que não é bom pra pessoas deficientes visuais e robôs mas nisto quase todos pecam.

O Pajé disse...

Olá Kain,

Já trabalhei com todas estas tecnologias e, não se preocupe, podemos dizer com segurança que tenho bastante experiência com web e Java.
De qualquer modo, este espaço é aberto a opiniões diversas e trocas de experiências. Então, suas opiniões são bem-vindas e, possivelmente, poderão ajudar algum visitante futuro a tomar suas decisões profissionais.