Artigo Java Magazine 75 - WebApps com Struts2 – Parte 2
Nesta parte, continuaremos o desenvolvimento de uma aplicação completa com o Struts2 e veremos a integração com outros frameworks como Spring e FreeMarker.
Atenção: esse artigo tem um vídeo complementar. Clique e assista!
Artigo no estilo: CursoO artigo continua a apresentar o Struts2, um framework que facilita o desenvolvimento de aplicações web ao aplicar o padrão MVC à arquitetura da aplicação. Na primeira parte foram apresentadas funcionalidades básicas do framework com o desenvolvimento de um projeto simples, porém útil. Nesta parte continuamos o desenvolvimento desta aplicação e apresentamos novas funcionalidades como a injeção de dependência e o upload de arquivos.
Para que serve:
O Struts2 serve para aumentar a produtividade das equipes de desenvolvimento web, propondo, ao mesmo tempo, uma organização maior dos artefatos de código a partir da separação das responsabilidades de apresentação, controle e negócio e da existência de diversas funcionalidades prontas, comumente utilizadas em aplicações deste tipo.
Em que situação o tema é útil:
Quando devemos construir aplicações web de médio a grande porte e o tempo investido no aprendizado do framework é justificado por uma maior produtividade no desenvolvimento e na manutenção.
Aplicações Web com Struts2 – Parte 2:
O Struts2 é um dos frameworks web mais conhecidos e utilizados atualmente. Ele provê uma série de facilidades para a construção de aplicações web, melhorando a produtividade da equipe e diminuindo custos de manutenção devido a uma melhor organização do código. Na segunda parte desta série de artigos, continuamos o desenvolvimento de nossa aplicação de exemplo para apresentar novas funcionalidades. Apresentamos primeiro o container interno de injeção de dependências do Struts2 (Listagens 1 a 3) e, em seguida, sua integração com o Spring Framework (Listagens 4 e 5) para alcançar o mesmo objetivo. Em seguida, mostramos que é possível criar beans para injeção de dependências no contexto de sessão (Listagens 6 a 8). Tal componente armazena informações do usuário atual da aplicação e, com ele, é possível implementar funcionalidades de login/logout (Listagens 9 a 13). A próxima funcionalidade desenvolvida é o cadastro de membros: primeiro criamos a base e mostramos a integração com o FreeMarker (Listagens 14 a 18) e depois implementamos um cadastro quase completo (Listagens 19 a 27). Deixamos como exercício para o leitor implementar o cadastro de livros e, em cima deste cadastro, implementamos o upload de arquivo para armazenar a capa do livro no sistema (Listagens 28 a 30). Para finalizar, mostramos como exibir a capa do livro armazenada por meio do resultado stream, que permite retornar resultados binários como imagens, arquivos PDF e outros (Listagens 31 a 33).
Esta é a segunda parte de uma série de artigos sobre o Struts2, iniciada na Edição 74 da Java Magazine. Naquela edição, começamos com o básico, como a instalação do framework e a criação de um “Hello, World!”. Iniciamos também o desenvolvimento de uma aplicação web (WebApp) simples, mas com utilidade real: uma aplicação para gerência de pequenas bibliotecas chamada Bookshelf. Por meio deste exemplo, mostramos diversas funcionalidades do Struts2, como a abordagem dirigida ao modelo, uso de interceptadores, definição de resultados, validação de formulários, internacionalização de mensagens e integração com o framework SiteMesh para aplicação de leiaute gráfico a todas as páginas.
Nesta edição, continuaremos a desenvolver o Bookshelf (se você não seguiu a primeira parte, pode obter o código-fonte no site da Java Magazine) e mostraremos outras características do Struts2, como a injeção de dependências, upload de arquivo e resultados binários, e sua integração com outros frameworks como FreeMarker e Spring.
Atualização de versão
Depois do fechamento da primeira parte desta série de artigos, foram lançadas novas versões estáveis (GA, ou General Availability) do Struts2. A versão estável mais recente no momento da escrita deste artigo é a 2.1.8.1, que pode ser obtida no site do Struts2 (veja Links).
Para este artigo faremos uma atualização de versão e usaremos a versão 2.1.8.1 do framework. Para atualizar seu projeto, localize a pasta do projeto Bookshelf na qual se encontram os arquivos JAR, exclua as versões antigas dos JARs do Struts2 e suas dependências e copie as versões novas da pasta lib da distribuição do struts-2.1.8.1. A Tabela 1 lista os arquivos que devem ser atualizados e suas novas versões.
JAR |
Versão Antiga |
Versão Nova |
commons-collection |
3.1 |
3.2 |
Freemarker |
2.3.13 |
2.3.15 |
Ognl |
2.6.11 |
2.7.3 |
Sitemesh |
2.3 |
2.4.2 |
struts2-core |
2.1.6 |
2.1.8.1 |
struts2-dojo-plugin |
2.1.6 |
2.1.8.1 |
struts2-sitemesh-plugin |
2.1.6 |
2.1.8.1 |
xwork(-core) |
2.1.2 |
2.1.6 |
Tabela 1. Atualização dos JARs do Struts2 e suas dependências.
Na distribuição struts-2.1.8.1, o JAR xwork alterou seu nome para xwork-core.
A pasta que contém os JARs depende da utilização ou não de uma IDE que gerencie as dependências do projeto web para você. Se você utiliza o Eclipse, uma solução comumente adotada consiste em criar uma pasta lib na raiz do projeto, copiar os arquivos JAR para esta pasta e depois adicioná-los como Java EE Module Dependencies nas propriedades do seu projeto. Caso você tenha usado o Eclipse para desenvolver o Bookshelf até o momento, lembre-se de efetuar o refresh do projeto e atualizar as dependências nas propriedades do mesmo depois da cópia das novas versões dos JARs.
Após a atualização, implante novamente sua aplicação no seu container web Java e teste novamente as funcionalidades desenvolvidas até o momento. Sua aplicação deve funcionar sem demais alterações.
Injeção de dependências
Segundo a própria documentação do Struts2, a injeção de dependências (ou DI, de dependency injection) “transfere a responsabilidade de criação e ligação de objetos dos próprios objetos para uma fábrica” (tradução nossa). Em termos práticos, ao utilizar DI, nossas classes de ação não precisarão mais se preocupar em criar instâncias dos serviços dos quais dependem, pois eles serão criados por um container externo, no caso, o Struts2. Para mais informações sobre DI, veja na seção "
[...] continue lendo...Artigos relacionados
-
Artigo
-
Artigo
-
Artigo
-
Artigo
-
Artigo