Boa tarde a todos,
Estou estudando um pouco de desenvolvimento web com Java pela apostila da Caelum fj21, porém ao chegar no tópico que aborda Servlet capítulo 5 página 51, conforme orientado na apostila criei as seguintes classes: ConectionFactory( que vai instanciar novas conexões ao banco), a classe ContatoDAO (persistência dos dados), ContatoJava(métodos get e set) e uma outra Classe AdicionaContatoServlet, após na pasta WebContent uma página html estática chamada adiciona-contato.html para usuário inserir informações de nome, endereço, email etc e após mapear a servlet criada no arquivo web.xml na pasta web-inf dentro de webcontent, fiz exatamente como mostrado na apostila, revisei todos os códigos criados várias vezes e não consegui identificar o erro de alguma digitação errada ou problema no código apresentado, dessa forma ocorre o seguinte erro ao preencher as informações solicitadas que aparecem no browser.
type Status report
message /agenda-fj21/adicionaContato
description The requested resource (/agenda-fj21/adicionaContato) is not available.
Já verifiquei o mapeamento da servlet inclusive no arquivo web.xml.
Foi instalado também o drive do MYSQL NO ECLIPSE, juntamente com o servidor web TomCat.
Poderia ser algum erro de lógica de programação nas classes?. Seque abaixo o código das classes criadas.
package br.com.caelum.jdbc;
import java.sql.Connection;
import java.sql.DriverManager;
import java.sql.SQLException;
public class ConnectionFactory {
public Connection getConnection() {
System.out.println(“Conectando ao banco”);
try{
return DriverManager.getConnection(“jdbc:mysql://localhost/fj21”, “root”, “admin”);
}catch(SQLException e){
throw new RuntimeException(e);
}
}
}
package br.com.caelum.jdbc.modelo;
import java.util.Calendar;
public class Contato {
private Long id;
private String nome;
private String email;
private String endereco;
private Calendar dataNascimento;
//métodos get e set para id, nome, email, endereço e dataNascimento
public String getNome(){
return this.nome;
}
public void setNome(String novo){
this.nome = novo;
}
public String getEmail(){
return this.email;
}
public void setEmail(String novo){
this.email = novo;
}
public String getEndereco(){
return this.endereco;
}
public void setEndereco(String novo){
this.endereco = novo;
}
public Long getId(){
return this.id;
}
public void setId(Long novo){
this.id = novo;
}
public Calendar getdataNascimento(){
return this.dataNascimento;
}
public void setdataNascimento(Calendar novo){
this.dataNascimento = novo;
}
}
package br.com.caelum.jdbc.DAO;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import br.com.caelum.jdbc.ConnectionFactory;
import br.com.caelum.jdbc.modelo.Contato;
import com.mysql.jdbc.Connection;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;
public class ContatoDAO {
//A conexão com o banco de dados
private Connection connection;
public ContatoDAO(){
this.connection = (Connection) new ConnectionFactory().getConnection();
}
public void adiciona(Contato contato)
{
String sql = "insert into contatos (nome,email,endereco,dataNascimento) values (?,?,?,?)";
try{
//prepared statement para inserção
PreparedStatement stmt = connection.prepareStatement(sql);
//seta os valores
stmt.setString(1,contato.getNome());
stmt.setString(2,contato.getEmail());
stmt.setString(3,contato.getEndereco());
stmt.setDate(4,new Date(contato.getdataNascimento().getTimeInMillis()));
//executa
stmt.execute();
stmt.close();
}catch (SQLException e){
throw new RuntimeException(e);
}
}
public void altera(Contato contato){
String sql = "update contatos set nome=?, email=?, endereco=?, dataNascimento=? where id=?";
try {
PreparedStatement stmt = connection.prepareStatement(sql);
stmt.setString(1,contato.getNome());
stmt.setString(2, contato.getEndereco());
stmt.setString(3, contato.getEmail());
stmt.setDate(4,new Date(contato.getdataNascimento().getTimeInMillis()));
//stmt.setLong(5,contato.getId());
stmt.execute();
stmt.close();
} catch (SQLException e){
throw new RuntimeException(e);
}
}
public void remove(Contato contato){
try{
PreparedStatement stmt = connection.prepareStatement("delete from contatos where id=?");
stmt.setLong(1, contato.getId());
stmt.execute();
stmt.close();
}catch (SQLException e) {
throw new RuntimeException(e);
}
}
public List<Contato> getLista(){
try{
List<Contato> contatos = new ArrayList<Contato>();
PreparedStatement stmt = this.connection.prepareStatement("select * from contatos");
ResultSet rs = stmt.executeQuery();
while (rs.next()){
//criando o objeto contato
Contato contato = new Contato();
contato.setNome(rs.getString("nome"));
contato.setEmail(rs.getString("email"));
contato.setEndereco(rs.getString("endereco"));
//montando a data através do calendar
Calendar data = Calendar.getInstance();
data.setTime(rs.getDate("dataNascimento"));
contato.setdataNascimento(data);
//adicionando o objeto a lista
contatos.add(contato);
}
rs.close();
stmt.close();
return contatos;
} catch (SQLException e){
throw new RuntimeException(e);
}
}
}
package br.com.caelum.agenda.servlet;
import java.io.IOException;
import java.io.PrintWriter;
import java.sql.Date;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.caelum.jdbc.DAO.ContatoDAO;
import br.com.caelum.jdbc.modelo.Contato;
import com.sun.org.apache.xerces.internal.impl.xpath.regex.ParseException;
public class AdicionaContatoServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws IOException, ServletException, java.text.ParseException {
// busca o writer
PrintWriter out = response.getWriter();
// buscando os parâmetros no request
String nome = request.getParameter("nome");
String endereco = request.getParameter("endereco");
String email = request.getParameter("email");
String dataEmTexto = request.getParameter("dataNascimento");
Calendar dataNascimento = null;
// fazendo a conversão da data
try {
Date date = (Date) new SimpleDateFormat("dd/MM/yyyy").parse(dataEmTexto);
dataNascimento = Calendar.getInstance();
dataNascimento.setTime(date);
} catch (ParseException e) {
out.println("Erro de conversão da data");
return; //para a execução do método
}
// monta um objeto contato
Contato contato = new Contato();
contato.setNome(nome);
contato.setEndereco(endereco);
contato.setEmail(email);
contato.setdataNascimento(dataNascimento);
// salva o contato
ContatoDAO dao = new ContatoDAO();
dao.adiciona(contato);
// imprime o nome do contato que foi adicionado
out.println("<html>");
out.println("<body>");
out.println("Contato " + contato.getNome() + " adicionado com sucesso");
out.println("</body>");
out.println("</html>");
}
}
arquivo HTML
Nome:E-mail:
Endereço:
Data Nascimento:
ARQUIVO WEB.XML MAPEADO
?xml version=“1.0” encoding=“UTF-8”?>
agenda-fj21
index.html
index.htm
index.jsp
default.html
default.htm
default.jsp
servletAdicionaContatoServlet
br.com.caelum.agenda.servlet.AdicionaContatoServlet
servletAdicionaContatoServlet
/adiciona
Desde já agradeço a todos pela ajuda e boa vontade.