Struts: Dominando Tiles e DynaForms – Parte 01

por Juliano D. Carniel

O Struts é um framework open-source hospedado no domínio Apache (antigo sub-projeto do Jakarta), utilizado para o desenvolvimento de aplicações web. Utiliza-se de tecnologias como XML, Java Servlets, JavaBeans e ResourceBundles e ainda alguns design patterns como o Model-View-Controller, ou simplesmente MVC, como é mais conhecido (ver Nota 1).

Nota 1. Model-View-Controller (MVC)

MVC é um padrão de projeto, ou uma solução já definida para um problema comumente encontrado no desenvolvimento de software. Este padrão de projeto separa o desenvolvimento de uma aplicação em três camadas, a saber:

·   Model: que define objetos de negócio que tratam da lógica e da integridade de dados;

·   View: define a parte que apresentará os dados, e unicamente isso, sem qualquer processamento de requisições ou ainda acesso a banco de dados. Em aplicações web são páginas JSP, Applets, Flash, etc.

·   Controller: controla basicamente o fluxo da aplicação, processando requisições e retornando para a camada de modelo ou de apresentação (view).

 

Esse framework não é considerado especificamente como uma tecnologia, mas sim um conjunto de tecnologias e conceitos que visam auxiliar o desenvolvedor em situações corriqueiras, que normalmente tomam muito tempo, e que são muito suscetíveis a erro. A principal vantagem em utilizá-lo se dá por ele, normalmente, facilitar o desenvolvimento segundo a velha regra 80/20, mais formalmente conhecida como “Princípio de Pareto” (Nota 2), ou seja, desenvolver os 80% da aplicação em apenas 20% do tempo normal.

 

Nota 2. Princípio de Pareto, ou Regra 80-20

Em 1906, o economista italiano Vilfredo Pareto criou uma fórmula matemática para descrever a desigualdade da distribuição de renda em seu país, observando que 80% da riqueza estava nas mãos de 20% da população. E isto ficou conhecido como o Princípio de Pareto, ou ainda Regra 80-20.

Hoje essa regra é muito facilmente percebida em todos os ramos e atividades, e não somente em economia. Existem vários exemplos perceptíveis que vivenciamos a cada projeto, como é o caso de:

·   somente 20% do software que é desenvolvido é utilizado 80% do tempo;

·   20% dos defeitos retratados em testes levam 80% do tempo para serem concertados;

·   20% do software leva cerca de 80% do tempo para ser desenvolvido.

 

O struts é muito conhecido e atualmente utilizado em larga escala pela comunidade de desenvolvimento. Portanto, é de extrema importância que profissionais, que atuem na área de desenvolvimento de sistema para web, tenham conhecimento de ao menos alguns conceitos básicos. Isso continua valendo apesar de já existirem outros frameworks com uma curva de aprendizado menor e outras características interessantes, como:

·               o WebWork  (www.opensymphony.com/webwork/) que está sendo adotado largamente agora e vale a pena conferir;

·               o VRaptor (www.vraptor.org), um projeto brasileiro;

·               o Java Server Faces (JSF) que é o padrão adotado pelo JCP (http://java.sun.com/j2ee/javaserverfaces/).

·               e alguns outros como Tapestry (http://jakarta.apache.org/tapestry/).

 

Entretanto, o struts possui uma larga usabilidade de mercado e ao longo dos anos tem se mostrado muito poderoso, além de ter sofrido uma contínua evolução visando sua melhoria.

Este tutorial destina-se àqueles desenvolvedores que já conhecem o struts, mas que ainda não conhecem as funcionalidades de Tiles e DynaForms. Portanto, os aspectos básicos do struts não serão explicados de forma detalhada.

Os Tiles e os DynaForms são de grande utilidade durante o desenvolvimento. Eles permitem uma economia de tempo devido à possibilidade de reutilização de código, diminuindo a quantidade de código a ser implementado. Os Tiles tornam possível definir templates referentes à parte gráfica do site. Esses templates oferecem as seguintes facilidades:

·               podem ser facilmente reutilizados;

·               permitem o isolamento do código (propriedade também conhecida como encapsulamento) possibilitando uma fácil manutenção;

·               o encapsulamento permite também que os membros da equipe de desenvolvimento (desenvolvedor e designer, por exemplo) possam trabalhar em paralelo e de forma independente.

 

Os DynaForms, que são nada mais que ActionForms definidos em XML, auxiliam tanto na diminuição do tempo de implementação como no tempo de manutenção, e ainda na fácil reutilização de código.

Essa matéria objetiva abordar essas duas características, descrevendo-as para que o leitor possa utilizá-las em seus projetos.

Tiles

A utilidade dos tiles pode ser claramente entendida por nós, desenvolvedores, quando lembramos das antigas abordagens utilizadas para se criar sites dinâmicos. Uma abordagem muito utilizada antes do surgimento dessas novas tecnologias consistia na definição de diversos arquivos que continham conteúdos específicos de cada parte do site. Para se criar o site bastava agregar as partes desejadas.

Um exemplo para explicar melhor seria a existência de um arquivo contendo o cabeçalho (header.jsp) de nossa aplicação, outro contendo o rodapé (footer.jsp) e outro contendo nosso menu (menu.jsp). Para publicar a página bastava criar uma tabela em HTML, e nas respectivas marcações TD’s colocávamos um include referente à página desejada, o que permitia uma rápida manutenção caso fosse necessário.

Usando essa abordagem, temos que repetir esse código arquivo por arquivo, gerando no final algo como o código da Listagem 1.

 

Listagem 1. Abordagem antiga para desenvolvimento de sites.

net-12-04-2008pic01.JPG

Agora digamos que depois de pronta a sua aplicação, o seu WebDesigner acorde em um dia, digamos “inspirado”, e resolve que o layout das páginas precisa ser mudado para outro que ele ache mais “bonitinho”. Seguindo o exemplo acima, ele agora deseja incluir um menu. Bom, o que nos restava era aquele serviço braçal de mudarmos arquivo por arquivo.

Chegamos agora no ponto chave da utilidade dos tiles, a divisão de atividades da “hierarquia” de páginas JSP. Os Tiles servem, basicamente, para a definição de templates da camada de View. Mais especificamente, eles nos permitem que páginas JSP possuam estrutura definida para melhorar a divisão de trabalho entre membros da equipe e para uma centralização de funcionalidades sem que seja preciso a duplicação de código, por exemplo, inserções do código de um Menu, ou de um Header em cada página que venhamos a desenvolver.

Utilizando essa abordagem, um trabalho em equipe pode ser desenvolvido de forma mais profissional. O desenvolvedor não precisa se preocupar se sua nova página de resultados de uma pesquisa em banco de dados, por exemplo, segue estritamente o layout definido pelo WebDesigner de sua equipe, ou se está implementando o menu da aplicação, ou se segue um layout semelhante às outras. Visto que toda a estrutura da aplicação já foi definida pelo WebDesigner no template, o desenvolvedor fica mais focado no seu trabalho.

Consideraremos que nossa empresa possui uma estrita divisão de trabalho, onde existem webdesigners que somente cuidarão de atividades relativas ao layout da aplicação e, os desenvolvedores que somente cuidarão da parte funcional. Neste caso, o webdesigner define um template para a aplicação, algo como o clássico template mostrado na Figura 1. Tendo o layout sido definido, criamos uma página com as definições de tiles, conforme será visto mais adiante (Listagem 4). A partir deste ponto, deixamos a página sobre o cuidado de nosso webdesigner, e o espaço que sempre iremos utilizar será o body. Ou seja, não precisaremos mais nos preocupar com as demais seções.

 

net-12-04-2008pic03.JPG 

Figura 1. Template clássico de páginas Web.