Implementar função de deletar utilizando JSP e Servlet

Fala ai galera!!
To fazendo umas páginas aqui estudando JSP e Servlet, ja fiz uma para adiciona e alterar, agora eu to querendo saber como eu faço para deletar, onde eu tenho uma pagina JSP com todos os dados listados do banco, minha dúvida é como fazer para que o usuário selecione uma linha clique num possível botão de “deletar” e a linha é removida…
Tenho uma classe chamada ControllerServlet, responsável para reconheçer qual classe Servlet está sendo invocada…
Tenho uma classe chamada DeletaContatoServlet que contem toda a lógica de deleção do contato, tenho um arquivo Web.xml onde eu mapeio minha classe ControllerServlet nele, e tenho uma página JSP para listar os contatos do Banco, está tudo certinho de acordo com a apostila da Caelum fj-21 que estou estudando, mas agora que vem a dúvida, como irei fazer para realizar uma remoção da linha da página JSP utilizando essas classes e esse arquivos que tenho ai???
Vou postar todos esses arquivos citados acima!!
Obrigado!!!

CLASSE DAO

[code]package br.com.caelum.agenda.dao;

import java.sql.;
import java.util.
;
import br.com.caelum.agenda.modelo.Contato;
import br.com.caelum.jdbc.Conexao;

public class ContatoDAO {

public void deletaContato(Contato contato) throws SQLException
{
    Connection conn = Conexao.getConexao();
    String sql = "DELETE FROM contatos WHERE idcontato = ?";
    PreparedStatement stmt = conn.prepareStatement(sql);
    stmt.setInt(1,contato.getIdcontato());
    
    stmt.execute();
    stmt.close();
}

}[/code]

SERVLET CONTROLLER

[code]package br.com.caelum.mvc.servlet;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.caelum.mvc.logica.Logica;

public class ControllerServlet extends HttpServlet {

public void service(HttpServletRequest request, HttpServletResponse response)
                    throws ServletException, IOException{
	
	String parametro = request.getParameter("logica");
	String nomeDaClasse = "br.com.caelum.mvc.logica." + parametro;
	
	try {
		
		Class classe = Class.forName(nomeDaClasse);
		Logica logica = (Logica) classe.newInstance();
		logica.executa(request, response);
		
	} catch (ClassNotFoundException e) {
		throw new ServletException("A Lógica de negócio causou um execeção!");
	} catch (Exception e) {
		// TODO Auto-generated catch block
		e.printStackTrace();
	}
	
}

}
[/code]

SERVLET PARA DELETAR O CONTATO

[code]package br.com.caelum.mvc.logica;

import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.caelum.agenda.dao.ContatoDAO;
import br.com.caelum.agenda.modelo.Contato;

public class DeletaContatoLogic implements Logica {

@Override
public void executa(HttpServletRequest req, HttpServletResponse res)
		throws Exception {
	
	Contato cont = new Contato();
	ContatoDAO dao = new ContatoDAO();
	
	int id = Integer.parseInt(req.getParameter("id"));
	
	cont.setIdcontato(id);
	dao.deletaContato(cont);
	
    RequestDispatcher rd = req.getRequestDispatcher("/lista-contatos-elegante.jsp");
	rd.forward(req, res);
	
}

}
[/code]

PÁGINA JSP QUE CONTEM OS DADOS LISTADOS

[code]<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1”
pageEncoding=“ISO-8859-1”%>

<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>

<html>
<head>
<meta http-equiv=“Content-Type” content=“text/html; charset=ISO-8859-1”>
<title>Primeira Página JSP Utilizando JSTL</title>
</head>
<body>
<c:import url=“cabecalho.jsp”></c:import>

     &lt;!-- cria o DAO --&gt;
     &lt;jsp:useBean id="dao" class="br.com.caelum.agenda.dao.ContatoDAO"/&gt;
    
    
    &lt;form action="mvc" method="post"&gt;
    &lt;table&gt;
         
        &lt;!-- percorre contatos montando as linhas da tabela --&gt;
        &lt;c:forEach var="contato" items="${dao.lista }"&gt;
            &lt;tr&gt;
               &lt;td&gt;${contato.idcontato}&lt;/td&gt;
               &lt;td&gt;${contato.nome}&lt;/td&gt;
               &lt;td&gt;
                 &lt;c:if test="${not empty contato.email}"&gt;
                    <a href="mailto:${contato.email}">${contato.email}</a>
                 &lt;/c:if&gt;
                
                 &lt;c:if test="${ empty contato.email }"&gt;
                     Email Não Confirmado!!!
                &lt;/c:if&gt;
                
               &lt;/td&gt;
               &lt;td&gt;${contato.endereco}&lt;/td&gt;

            &lt;/tr&gt;
        &lt;/c:forEach&gt;
    &lt;/table&gt;
    &lt;input type="hidden" name="logica" value="DeletaContatoLogic"/&gt;
    &lt;input type="submit" value="Deletar" /&gt;
    &lt;/form&gt;           
   &lt;c:import url="rodape.jsp"&gt;&lt;/c:import&gt;

</body>
</html>[/code]

Alguma sugestão ai galera…

cria uma coluna nova na sua lista e coloca um link com um apelido que vai invocar sua servlet e um id como parâmetro

fica mais ou menos assim

<a href="mvc?logica=RemoveContato&id=${contato.id}" >Remover </a>

o mvc na url é o que vai invocar o seu controlador
logica vai ser a classe que vc vai instanciar no seu controlador para executar o serviço desejado
e o id vai ser oque vai te auxiliar a remover a linha correta no bd

em seu controlador coloque o id na requisição se necessário, mas eu acho que ele chega até a sua lógica
req.setAttribute(“id”, req.getParameter(“id”));

espero ter ajudado

Você está listando todos os contatos na pagina dentro do Foreach.
Para selecionar um e exclui-lo, precisa passar para o Servlet o ID do contato.

Dentro do foreach você deve incluir mais uma coluna para cada linha terá um link de exclusão. Nesse link você passa um atributo com o ID em questão que então será recuperado no servlet e através dele você executa o método delete no banco.

&lt;c:forEach var="contato" items="${dao.lista }"&gt;  
                &lt;tr&gt;  
                   &lt;td&gt;${contato.idcontato}&lt;/td&gt;  
                   &lt;td&gt;${contato.nome}&lt;/td&gt;  
                   &lt;td&gt;  
                     &lt;c:if test="${not empty contato.email}"&gt;  
                        <a href="mailto:${contato.email}">${contato.email}</a>  
                     &lt;/c:if&gt;  
                      
                     &lt;c:if test=&quot;${ empty contato.email }&quot;&gt;  
                         Email Não Confirmado!!!  
                    &lt;/c:if&gt;  
                      
                   &lt;/td&gt;  
                   &lt;td&gt;${contato.endereco}&lt;/td&gt;  
  		   &lt;td&gt;
                         &lt; a href='mvc?logica=DeletaContatoLogic&id=${contato.id}'&gt;Deletar</a>
		   &lt;/td&gt;
                &lt;/tr&gt;  
            &lt;/c:forEach&gt;

No Servlet você recupera o Id assim:

int id = Long.parseLong(request.getParameter("id"));

Você só usa o formulario &lt;form action="mvc" method="post"&gt; quando for fazer inclusão, para listar e excluir um registro não é necessário usar o formulário. Isto por que ele envia os dados para o Servlet que estão em campos de entrada tipo input, textarea… E não dados listados na tela em uma tabela.

Ok, galerinha, vou gestar aqui, qualquer coisa eu aviso a vocês aqui…

Obrigado!! 8)

Ai galera a parte de deletar deu certinho Obrigado!!
Outra coisa, seguindo o mesmo raciocínio de criar as classes servlet e as páginas JSP to tentando criar a parte de busca, mas to sem nada em mente…
Como sería…

Pois é gente, to tentando fazer aqui a parte de busca seguind o mesmo raciocínio de criação de Servlet e de arquivos JSP, mas ta complicado, to querendo criar uma página JSP contendo um TextField onde o usuário irá digitar o nome do contato para busca, um submit para o usuário clicar para buscar os dados é uma tabela para listar os dados caso a busca seja realizada com sucesso, isso tudo dentro de uma Form, mais ai to com dúvida em como criar esses arquivos ai.

Sobre a busca, você deve criar um formulário com os campos da busca.
E então criar um servlet com o método que acessa o banco de dados e mapeia ele no web.xml. Para recuperar os dados no servlet, faça como você fez no método que adicionava no banco de dados.
Dai você deverá ter um página JSP para retornar o resultado da busca, pode até ser a mesma página que possui o formulário.
Para retornar o resultado em uma tabela você deve criar um atributo e recupera-lo depois na página JSP para fazer o foreach.

Esse atributpo pode ser criado assim:

java.util.List lista = recebe a lista com o resultado da busca
//adiciona a lista na sessao. 1° parametro é o atributo que será recuperado na JSP e o 2° é o objeto lista criado acima
request.getSession().setAttribute("lista", lista);

Para recuperar na página faça um foreach:

&lt;c:forEach items="${sessionScope.lista}" var="lista" &gt;
//campos da tabela
&lt;/c:forEach&gt;

Certo, na parte do XML existe o mapeamento padrão que é o do ServlController, agora no meu ContatoDAO existe um método para retornar os dados de acordo com o paramento nome passadopublic List&lt;Contato&gt; listaDeContatos(String nome), dentro da classe Servlet chamada BuscaContatoServlet eu tenho que chamar esse DAO e passar por request o nome do contato, agora vema dúvida, como irei criar esse Servlet, ele terá que retornar dados???

Cria esse servlet da mesma maneira que criou o AdicionaContato, porém o que vai mudar é a implementação do método executa(). Dentro desse método você receberá o parâmetro que vem da pagina e fará a busca no banco de dados acessando o ContatoDao.
O retorno dessa busca você insere em um lista como eu exemplifiquei antes. Quando inserir a lista lá, você terá na sessão um objeto lista com o resultado da pesquisa, sendo apenas necessário recuprera-lo na JSP para exibir o resultado (recupera do modo que exemplifiquei anteriormente).

Certo, o que eu não entendo é que o de buscar do DAO tem um retorno, e dentro do método executa() da classe Servlet, quando eu passar esse parametro pra ele ele irá retorna uma lista dentro do metodo executa da classe Servlet, agora o que eu faço com esse lista de contatos retornada dentro do servlet???
Acho que essa parte que falei acima fica mais ou menos assim né

List&lt;Contato&gt; lista = dao.buscaContato(request.getParamtter("nome").

Voce cria um atributo para receber essa lista e exibir na página: List&lt;Contato&gt; lista = dao.buscaContato(request.getParamtter("nome")); request.getSession().setAttribute("lista", lista);

dai você cria uma url que redirecione para a página que vai exibir o resultado.

RequestDispatcher rd = req.getRequestDispatcher("/pagina-que-exibe-consulta.jsp");  
rd.forward(req, res);

Na pagina que exibe você faz um foreach no atributo que armazenou a lista: &lt;c:forEach items="${sessionScope.lista}" var="lista" &gt; //campos da tabela &lt;/c:forEach&gt;
dentro do for, você faz o mesmo processo usado na página que deleta os contatos, cria a tabela para exibi-los.

Ok, vou tentar fazer aqui e qualquer coisa aviso ai…
Muito Obrigado!!

Ai romarcio deu certinho cara muito Obrigado… Olha só como ficou… os arquivos e páginas JSP…

CLASSE DAO

[code]package br.com.caelum.agenda.dao;

import java.sql.;
import java.util.
;
import br.com.caelum.agenda.modelo.Contato;
import br.com.caelum.jdbc.Conexao;

public class ContatoDAO {

public List&lt;Contato&gt; buscaContato(String nome) throws SQLException
{
	Connection conn = Conexao.getConexao();
	String sql = "SELECT * FROM contatos WHERE nome = ?";
	PreparedStatement stmt = conn.prepareStatement(sql);
	stmt.setString(1, nome);
	
	ResultSet rs = stmt.executeQuery();
	
	List&lt;Contato&gt; lista = new ArrayList&lt;Contato&gt;();
	
	while(rs.next())
	{
		Contato cont = new Contato();
		cont.setIdcontato(rs.getInt("idcontato"));
		cont.setNome(rs.getString("nome"));
		cont.setEmail(rs.getString("email"));
		cont.setEndereco(rs.getString("endereco"));
		
		lista.add(cont);
	}
	rs.close();
	stmt.close();
	return lista;
}

}
[/code]
CLASSE DO SERVLET

[code]package br.com.caelum.mvc.logica;

import java.util.List;

import javax.servlet.RequestDispatcher;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.caelum.agenda.dao.ContatoDAO;
import br.com.caelum.agenda.modelo.Contato;

public class BuscaContatoLogic implements Logica {

@Override
public void executa(HttpServletRequest req, HttpServletResponse res)
		throws Exception {
	
	
	ContatoDAO dao = new ContatoDAO();
	
	List&lt;Contato&gt; lista = dao.buscaContato(req.getParameter("nome"));
    req.getSession().setAttribute("lista", lista);
    
    RequestDispatcher rd = req.getRequestDispatcher("/busca-contato.jsp");
	rd.forward(req, res);
	
}

}
[/code]
PÁGINA JSP

[code]<%@ page language=“java” contentType=“text/html; charset=ISO-8859-1”
pageEncoding=“ISO-8859-1”%>

<%@ taglib uri=“http://java.sun.com/jsp/jstl/core” prefix=“c” %>

<html>
<head>
<meta http-equiv=“Content-Type” content=“text/html; charset=ISO-8859-1”>
<title>Busca de Contatos</title>
</head>
<body>
<c:import url=“cabecalho.jsp”></c:import>

      &lt;form action="mvc" method="post"&gt;
      &lt;input type="text" name="nome"&gt; &lt;input type="submit" value="Buscar"&gt;
          &lt;table border="1"&gt;
          
              &lt;c:forEach items="${sessionScope.lista}" var="lista" &gt;    
                  &lt;td&gt;${lista.nome}&lt;/td&gt;  
                  &lt;td&gt;${lista.email}&lt;/td&gt;
                  &lt;td&gt;${lista.endereco}&lt;/td&gt;
              &lt;/c:forEach&gt; 
          
          &lt;input type="hidden" name="logica" value="BuscaContatoLogic"/&gt;
          &lt;/table&gt;
      
      &lt;/form&gt;
      &lt;c:import url="rodape.jsp"&gt;&lt;/c:import&gt;

</body>
</html>[/code]

O arquivo XML continua com o mesmo padrão de mapeamento, onde ele mapeia o Servlet Controller, que é responsável para reconhecer e executar os Servlet do pacote lógica…

Vlw.

:thumbup:

Olá pessoal, boa tarde!

Reabrindo o post pra dizer que funcionou perfeito pra mim aqui…só que gostaria de saber como faço pra incluir o campo de data na lista?!

Estou tentando formatar pra sair certinho mas não tá rolando!!

no ContatoDAO estou formatando a data com o Calendar, dessa forma:

Calendar data = Calendar.getInstance(); data.setTime(rs.getDate("dataNascimento")); contato.setDataNascimento(data);

e na JSP estou incluindo mais uma coluna, dessa maneira:

<td>${lista.dataNascimento.time}</td>

a saída na lista está no formato padrão em inglês:

Wed Jun 22 00:00:00 BRT 1983

poderiam me dar uma ajuda com isso??

obrigado!!!

O proprio JSTL tem uma tag para formatar a data.

&lt;fmt:formatDate value="${lista.dataNascimento}" type="both" pattern="dd/MM/yyyy" dateStyle="full"/&gt;

Opa Romarcio, valeu pela resposta rápida!!

Tentei isso tbm mas não deu certo…indo por analogia as outras tgs do projeto!!

Não é exibido nada quando coloco essa tag!!!

Vou continuar buscando uma solução…

Se descobrir algo diferente, por favor, posta aê!!!

Obrigado!!!

Bem, desde cedo, estou quebrando a cabeça com isso, a minha classe DAO tá certa, creio que o problema esteja no servlet, pois creio que estou passando algum coisa errada. Por favor, alguém me ajuda!
Está grandão “assim” porque as classes estão completas.

Classe DAO

[code]package DAO;

import java.sql.Connection;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;

import model.Pessoa;

public class PessoaDAO {

//Método de ' Inserir '
public void inserir(Connection conn, Pessoa pessoa) throws SQLException, Exception {
	PreparedStatement stmt 	= null;
					
	try{
	
		stmt = conn.prepareStatement("INSERT INTO human (cpf, nome, telefone, endereco) VALUES (?, ?, ?, ?)");
		
		stmt.setString(1, pessoa.getCpf());
		stmt.setString(2, pessoa.getNome());
		stmt.setString(3, pessoa.getTelefone());
		stmt.setString(4, pessoa.getEndereco());
		
		stmt.execute();
				
	} catch(Exception e){
		e.printStackTrace();
		
	} finally{
		stmt.close();
	}
}

//Método de ' mostrar um dado'
public Pessoa pesquisa(Connection connection) {
	PreparedStatement stmt = null;
	ResultSet resultSet = null;
	String QUERY = "SELECT * FROM pessoa WHERE id=?";
	Pessoa pessoa = null;
	
	try{
		pessoa = new Pessoa();
		stmt = connection.prepareStatement(QUERY);
		stmt.setLong(1, pessoa.getId());
		
		resultSet = stmt.executeQuery();
		
		while (resultSet.next()) {
			pessoa.setId(resultSet.getLong("id"));
			pessoa.setCpf(resultSet.getString("cpf"));
			pessoa.setNome(resultSet.getString("nome"));
			pessoa.setTelefone(resultSet.getString("telefone"));
			pessoa.setEndereco(resultSet.getString("endereco"));
		}
		
	}catch(Exception e){
		e.printStackTrace();
	}
	finally{
		try{
			stmt.close();
			resultSet.close();
			connection.close();
			
		}catch (Exception e){
			e.printStackTrace();
		}
	}
	return pessoa;
	
}

//Método de ' mostrar todos os dados '
public ArrayList<Pessoa> selectAll(Connection connection) throws SQLException{
	
	ArrayList<Pessoa> pessoaLista = new ArrayList<Pessoa>();
	PreparedStatement stmt = null;
	ResultSet resultSet = null;
	String QUERY = "SELECT * FROM pessoa";
	Pessoa pessoa = null;
	
	try{
		
		stmt = connection.prepareStatement(QUERY);
		resultSet = stmt.executeQuery();
		
		while (resultSet.next()) {
			pessoa = new Pessoa();
		
			pessoa.setId(resultSet.getLong("id"));
			pessoa.setCpf(resultSet.getString("cpf"));
			pessoa.setNome(resultSet.getString("nome"));
			pessoa.setTelefone(resultSet.getString("telefone"));
			pessoa.setEndereco(resultSet.getString("endereco"));
			
			pessoaLista.add(pessoa);
		}
		
	}catch(Exception e){
		e.printStackTrace();
	}
	finally{
		stmt.close();
		resultSet.close();
		connection.close();	
	}
	
	return pessoaLista;
}

//Método de ' Deletar '
public void delete(Connection connection, Pessoa pessoa) {
	
	PreparedStatement stmt = null;
	String QUERY = "DELETE FROM pessoa WHERE id?";
	
	try{
		
		stmt = connection.prepareStatement(QUERY);
		
		stmt.setLong(1, pessoa.getId());
		stmt.setString(1, pessoa.getCpf());
		stmt.setString(2, pessoa.getNome());
		stmt.setString(3, pessoa.getTelefone());
		stmt.setString(4, pessoa.getEndereco());
		
		stmt.executeUpdate();
		
	}catch(Exception e){
		e.printStackTrace();
	}
	finally{
		try{
			stmt.close();
		}catch(Exception e){
			e.printStackTrace();
		}
	}
}

//Método de ' Atualizar '
public void atualizar(Connection connection, Pessoa pessoa){
	PreparedStatement stmt = null;
	String QUERY = "UPDATE pessoa set id=?, nome=? WHERE id=?";
	
	try{
		stmt = connection.prepareStatement(QUERY);
		
		stmt.setString(1, pessoa.getCpf());
		stmt.setString(2, pessoa.getNome());
		stmt.setString(3, pessoa.getTelefone());
		stmt.setString(4, pessoa.getEndereco());
		
		stmt.executeUpdate();
		
	}catch(Exception e ){
		e.printStackTrace();
	}
	
}

}
[/code]

Servlet

package control;

import java.io.IOException;
import java.sql.Connection;
import java.sql.SQLException;
import java.util.ArrayList;

import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import DAO.FabricaConexao;
import DAO.PessoaDAO;
import model.Pessoa;

@WebServlet(name = "index", urlPatterns = { "/index" })
public class ServletInsert extends HttpServlet {
	private static final long serialVersionUID = 1L;

	public ServletInsert() {
        super();

    }
	
	public void popularObjeto(HttpServletRequest request, HttpServletResponse response, Pessoa pessoa) throws ServletException, IOException{
		try{
			
			pessoa.setId(Long.valueOf((request.getParameter("id")!= null && !request.getParameter("id").isEmpty()) ? request.getParameter("id") : "0"));
			pessoa.setCpf((request.getParameter("cpf")!= null && !request.getParameter("cpf").isEmpty()) ? request.getParameter("cpf") : "");
			pessoa.setNome((request.getParameter("nome")!= null && !request.getParameter("nome").isEmpty()) ? request.getParameter("nome") : "");
			pessoa.setTelefone((request.getParameter("telefone")!= null && !request.getParameter("telefone").isEmpty()) ? request.getParameter("telefone") : "");
			pessoa.setEndereco((request.getParameter("endereco")!= null && !request.getParameter("endereco").isEmpty()) ? request.getParameter("endereco") : "");
			
		}catch(Exception e ){
			e.printStackTrace();
		}
		
	}
	
	@Override
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		Pessoa pessoa = new Pessoa();
		FabricaConexao conexao = new FabricaConexao();
		Connection connection = conexao.getConnection();		
		PessoaDAO pDao = new PessoaDAO();
		
		String acao = request.getParameter("acao");
		
		try {
			if(acao != null && !acao.isEmpty()){
				if(acao.equals("Cadastrar")){
					popularObjeto(request, response, pessoa);
					pDao.inserir(connection, pessoa);
								
				}
				if(acao.equals("Listar")){
					ArrayList<Pessoa> pessoaLista = pDao.selectAll(connection);
				
					RequestDispatcher listar = request.getRequestDispatcher("listar.jsp");
					request.setAttribute("pessoa", pessoaLista);
					listar.forward(request, response);
					
				}
			}
			
		} catch (SQLException e) {
			e.printStackTrace();
			
		} catch (Exception e) {
			e.printStackTrace();
		}
		finally{
			try{
				if(connection!=null && !connection.isClosed()){
					connection.close();
				}
			}catch(Exception e){
				e.printStackTrace();
			}
		}
		
	}

	protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

	}
	protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

	}

}

e o meu JSP.

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Registros</title>
</head>
<body>
<table border="1px">

		<tr align ="center" >
			<td><label>ID</label></td>
			<td><label>CPF</label></td>
			<td><label>Nome</label></td>
			<td><label>Telefone</label></td>
			<td><label>Endereço</label></td>
		</tr>
		
		
	<c:forEach var="pessoa" items="${pessoa}"> 
	   <tr align="center">
	   		<td>${pessoa.id} </td>
	   		<td>${pessoa.cpf}</td>
	   		<td>${pessoa.nome}</td>
	   		<td>${pessoa.telefone}</td>
	   		<td>${pessoa.endereco}</td>
	   				
	   </tr>	
	</c:forEach>
</table>

</body>
</html>