RSS   

Acesso a bancos de dados com JSP

Neste artigo veremos como trabalhar com bancos de dados e JSP.

Esta aplicação poderia ser um exemplo de uma aplicação simples baseada em uso exclusivo de páginas JSP. Mas isto significaria não aproveitar os recursos de orientação a objetos proporcionada pelo Java.

Vamos então fazer um aplicativo com uma arquitetura MVC (Model-View-Controller). O NetBeans será utilizado como IDE para este desenvolvimento e o SGBDR será o Java DB.

Funcionalidades

Nosso aplicativo de exemplo é uma mera agenda de contatos

Diagrama de Caso de Uso

Diagrama de Caso de Uso

O usuário pode consultar sua lista de amigos, incluir novos, alterar ou excluir os cadastrados

Arquitetura

O desenvolvimento desta aplicação é dividido em três partes

  • Modelo: Classes utilizadas para representação dos dados
  • Controle: Classe que contém as regras da aplicação
  • Visão: Páginas JSP com a interface da aplicação

Banco de Dados

Comecemos por criar um banco de dados. Vá à aba de serviços do NetBeans, clique com o botão direito do mouse no ícone do Java DB e selecione “Criar Banco de Dados”. Selecione um nome como “amigos”, o nome do usuário administrativo do banco e sua senha. Clique com o botão direito do mouse sobre o ícone do banco de dados recém-criado e selecione “Conectar”. Expanda o nó deste banco de dados, clique com o botão direito do mouse sobre “Tabelas” e selecione “Criar tabela”. Crie uma tabela com campos de identificação (numérico), prenome, sobrenome, telefone (este três são campos de texto) e data de nascimento (com formato de data).

Modelo

Pacote modelo

Pacote modelo

O modelo será composto por quatro elementos

  • Conexao: Classe que tem apenas um método denominado “obterConexao” que retorna um java.sql.Connection referente à conexão com o banco de dados criado anteriormente
  • Contato: Um JavaBeans que representará os registros da tabela de contatos. Além do necessário para configurar um JavaBeans, teremos o método “valido” para indicar se os dados são consistentes com o que se espera e um método para retornar a data de nascimento convertida para String. Foi adicionado também um atributo “mensagem” para armazenar mensagens de erro caso os valores não sejam válidos.
  • DAO: Uma interface com assinatura dos métodos para atualizar, incluir e excluir registros na tabela, além de retornar um contato ou uma lista com todos os contatos.
  • ContatoDAOImp: Uma classe que implementa DAO e um método “novoID” para calcular o valor da chave da primária antes de incluir um novo contato na tabela. As instruções SQL são construídas com PreparedStatement para facilitar a formatação dos dados e reduzir a possibilidade de ataques do tipo SQL Injection.

Controle

pacote Controle

pacote Controle

O pacote de controle tem uma classe chamada “Controle“. Esta classe é um Servlet.

Escreveremos nela um método para converter uma String de uma data em um objeto java.util.Date.

No processamento da requisição (método “processRequest”) iremos examinar um parâmetro que denominaremos “acao”. Este parâmetro indicará o que desejamos fazer no momento. Sempre que possível este processamento irá criar um objeto “Contato” com os dados recebidos nos outros parâmetros. Dependendo do parâmetro “acao”, o processamento pode tomar distintos caminhos. Vejamos as possibilidades

  • Inserção. Se os dados do objeto Contato forem válidos, ele invocará o método de inserção do “ContatoDAOImp” e recuperará uma lista de contatos armazenados. Se houver ao menos um registro na tabela será chamado o arquivo “listagem.jsp” ou, caso contrário, o arquivo “insercao.jsp”. Se os dados não forem válidos, será invocada a página “erro.jsp”
  • Exclusão. Ele invocará o método de remoção de registro do ”ContatoDAOImp” e seguirá os mesmos passos realizados após uma inserção.
  • Solicitação de alteração. Um objeto “Contato” é passado para “atualizar.jsp” para que possa ser criado um formulário HTML para obtenção dos dados a alterar.
  • Alteração. Segue o mesmo princípio da inserção, apenas invocando o método de alteração no lugar do da inserção.
  • Padrão. A ação padrão consiste em recuperar a lista de contatos e exibir “listagem.jsp” ou “insercao.jsp”.

Ao invocar “listagem.jsp”, faz-se necessário obter um java.util.List com todos os contatos, definí-lo como atributo da requisição (método “request.setAttribute”). Usamos os métodos “request.getRequestDispatcher” para definir a página de destino e “forward” em um objeto RequestDispatcher para desviar a execução para a página selecionada.

O desvio para a página de erro ou com o formulário de atualização cria um objeto com a interface HttpSession para atribuir um objeto “Contato” à sessão e transfere a execução para a página desejada.

Visão

A interface da aplicação é baseada em arquivos JSP. São eles

  • index. Página inicial da aplicação e que contém apenas um link para o servlet “Controle”
  • listagem. Exibe uma tabela com os contatos armazenados e um formulário para inclusão de novos contatos. Para reduzir a quantidade de código, utilizou-se JSTL. JSTL é uma biblioteca de tags e seu uso facilita a produção de páginas JSP.
  • insercao. Este arquivo contém o formulário para inserção de contatos e é utilizado quando não há contatos no banco de dados.
  • atualizar. Exibe um formulário com os dados de um contato para sua alteração. Para utilizar os atributos de um objeto “Contato”, é feita referência a um JavaBeans.
  • erro. Utiliza o mesmo recurso da página “atualizar” para exibir a mensagem de erro produzida quando os dados do contato não são válidos.

Além dos cinco arquivos JSP citados foi utilizado um arquivo CSS e um arquivo com o formulário de inclusão que é incorporado às páginas “insercao.jsp” e “listagem.jsp”.

Obtenha as apresentações deste artigo. Você pode fazer o download da apresentação sobre JSP e banco de dados para exibição e a apresentação sobre JSP e banco de dados com notas.

 

Um Comentário

  1. Jonathan says:

    Estou recebendo o seguinte erro, ao testar o aplicativo:

    HTTP Status 404 – /WebApplication1/Controle
    ——————————————————————————–
    type Status report

    message /WebApplication1/Controle

    description The requested resource (/WebApplication1/Controle) is not available.

    Alguem pode ajudar?

Envie comentário