Artigo no estilo: Curso

De que se trata o artigo:

O 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 as funcionalidades básicas do framework e na segunda parte vimos a integração com Spring, injeção de dependências e upload de arquivos. Nesta parte, última da série, continuamos o desenvolvimento desta aplicação e apresentamos novas funcionalidades como a configuração por convenção (que substitui o struts.xml), a criação de componentes gráficos reutilizáveis, funcionalidades de depuração e profiling da aplicação, integração com JasperReports para geração de relatórios e dicas finais para aumento do desempenho de aplicações com Struts2.


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. Neste artigo apresentaremos funcionalidades que servem para diminuir a quantidade de XML, aumentar a reutilização de código, depurar aplicações e gerar relatórios em PDF.

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. Apresentaremos ferramentas que são úteis quando repetimos códigos relativos a componentes visuais, quando precisamos encontrar erros ou a causa de um desempenho insatisfatório, ou quando precisamos gerar relatórios em PDF dinamicamente a partir dos dados da WebApp.

Aplicações Web com Struts2 – Parte 3:

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 terceira parte desta série de artigos, continuamos o desenvolvimento de nossa aplicação de exemplo para apresentar novas funcionalidades. Começamos com a configuração por convenção, que nos permite desenvolver ações sem configurá-las no struts.xml, e implementamos uma nova funcionalidade: a pesquisa de livros por nome (Listagens 1 a 4 e Figura 1). E já que não teremos mais as ações detalhadas no struts.xml, apresentamos o plug-in navegador da configuração, que nos permite ver todas as ações configuradas em nossa aplicação (Figura 2 e Listagem 5). Em seguida, falamos de depuração de aplicações – mostrando como inspecionar os objetos disponíveis em cada ação (Figuras 3 e 4 e Listagem 6) – e profiling – imprimindo nos logs quanto tempo cada componente levou para executar (Listagem 7 e Figura 5). Passamos a falar, então, de componentes visuais, ensinando como criar um componente web que pode ser reutilizado em várias páginas (Listagens 8 e 9), mostramos a integração do Struts2 com o JasperReports, ferramenta de geração de relatórios (Listagens 10 a 14 e Figura 6), e, finalizando, damos algumas dicas para aumentar o desempenho de aplicações que usam Struts2.

Esta é a terceira e última parte de uma série de artigos sobre o Struts2, iniciada na Edição 74 da Java Magazine. Já apresentamos na primeira parte a instalação do framework, o uso de suas funções básicas e algumas funcionalidades oferecidas pelo mesmo, 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. Na segunda parte, publicada na Edição 75, mostramos 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. Tudo isso com a ajuda de uma aplicação web (WebApp) simples, mas com utilidade real: uma aplicação para gerência de pequenas bibliotecas chamada Bookshelf.

Nesta edição, continuaremos a desenvolver o Bookshelf (se você não seguiu a primeira e a segunda partes, pode obter o código-fonte no site da Java Magazine) e mostraremos:

  • Como criar ações sem precisar configurá-las no arquivo struts.xml, seguindo convenções de código e utilizando anotações diretamente nas classes;
  • Como criar componentes gráficos usando FreeMarker e reutilizá-los em diversas páginas web com a tag <s:component />;
  • Quais ferramentas de depuração (debugging) e profiling são oferecidas pelo Struts2 para encontrar falhas e causas de baixo desempenho;
  • Como integrar o Struts2 com o JasperReports para mostrar relatórios em PDF gerados dinamicamente a partir dos dados de nossa WebApp;
  • Dicas para aumentar o desempenho de aplicações que utilizam Struts2.

Configuração por convenção

Os leitores que vêm acompanhando esta série de artigos já podem ter percebido uma desvantagem do Struts2: toda ação deve ser configurada no arquivo struts.xml para que o framework saiba o que fazer quando o usuário faz uma requisição a uma determinada URL. A quantidade de código XML que deve ser escrito pode acabar sobrecarregando o desenvolvedor. Felizmente, existe uma alternativa: a configuração por convenção.

Para que você não precise dizer ao framework onde encontrar as classes de ação e páginas de resultado, é preciso seguir convenções (padrões) para que o Struts2 os encontre automaticamente. Para começarmos, no entanto, precisamos incluir em nossa aplicação web o JAR struts2-convention-plugin-2.1.8.1.jar, que pode ser encontrado na pasta lib da distribuição do Struts2. Isso basta para instalar o plug-in de convenção no Struts2.

O plug-in de convenção procura por classes cujo nome termina em Action ou que implementem a interface com.opensymphony.xwork2.Action (subclasses de com.opensymphony.xwork2.ActionSupport implementam esta interface por herança), em pacotes chamados struts, struts2, action ou actions. As páginas web ele procura em /WEB-INF/content/ com o nome da ação executada e a string de resultado (o retorno do método), como veremos nos exemplos. No caso do Bookshelf, colocamos nossas classes de ação dentro do pacote controle e as páginas web em /WEB-INF/pages/. Se quisermos usar estes locais, devemos configurar as constantes struts.convention.package.locators com o nome do pacote que contém as ações e struts.convention.result.path com o caminho (path) para a raiz das páginas web.

Nós, no entanto, usaremos as convenções e não adicionaremos nenhuma configuração no struts.xml. Adicionaremos, sim, anotações nos métodos de ação para especificar suas URLs, para que possamos utilizar a divisão entre input() e execute() que temos feito no ...

Quer ler esse conteúdo completo? Tenha acesso completo