Desde os primórdios do desenvolvimento web, desenvolvedores procuram ferramentas que possam lhe ajudar a desenvolver aplicações com mais eficiência e flexibilidade. Por causa dessa necessidade, acabaram surgindo tecnologias como CGI, PHP, ASP. Após algum tempo, surgiram novas tecnologias como o Java Servlet e o Java Server Pages (JSP) que utilizam conceitos importantes, como a separação de “interesses”.
A separação de interesses consiste em separar a aplicação em camadas, criando uma camada contendo os objetos de negócio, uma camada responsável pela interface com o usuário e uma camada que controla o fluxo da aplicação. O MVC é uma estratégia de separação de interesses.
A partir desse conceito nascem diversos frameworks. Alguns ficaram muito famosos como é o caso do Tapestry, Spring MVC e WebWork. Esse artigo fornece um guia detalhado sobre como construir aplicações web em Java utilizando o framework WebWork.
O Framework WebWork
O WebWork é um poderoso framework MVC para desenvolvimento de aplicações web em Java. O WebWork é baseado em outro framework chamado XWork. A Nota 1 fornece maiores informações sobre o XWork.
Nota 1. Conhecendo o XWork
O XWork é um framework open source que implementa o padrão de projeto Command (veja a Nota 2) e forma o núcleo do WebWork. O XWork pode ser utilizado tanto por aplicações web quanto por aplicações desktop.
A grande vantagem do WebWork ser derivado do XWork é poder ter o melhor dos dois frameworks, como o suporte a validação, conversão de tipos e outras funcionalidades do XWork; e o suporte a internacionalização, taglibs, temas, templates e muitas outras funcionalidades do WebWork.
Nota 2. Padrão de Projeto Command
O propósito do padrão de projeto Command é encapsular uma requisição como um objeto, permitindo que os clientes parametrizem diferentes requisições, filas ou fazer o registro de log de requisições e dar suporte a operações que podem ser desfeitas.
O WebWork foca na simplicidade e produtividade, oferecendo aos desenvolvedores as seguintes opções:
· Um flexível framework de validação que permite desacoplar regras de validação das ações;
· Conversão de tipos que lhe permite converter facilmente objetos de uma classe para outra;
· Uma poderosa linguagem de expressão baseada em OGNL (Object-Graph Navigation Language);
· Inversão de controle utilizando a integração com o framework Spring. A inversão de controle é uma estratégia onde as dependências são retiradas da classe que as contém. Ao invés da classe instanciar internamente cada objeto que necessita, ela recebe simplesmente as referências;
· Tags reutilizáveis que permitem o desenvolvimento usando Temas e Templates;
· Interceptors que fornecem várias funcionalidades, incluindo a prevenção de submissão múltipla de formulários;
· Internacionalização (i18n);
· Fácil integração com Hibernate (framework de mapeamento objeto-relacional), Spring (framework JEE ligthweight), SiteMesh (mecanismo de templates) e JSTL (biblioteca padrão de tags);
· Suporte a vários tipos de camada de apresentação, como JSP, e os mecanismos de templates Java: FreeMarker e Velocity;
· Suporte avançado a Ajax através de temas.
O WebWork é bastante comparado com outros frameworks famosos, como o Struts, JSF, Spring MVC e até frameworks não Java, como é o caso do Ruby on Rails. O concorrente direto do WebWork ainda é o Struts que é bastante utilizado, mas o Struts possui alguns sérios problemas que serão comparados com o WebWork a seguir.
Struts
? Prós
Há muito mercado para desenvolvedores Struts;
Enorme quantidade de informação e exemplos;
TagLib HTML com amplo suporte a renderização de componentes HTML;
? Contras
Struts força a programação para classes abstratas ao invés de interfaces;
Uma ação é difícil de ser testada e requer uma extensão do Junit, o StrutsTestCase;
O Struts utiliza a JSTL EL como linguagem de expressão enquanto o WebWork possui sua própria linguagem de expressão.
WebWork
? Prós
Arquitetura simples de entender e customizar;
TagLib fácil de customizar utilizando FreeMarker e Velocity;
Uma ação é muito fácil de ser testada com o JUnit, e a utilização do IoC (Inversion Of Control) facilita bastante o teste;
O WebWork utiliza uma poderosa linguagem de expressão chamada OGNL.
? Contras
Comunidade pequena e ainda em crescimento;
Pouca documentação comparada à documentação do Struts. Mas já existe um livro e bastantes documentos sobre a versão 2.2.2.
A partir de agora veremos inicialmente como instalar o WebWork e em seguida a sua utilização.
Instalando o WebWork
Como pré-requisito, precisamos de um container. Nesse artigo utilizaremos o TomCat para hospedar as aplicações. Faça o download do TomCat no seguinte endereço http://tomcat.apache.org/download-55.cgi.
Após isso, faça o download da versão 2.2.2 do WebWork no endereço http://www.opensymphony.com/webwork/download.action.
Para configurar o WebWork, descompacte o arquivo em uma pasta de sua preferência e copie o arquivo webwork-2.2.2.jar que fica na raiz da pasta e os arquivos da pasta lib/default para a pasta lib da sua aplicação.
Adicione o mapeamento descrito na Listagem 1 no arquivo web.xml, localizado na pasta WEB-INF.
Listagem 1. Configuração do arquivo web.xml
1. <filter>
2. <filter-name>webwork</filter-name>
3. <filter-class>com.opensymphony.webwork.dispatcher.FilterDispatcher</filter-class>
4. </filter>
5. <filter-mapping>
...