Atenção: esse artigo tem um vídeo complementar. Clique e assista!

Artigo no estilo: Curso

De que se trata o artigo:

Do Struts2, um framework que facilita o desenvolvimento de aplicações web ao aplicar o padrão MVC à arquitetura da aplicação, substituindo Servlets por classes de ação, deixando às páginas JSP apenas lógica de apresentação e provendo uma série de facilidades para tarefas comuns em WebApps, como conversão de tipos, validação, internacionalização, etc.


Para que serve:

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:

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. Neste artigo, mostramos como criar a aplicação mais simples possível com o Struts2, o "Hello, World!" (Listagens 1 a 4), em seguida preparamos esta mesma aplicação para o desenvolvimento de um exemplo simples, mas com utilidade real, o Bookshelf (Listagens 5 e 6), dando a ele um leiaute profissional (Listagens 7 a 9 e Figura 1). Com a WebApp preparada, começamos o desenvolvimento da sua primeira funcionalidade, o cadastro do administrador do sistema (Listagens 10 a 17 e Figura 2) e melhoramos esta mesma funcionalidade, pouco a pouco, mostrando as facilidades oferecidas pelo Struts2, como: abordagem dirigida ao modelo (Listagens 18 e 19), uso de interceptadores e definição de múltiplos resultados (Listagens 20 e 21), validação do formulário (Listagens 22 e 23 e Figura 3) e internacionalização das mensagens (Listagens 24 a 31). Em futuros artigos sobre este mesmo tema, continuaremos o desenvolvimento do Bookshelf e mostraremos outras funções do framework Struts2.

A World Wide Web, ou simplesmente Web, nasceu no início da década de 1990. Em 1993, surge o padrão Common Gateway Interface (CGI), como uma forma de, ao invés de mostrar uma página HTML estática, executar um programa e exibir seu resultado (por exemplo, uma página HTML gerada dinamicamente).

Desde então, as tecnologias para desenvolvimento de aplicações web (WebApps) dinâmicas continuaram a evoluir rapidamente. Na plataforma Java, depois do surgimento das tecnologias Servlet e JSP, a arquitetura MVC (Model-View-Controller) foi usada como base para a criação do que foi chamado “Model 2” (segundo modelo) para a arquitetura de aplicações web. Este novo modelo foi tão bem aceito que logo dezenas de frameworks foram criados para o desenvolvimento de WebApps usando esta arquitetura.

Um dos frameworks pioneiros e mais conhecidos e utilizados é o Struts. Um projeto da Apache Software Foundation, o Struts hoje se divide em duas distribuições: o clássico e o Struts2. Este último é o produto da união dos projetos Struts e WebWork, que é um projeto da OpenSymphony. O Struts2 já foi apresentado na Edição 41 da Java Magazine, mas sofreu algumas alterações até a sua versão atual.

Em uma série de artigos, em que esta é a primeira parte, apresentaremos novamente o framework Struts2 por meio de exemplos, construindo uma aplicação web simples. Começaremos com a instalação do framework e a cada passo do projeto mostraremos uma nova funcionalidade. Esperamos convencer o leitor que o uso de um framework MVC como o Struts2 provê diversos benefícios como a melhor modularização, mais fácil manutenção, maior produtividade no desenvolvimento, dentre outras.

Instalação

Um framework é um artefato de código que provê componentes prontos (ex.: classes) que podem ser reutilizados mediante configuração, composição ou herança. Para “instalar” um framework, portanto, basta que estes componentes prontos estejam disponíveis para uso na aplicação que está sendo desenvolvida.

Utilizaremos a versão estável (GA) mais recente do Struts2 no momento da escrita deste artigo: a 2.1.6. Visite o site do Struts2 (veja Links), escolha a versão e faça o download do arquivo struts-2.1.6-all.zip. Descompacte este arquivo em um diretório da sua escolha, criando a pasta struts-2.1.6, onde encontraremos todos os arquivos relativos ao framework.

Duas ferramentas serão utilizadas para construção e execução da WebApp: um ambiente de desenvolvimento (IDE) e um container (servidor) web Java. O leitor fica livre para escolher aquele de sua preferência. Recomendamos a IDE Eclipse for Java EE Developers (versão Galileo) e o servidor Apache Tomcat 6. O foco deste artigo é no Struts2, portanto não entraremos em detalhes com relação à instalação e uso do Eclipse ou do Tomcat.

Criação da WebApp e “Hello, Struts2!”

Desenvolveremos como exemplo uma aplicação web simples chamada Bookshelf (estante de livros), que permite gerenciar uma biblioteca pequena, como a de um professor universitário que coordena um laboratório onde vários alunos trabalham e pegam os livros do laboratório emprestados.

Antes de desenvolver as funcionalidades do Bookshelf, porém, começaremos nossa aplicação com o clássico exemplo “Hello, World!”. Para utilizar o Struts2, é preciso fazer algumas alterações no arquivo web.xml e ainda criar um arquivo de configuração struts.xml. Felizmente, a distribuição do Struts2 já traz um exemplo pronto que nos ajuda a começar. Procure pelo arquivo struts-2.1.6/apps/struts2-blank-2.1.6.war.

A extensão WAR representa Web Archives, que são aplicações web compactadas e prontas para serem implantadas em containers web (no Tomcat, por exemplo, basta copiar um arquivo WAR para a pasta webapps para a aplicação ser implantada). Arquivos WAR, contudo, são como arquivos ZIP com outra extensão e podem ser abertos pelo seu programa de (des)compactação favorito.

Extraia o conteúdo do arquivo struts2-blank-2.1.6.war para uma pasta qualquer do seu computador. Você pode dar o nome a esta pasta de “Bookshelf” e desenvolver sua aplicação em cima dela ou então criar uma aplicação web em sua IDE favorita (no Eclipse, crie um “Dynamic Web Project”) e copiar os arquivos importantes da aplicação em branco para seu projeto web. Estamos interessados nos seguintes arquivos:

  • struts2-blank-2.1.6/WEB-INF/lib: dentro desta pasta estão as bibliotecas necessárias para utilizar o Struts2. Caso você esteja usando uma IDE, deve configurar estes JARs como dependências do seu projeto (no Eclipse, utilize o item “Java EE Module Dependencies” dentro das propriedades do seu projeto);
  • struts2-blank-2.1.6/WEB-INF/web.xml: configurações da WebApp;
  • struts2-blank-2.1.6/WEB-INF/src/java/struts.xml: configurações do Struts2. Deve estar na raiz do classpath, ou seja, na raiz do diretório de classes do seu projeto.

O arquivo web.xml da aplicação em branco já está pronto para a utilização do Struts2 em nosso projeto (se quiser, altere apenas o nome da aplicação na tag <display-name />). Para usar o Struts2, é preciso configurar um filtro para ser ativado em todas as requisições, como mostra a Listagem 1.

Listagem 1. Configuração da aplicação Web no arquivo web.xml.


  <?xml version="1.0" encoding="UTF-8"?>
  <web-app id="Bookshelf" version="2.4"
    xmlns="http://java.sun.com/xml/ns/j2ee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xsi:schemaLocation="http://java.sun.com/xml/ns/j2ee http://java.sun.com/xml/ns/j2ee/web-app_2_4.xsd">
     <display-name>Bookshelf</display-name>
    <filter>
      <filter-name>struts2</filter-name>
      <filter-class>org.apache.struts2.dispatcher.ng.filter.StrutsPrepareAndExecuteFilter</filter-class>
    </filter>
    <filter-mapping>
      <filter-name>struts2</filter-name>
      <url-pattern>/*</url-pattern>
    </filter-mapping>
    <welcome-file-list>
      <welcome-file>index.html</welcome-file>
    </welcome-file-list>
  </web-app> 

O Struts2 inclui no arquivo de configuração da aplicação web um filtro (StrutsPrepareAndExecuteFilter) que será ativado em todas as requisições (<url-pattern>/*</url-pattern>) à aplicação. Este filtro é o responsável por passar o controle ao framework, permitindo-nos utilizar todas as suas funcionalidades.

Com a utilização de um framework MVC, não mais construímos Servlets ou JSPs para execução da lógica de negócio. Ao invés disso, construiremos ações, que são classes Java comuns que disponibilizam métodos de execução que serão chamados pelo controlador do framework. O Struts2 permite que qualquer classe seja uma ação, entretanto ele fornece a classe abstrata ActionSupport, que ao servir de superclasse, nos ajuda a construir as classes de ação mais rapidamente (veremos vários exemplos disso ao longo do artigo). A Listagem 2 mostra uma classe de ação muito simples, cuja lógica consiste em exibir uma mensagem para o usuário.

Listagem 2. Classe de ação simples para o exemplo “Hello, Struts2!”.


  package br.com.javamagazine.bookshelf.controle;
   
  import com.opensymphony.xwork2.ActionSupport;
   
  public class HelloAction extends ActionSupport {
    private String mensagem;
   
    public String getMensagem() {
      return mensagem;
    }
   
    public String execute() throws Exception {
      mensagem = "Hello, Struts2!";
      return SUCCESS;
    }
  }  ... 

Quer ler esse conteúdo completo? Tenha acesso completo