Problema com Servlet

2 respostas
F

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.

2 Respostas

S

Se você puder colocar seu código entre as tags code nos ajuda bastante pra ler seu código e tentarmos solucionar o problema.
Tentou reiniciar seu servlet container ???

furutani

Não tem nenhuma servlet mapeado para a url /adicionaContato a que tem está assim
/adiciona
Então tente acessar com a URL /agenda-fj21/adiciona
Sem o Contato na frente

Criado 6 de maio de 2010
Ultima resposta 6 de mai. de 2010
Respostas 2
Participantes 3