Por que eu devo ler este artigo: O Struts é um framework open-source do projeto Jakarta que auxilia a construção de aplicações para a Web. Ele é construído em Java, e seu coração consiste numa camada de controle flexível baseada nas tecnologias Java Servlets, JavaBeans, ResourceBundles e XML.

O Struts favorece o desenvolvimento de aplicações seguindo o paradigma MVC (Model-View-Controller). O Struts fornece um componente Controller e se integra a outras tecnologias para oferecer suporte aos componentes Model (como JDBC, EJB’s, etc.), e View (como JSP, XSLT, etc.).

  1. O Design Pattern MVC

    No design pattern MVC, o fluxo da aplicação é mediado por um controlador central (Controller). O controlador delega requisições para um tratadores apropriados, que estão localizados no modelo (Model), que representa a lógica de negócio e o estado da aplicação. A requisição então é respondida, através do controlador, e apresentada na visão (View), da maneira adequada. No Struts, essas respostas são orientadas através de mapeamentos, que são carregados através de um arquivo de configuração (struts-config.xml). Isso faz com que não haja dependência entre a visão e o modelo, que auxilia na criação e na manutenção da aplicação.

  2. Instalação

    A versão do Struts mais utilizada é a versão 1.1, que ainda se encontra em versão beta. Apesar de ainda não estar completamente finalizada, é uma versão estável e que deve sofrer poucas alterações. Para que nossos exemplos funcionem adequadamente, utilizaremos essa versão. Será então necessário fazer o download do arquivo jakarta-struts-1.1-b3.zip no site do Jakarta Struts, e descompactá-lo no computador. O pacote vem com as bibliotecas necessárias para a utilização do framework e alguns exemplos.

    1. Componentes do Struts
    2. Componentes Model

      Os componentes Model englobam dois conceitos: a lógica de negócio da aplicação e seu estado. As tecnologias utilizadas nessa camada, são JavaBeans, e freqüentemente, Enterprise JavaBeans e JDBC.

      Através destas tecnologias, deverá ser construída a lógica de negócio da aplicação.

    3. Componentes View

      Os componentes View representam a visão da aplicação, ou seja, a maneira como o sistema interage com o usuário. A tecnologia mais comumente utilizada nessa camada é Java Server Pages.

      Nessa camada, o Struts oferece suporte a dois importantes aspectos: internacionalização e construção de interfaces JSP através de custom tag’s.

      Para permitir a internacionalização, é necessário que se crie, sob o diretório WEB-INF/resources da aplicação, um arquivo chamado ApplicationResources.properties, que conterá mensagens para a linguagem padrão do seu servidor. As mensagens são colocadas nos arquivos através de strings simples, como:

      app.cliente.nome=Nome do cliente 

      Para possibilitar que se crie mensagens em outras linguagens, é necessário criar o arquivo ApplicationResources_xxx.properties, onde xxx será o nome ISO da linguagem a ser utilizada.

      Outro importante recurso é a disponibilidade de custom tag’s do Struts, que permitirá, além da utilização dos arquivos de internacionalização, uma série de funcionalidades, que, na grande maioria dos casos, dispensará a utilização de código Java dentro da página (aliás, esse é um dos objetivos da arquitetura MVC, pois o fluxo de controle e lógica de negócio da aplicação não devem estar na camada de visão). Além disso, a extensibilidade de Java permite que o próprio desenvolvedor crie suas próprias custom tag’s, que, aliás, é uma tarefa bastante simples.

      As custom tag’s do Struts são divididas em cinco bibliotecas:

      • html: permite a criação e manipulação integrada de formulários HTML com o Struts;
      • logic: permite a criação de estruturas de condição e repetição, além da administração do fluxo da aplicação;
      • bean: permite a criação e manipulação de JavaBeans dentro da página;
      • nested: permite a definição de modelos de objetos aninhados e a capacidade de representá-los e administrá-los;
      • template: permite a criação de modelos dinâmicos de páginas JSP que compartilham de um formato comum.
  3. Componentes Controller

    Os componentes Controller são responsáveis pelo fluxo da aplicação. O principal componente Controller do Struts é a ActionServet, que é uma extensão de Servlet, exercendo o papel de controlador principal da aplicação. Sua principal função é fazer o mapeamento das requisições do servidor.

    Para isso, é necessário criar um arquivo de configuração, denominado struts-config.xml, que é usado para mapear a navegação da aplicação. Depois disso, deverão ser criadas as classes Action (que são extensões da classe Action do Struts), que conterão as ações a serem executadas a cada requisição. O objetivo da classe Action é processar a requisição e retornar um objeto da classe ActionForward que identifica para qual componente de visão (normalmente uma página JSP) será gerada a resposta. As classes Action são compostas de um único método, com a assinatura public ActionForward execute(ActionMapping mapping, ActionForm form, HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException, que será invocado quando a ActionServlet receber a requisição e processá-la.

    O Ainda na camada controller, Struts oferece para os chamados ActionForm beans, ou, mais comumente chamados, form-beans. Form-beans são classes Java que estendem ActionForm e se integram a um formulário de entrada de dados em sua aplicação. O conceito dos form-beans é simples: são JavaBeans que contém uma propriedade para cada campo de seus formulários HTML, com seus respectivos métodos getters e setters. Os form-beans não implementam qualquer método, exceto reset e validate, servindo para limpar o conteúdo do formulário e validar seus dados, respectivamente.

  4. Configuração

    Antes de utilizar o Struts, é necessário configurar seu ambiente para que ele saiba como mapear todas as requisições através de uma determinada extensão de arquivo para a ActionServet do Struts. Isso deverá estar no arquivo web.xml, que fica abaixo do diretório WEB-INF de sua aplicação.

    O próximo passo é configurar o arquivo fundamental do Struts, o struts-config.xml. Enquanto o arquivo web.xml define aonde a requisição deve chegar, o struts- config.xml determina exatamente o que vai acontecer com ela. Nada acontece sem sua permissão ou seu conhecimento: é onde os mapeamentos são definidos. Toda a navegação da aplicação está definida nesse arquivo, o que é uma grande vantagem, pois a mantém modularizada e de fácil manutenção. Todo esse arquivo é lido na inicialização do servidor e armazenado na memória, por questões de performance.

    Além disso, é necessário que se tenha todos os arquivos .jar necessários à aplicação abaixo do diretório WEB-INF/lib, e todos os descritores de custom-tag’s abaixo do diretório WEB-INF.

  5. Criando uma aplicação exemplo com o Struts

    O primeiro passo será criar a estrutura padrão para aplicativos WEB utilizando Servlets, contendo uma pasta WEB-INF, onde será colocado o arquivo web.xml. O arquivo web.xml terá o seguinte conteúdo:

    No diretório WEB-INF, deverão ser colocados os descritores de custom tag’s do Struts (arquivos .tld).

    Depois disso, devemos criar o diretório WEB-INF/classes, onde serão colocados os arquivos .class, dentro de seus determinados pacotes, e o diretório WEB-INF/lib, onde serão colocados os arquivos .jar do Struts.

    Assim, construiremos um aplicativo simples, de cadastro e consulta de CD’s e DVD’s, categorizados por gênero (para isso utilizaremos um banco de dados Microsoft Access 2000, acessado através de uma conexão ODBC via JDBC). No nosso exemplo, o nome da fonte de dados (DSN) da conexão ODBC será Catalogo. A aplicação permitirá a inclusão e a consulta de CD’s ou DVD’s. O banco conterá apenas as tabelas para gênero(Genero) e catálogo(Catalogo, para armazenar seus CD’s e DVD’s). Teremos apenas 5 (cinco) páginas, que servirão para exibir a lista de todos os itens do catálogo e para a inclusão e consulta desses itens.