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

 

 

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 Vai às Compras

Um fundamento do e-commerce com Java

Implemente um carrinho de compras e uma listagem simples de produtos, utilizando sessões, taglibs do Struts e o MySQL

Muitas vezes, ao desenvolvermos uma aplicação web, precisamos guardar informações de usuários entre solicitações, tornando possível recuperá-las a qualquer momento. Um carrinho de compras de uma loja virtual é um dos casos clássicos onde isso é necessário. Neste artigo, vamos apresentar um exemplo baseado no popular framework web Struts, e que também poderá ser usado como modelo para suas aplicações.

Principais componentes

Começaremos descrevendo as partes principais do exemplo. O catálogo exibe os produtos disponíveis e inclui informações como preço, descrição e uma imagem ilustrativa. No exemplo, vamos utilizar um conjunto de produtos obtidos diretamente de uma base de dados previamente criada. As informações textuais dos produtos são obtidas do banco de dados, e as imagens, de um repositório no servidor (apenas os links para as imagens serão armazenados). A única operação que pode ser executada no catálogo é a inserção de um produto no carrinho.

Nota: Para garantir a escalabilidade e a organização da aplicação, o catálogo poderia ser subdividido em categorias, o que simplificaria a localização e a exibição de produtos. Além disso, a listagem poderia ser paginada para limitar a quantidade de itens mostrados por vez. Porém, como o catálogo não é o foco deste artigo, mas sim o carrinho de compras, tais considerações não serão levadas em conta na implementação.

O carrinho de compras contém a identificação dos produtos inseridos, suas quantidades e imagem, ou seja, apenas os atributos necessários para a exibição. As operações possíveis no carrinho são: remover um produto, atualizar uma quantidade e limpar o carrinho. No carrinho é exibido o subtotal da compra, mas omitimos dados como valores de frete e de desconto etc., por simplicidade.

O fluxo da aplicação é detalhado na Figura 1.

Arquitetura Básica

Além de auxiliar no controle de fluxo das telas, o uso do Struts permite uma boa separação entre a lógica de negócio e o código de apresentação. Baseando-se em uma variação da arquitetura MVC, o Model 2, a aplicação é organizada em três camadas: o modelo, contendo objetos de acesso a dados e a lógica de negócio; a visão, na qual se enfoca a apresentação dos dados e a interação com o usuário; e o controlador, responsável pelo fluxo de controle de requisições. (Para mais detalhes sobre essa arquitetura, no contexto do Struts, veja o artigo “Struts Essencial", na Edição 6).

Modelo

No exemplo, vamos utilizar o MySQL (mas poderíamos usar qualquer banco de dados com um driver JDBC 2.0). Para criar e popular a base utilizamos o script da Listagem 1, que pode ser executado diretamente no prompt do MySQL (\bin\mysql.exe), ou gravado em um arquivo-texto e importado utilizando o comando "\.". Você pode, claro, usar um front-end, como o excelente MySQL-Front (veja links).

Os produtos foram modelados pela classe Produto, com atributos produtoId, nome, descrição, imagem e preço, além dos métodos get/set correspondentes. Produtos inseridos no carrinho são representados por objetos ItemCarrinho, contendo como atributos o id e o nome do produto, o preço, a quantidade e o link para a imagem.

Na classe Carrinho utilizamos um ArrayList para armazenar o conjunto de itens. Um objeto Carrinho é vinculado à sessão do usuário. Note que optamos por uma solução simples, evitando criar o carrinho de compras como uma tabela no banco – assim o carrinho existe apenas enquanto durar a sessão do usuário.

O acesso a dados é centralizado na classe MySQLCatalogoDAO, que implementa a interface CatalogoDAO com código específico ao MySQL, seguindo o padrão de projeto Data Access Object (veja links). Esta interface implementa apenas dois métodos:

·         Produto recuperarProduto(int id)

·         ArrayList recuperarCatalogoProdutos()

 

As consultas SQL e a obtenção de conexões são abstraídas pelo uso de um DataSource (veja a seguir).

Controlador

O controlador analisa as ações solicitadas pelo usuário, e escolhe e invoca a ação responsável por executar a tarefa especificada. Foram definidas duas ações, mapeadas no trecho do arquivo struts-config.xml mostrado na Listagem 2.

A ação CatalogoAction é invocada para a exibição dos produtos. Seu método execute() recupera os produtos do banco de dados, e insere-os em uma coleção que em seguida é vinculada a um atributo do request (veja a Listagem 3).

Há métodos no controlador para todas as ações permitidas em um carrinho, mas implementar essas ações em diferentes métodos execute() seria pouco produtivo, pois necessitaríamos de uma classe de ação por operação (com código muito similar). Decidimos, portanto, fazer a classe CatalogoAction estender org.apache.struts.actions.DispatchAction, uma classe do Struts que permite que a operação a ser executada seja especificada em um parâmetro – method ...

Quer ler esse conteúdo completo? Tenha acesso completo