que aqui para ler esse artigo em PDF.![]()
Struts: primeiros passos
Conceitos, arquitetura e exemplos
Conheça o framework líder no desenvolvimento web
No desenvolvimento de aplicações web, a mistura de código Java com HTML e JavaScript pode trazer muitos problemas no desenvolvimento, questão que se agrava quando a aplicação possui design gráfico complexo e funcionalidades avançadas. Torna-se difícil a manutenção do código e a interação entre a equipe de desenvolvimento e a de design gráfico fica comprometida. Como solucionar as divergências, separar melhor o trabalho das equipes e fazê-las trabalhar com produtividade em suas especialidades?
Um passo importante é padronizar a arquitetura das aplicações, usando as melhores práticas do mercado e evitando partir do zero. É nesse ponto que entram os frameworks web, entre os quais o Struts do projeto Apache Jakarta é o mais conhecido e respeitado.
O framework
Com o nome completo Apache Struts Web Application Framework, o Struts é quase um consenso entre os desenvolvedores de aplicações web com Java. Além de ser software livre e bem documentado (tanto na web como em diversos livros), o Struts é flexível, extensível e suportado pelas principais ferramentas de desenvolvimento do mercado (entre elas JBuilder, Eclipse, JDeveloper, NetBeans e IDEA).
O Struts é baseado em uma variação do tradicional padrão de arquitetura MVC (Model-View-Controller) e se integra bem, na camada de apresentação, com outras tecnologias e frameworks web tais como Java Server Pages, Jakarta Velocity e XLST. Para a camada de dados, as opções são igualmente amplas: de JDBC a Enterprise JavaBeans, passando por JDO.
É a arquitetura do Struts que o torna tão extensível e adaptável. Antes de entrarmos nos detalhes sobre o framework, vamos conhecer um pouco sobre as origens e características dos padrões adotados pelo framework.
Arquiteturas e variações
O padrão de arquitetura MVC (em português: Modelo-Visão-Controlador) divide uma aplicação em três partes ou papéis: dados e classes de negócio (o modelo), apresentação (a visão) e controle. Centralizando o controle, o padrão MVC reduz a duplicação de código e simplifica a manutenção e evolução de aplicações web, além de fomentar o reuso dos componentes da visão e do modelo.
O JSP suporta parcialmente o padrão MVC, desde a versão 0.91, com a integração de JavaBeans com páginas JSP, em um padrão que ficou conhecido como Model 1. O Model 1, no entanto, não traz uma separação clara entre os papéis – são apenas dois componentes (JSPs e JavaBeans) para desempenhar os três papéis do MVC. O controle é descentralizado e tanto os desenvolvedores como os designers precisam editar páginas JSP, dificultando o trabalho em equipe e a manutenção. Por apresentar essas deficiências, a arquitetura Model 1 é considerada adequada apenas para aplicações pequenas e praticamente estáticas, sem um fluxo complexo de navegação.
Para projetos de grande porte, manter uma clara separação entre os papéis torna-se muito importante. Isso é atingido com a arquitetura Model 2, que adiciona um elemento: o controlador. Implementado geralmente por um servlet, o controlador tem a responsabilidade de receber solicitações, acessar classes de negócio e coordenar a geração do conteúdo da apresentação (páginas HTML, WML etc.). O pouco código Java que resta na apresentação (nas páginas JSP) pode ser substituído por tags personalizadas, que, para os designers, são mais fáceis de compreender e manter.
Em cena, o Struts
O Struts é uma implementação completa e madura do padrão de arquitetura Model 2. As melhores práticas dos Blueprints da Sun (veja links) recomendam que aplicações web, ou a camada web de aplicações J2EE, sejam implementadas usando um framework web MVC. E o Struts é citado várias vezes como uma alternativa robusta para isso.
O framework fornece um controlador constituído por três elementos principais: o ActionServlet (servlet controlador), o RequestProcessor e as classes de ação, ou Actions. O ActionServlet e o RequestProcessor são fornecidos prontos pelo framework; as ações devem ser implementadas pelo desenvolvedor estendendo a classe abstrata Action. São as ações as responsáveis por acessar o modelo, fazendo a ponte entre a lógica de negócio e o servlet controlador.
De modo similar, o Struts fornece os ActionForms, JavaBeans criados pelo desenvolvedor, que tem suas propriedades preenchidas automaticamente pelo Struts a partir de formulários HTML. Os ActionForms realizam a ponte entre a visão (páginas JSP) e o controlador (ações e servlet).
Além desses, o Struts inclui uma série de elementos adicionais importantes, como um pool de conexões (configurado no arquivo struts-config.xml), e uma vasta bibliotecas de tags, contemplando praticamente todas as tarefas necessárias no desenvolvimento de páginas JSP.
Fluxo de uma aplicação Struts
O ActionServlet é o único servlet de uma aplicação construída com o Struts. Para tal, o arquivo web.xml deve conter um mapeamento genérico, direcionando páginas diferentes da aplicação ao mesmo servlet controlador. Em geral é utilizado o padrão de URL (URL pattern) “*.do”.
Quando o ActionServlet recebe uma requisição, ela é repassada para o RequestProcessor, que processa e valida os dados recebidos. No arquivo struts-config.xml, são mapeadas as URLs para as ações responsáveis pelo seu processamento. Escolhida a ação, ela é instanciada e em seguida é chamado seu método execute, que realiza chamadas ao modelo. Ao final da execução, a ação retorna uma indicação para o controlador sobre qual visão deve ser exibida para formatar a resposta.
No mesmo arquivo são listados os ActionForms que devem ser instanciados e populados para cada URL. Estes são inseridos como atributos da requisição ou da sessão HTTP, estando portanto disponíveis tanto para as ações responsáveis por processar a requisição quanto para as páginas JSP responsáveis por exibir o resultado.
O quadro “Fluxo básico” apresenta o fluxo de controle de uma aplicação baseada no Struts (a figura se baseia na documentação do framework).
Fluxo Básico