Esse artigo faz parte da revista Java Magazine edição 41. Clique aqui para ler todos os artigos desta edição

Imagem

Atenção: por essa edição ser muito antiga não há arquivo PDF para download.Os artigos dessa edição estão disponíveis somente através do formato HTML. 

Struts 2: primeiros passos

Prepare-se para a Evolução do Mais Popular Framework Web

Explorando as principais novidades com um exemplo completo: interceptores, novas tags, componentes AJAX – e muito mais produtividade.

 

Os Struts 2 é o resultado da junção do antigo Struts com outro excelente framework web chamado WebWork. Como ambos possuíam arquitetura semelhante e trabalhavam como o paradigma de ações, as equipes de desenvolvimento decidiram unir o melhor dos dois mundos.

Neste artigo abordamos a nova arquitetura do Struts, discutindo as mudanças mais significativas, e construímos uma aplicação completa de cadastro de usuários com validação cliente/servidor, utilizando as novas tags e componentes AJAX.

Para a construção de exemplo, utilizaremos o IDE Eclipse com o plug-in WTP (Web Tools Project). É possível fazer o download do IDE já com o WTP integrado, em eclipse.org/webtools. Se você já tem o Eclipse instalado, pode também baixar e instalar o WTP a partir do site de atualizações do Callisto.

Todo o código aqui demonstrado está disponível no site da Java Magazine. O Struts 2, no momento em que escrevo, ainda está no processo de construção do seu primeiro release, portanto a criação de um projeto compatível pode ser um pouco tortuosa.

Então, para facilitar o acompanhamento e garantir que tudo funcione como descrito aqui, recomendo fazer o download do site da revista e importar o projeto completo para o Eclipse.

 

Struts 2 na prática

Nada melhor para conhecer o novo Struts do que usá-lo na pratica. Então vamos diretamente à nossa aplicação de exemplo. Para saber detalhes sobre os novos conceitos que surgirão no caminho, como Interceptors e Results, veja os quadros “Mudanças e novidades no Struts 2” e “Tipos de Interceptors”.

Utilizaremos como banco de dados o MySQL. A Listagem 1 mostra o script para criação das três tabelas do exemplo. Note que um usuário possui nome, data de nascimento, um perfil e um departamento, e que as tabelas de departamento e perfil contêm apenas um código e uma descrição.

A aplicação final em execução deverá se parecer com a Figura 1. Observe que a interface gráfica consiste em um formulário de inclusão e uma lista de usuários cadastrados. O formulário possuirá validação no lado do cliente (através de chamadas AJAX) e também validação do servidor.

 

Imagem

Figura 1. Layout da aplicação de exemplo

 

Após fazer o download do projeto no site Java Magazine, importe-o para workspace do Eclipse, acessando File/Menu>Web>Existing Project into Workspace. O projeto deverá parecer com a Figura 2.

 

Imagem

Figura 2. Estrutura do projeto após importação

 

Listagem 1. Script de criação do banco de dados.

 

CREATE TABLE ‘departamento’ (

 ‘id’ bigint(20) NOT NULL auto_increment ,

 ‘nome’ varchar(30) NOT NULL ,

 PRIMARY KEY (‘id’) ,

 UNIQUE KEY ‘id_departamento’ (‘id’)

);

CREATE TABLE ‘perfil’ (

 ‘id’ int(11) NOT NULL auto_increment ,

 ‘nome’ varchar(30) NOT NULL ,

 PRIMARY KEY (‘id’)

);

CREATE TABLE ‘usuario’ (

 ‘nome’ varchar(45) ,

 ‘id’ bigint(20) NOT NULL auto_increment,

 ‘id_departamento’ bigint(20) NOT NULL,

 ‘data_nascimento’ datetime ,

 PRIMARY KEY (‘id’)

);

 

web.xml e entidades

Vamos então à descrição do projeto mostrando como criá-lo passo a passo. Primeiro precisamos alterar o arquivo WEB-INF/web.xml (Listagem 2).

No Struts 1.x era necessário configurar um servlet para tratar todas as requisições (normalmente *.do). no Struts 2 configuramos um filtro:

 

<filter>

<filter-name>filtroStruts</filter-name>

<filter-class>

  org.apache.struts2.dispatcher.ilterDispatcher

</filter-class>

</filter>

<filter-mapping>

<filter-name>filtroStruts</filter-name>

<url-pattern>/*</url-pattern>

</filter-mapping>

 

Observe que o padrão de URL que adotamos aqui foi “/*”, o que significa que o filtro irá interceptar todas as requisições da aplicação. No web.xml você vê que também configuramos um servlet chamado dwr que irá interceptar as chamadas AJAX para validação (veja mais sobre isso no final do artigo).

Tendo o arquivo web.xml ajustado, construímos as classes Usuario, Perfil e Departamento, mostradas nas Listagens 3,4 e 5.

 

Listagem 2. Configuração do filtro-WEB-INF/web.xml

 

<web-app>

<filter>

 <filter-name>filtroStruts</filter-name>

 <filter-class>

 org.apache.struts2.dispatcher.FilterDispatcher

 </filter-class>

</filter>

<filter-mapping>

 <filter-name>filtroStruts</filter-name>

 <url-pattern>/*</url-pattern>

</filter-mapping>

 

<servlet>

 <servlet-name>dwr</servlet-name>

 <servlet-class>uk.ltd.getahead.dwr.DWRServlet</servlet-class>

 <init-param>

<param-name>debug</param-name>

<param-value>true</param-value>

 </init-param>

</servlet>

<servlet-mapping>

<servlet-name>dwr</servlet-name>

<url-pattern>/dwr/*</url-pattern>

</servlet-mapping>

</web-app>

 

Listagem 3. Entidade Usuário – Usuario.java

 

public class Usuario{

 public Long id;

 public String nome;

 public Departamento departamento;

 public Perfil perfil;

 public Date dataNascimento;

 

 public Usuario() {}

...

Quer ler esse conteúdo completo? Tenha acesso completo