HTTP Status 404 - Servlet AdicionaContato is not available

Bom dia!

Estou iniciando o meu estudos em JSP e decidi começar pela apostila da caelum FJ21 mais estou tendo probleminha com o exercicio 5.9 que apresenta o seguinte erro abaixo: Se alguem poder me ajudar eu agradeço pois ja fiz e apaguei e fiz novamente e apresenta o mesmo erro, ja coloquei o driver do mysql na pasta do WEB-INF/LIB mesmo assim apresenta erro.

[code]HTTP Status 404 - Servlet AdicionaContato is not available


type Status report

message Servlet AdicionaContato is not available

description The requested resource is not available.


Apache Tomcat/6.0.36[/code]

Essa e minha servlet:

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

import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

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

public class AdicionaContatoServlet extends HttpServlet {
protected void service(HttpServletRequest request, HttpServletResponse response)
throws IOException,ServletException{

	//buscar 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 = 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);
	
	//salava 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>");
}

}
[/code]

Meu codigo adiciona-contato.html

[code]

Insert title here Nome:
E-Mail:
Endereço:
Data Nascimento:
			<input type="submit" value="Gravar"/>
		</form>
	</body>
[/code]

meu WEB.XML

[code]<?xml version="1.0" encoding="UTF-8"?>

fj21-agenda

index.html
index.htm
index.jsp
default.html
default.htm
default.jsp


servletOiMundo
br.com.caelum.servlet.OiMundo


servletOiMundo
/oi

AdicionaContato br.com.caelum.servlet.AdicionaContatoServlet AdicionaContato /adicionaContato [/code]

Ao se deparar com esse erro, qual é a url completa que aparece na barra de endereços do seu navegador?

Bom dia norbAns

a URL q apresenta e a seguinte:

http://localhost:8080/fj21-agenda/adicionaContato?nome=Rafael+Kleber&email=rafael@teste.com&endereco=Velho+Horizonte&dataNascimento=10%2F05%2F1989

[quote=Rafael Kleber]Bom dia norbAns

a URL q apresenta e a seguinte:

http://localhost:8080/fj21-agenda/adicionaContato?nome=Rafael+Kleber&email=rafael@teste.com&endereco=Velho+Horizonte&dataNascimento=10%2F05%2F1989[/quote]

Estranho, aparentemente está tudo certo com o mapeamento no web.xml

A servlet servletOiMundo funciona normalmente?

Sim o exemplo servletOiMundo esta funcionando normalmente :frowning:

Faça um teste deixando somente a servlet adicionaContato mapeado no web.xml.

agora apresento um outro erro

[code]HTTP Status 500 - Wrapper cannot find servlet class br.com.caelum.servlet.AdicionaContatoServlet or a class it depends on


type Exception report

message Wrapper cannot find servlet class br.com.caelum.servlet.AdicionaContatoServlet or a class it depends on

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Wrapper cannot find servlet class br.com.caelum.servlet.AdicionaContatoServlet or a class it depends on
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Unknown Source)

root cause

java.lang.ClassNotFoundException: br.com.caelum.servlet.AdicionaContatoServlet
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1680)
org.apache.catalina.loader.WebappClassLoader.loadClass(WebappClassLoader.java:1526)
org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:103)
org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:861)
org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:606)
org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
java.lang.Thread.run(Unknown Source)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.36 logs.


Apache Tomcat/6.0.36[/code]

O caminho que você está instanciando está errado.

Veja que não está encontrando a classe:
java.lang.ClassNotFoundException: br.com.caelum.servlet.AdicionaContatoServlet

Na declaração do package está:
br.com.caelum.agenda.servlet

Portanto você deve setar o valor correto no web.xml:
De

 <servlet>  
    <servlet-name>AdicionaContato</servlet-name>  
    <servlet-class>br.com.caelum.servlet.AdicionaContatoServlet</servlet-class>  
  </servlet> 

PARA

 <servlet>  
    <servlet-name>AdicionaContato</servlet-name>  
    <servlet-class>br.com.caelum.agenda.servlet.AdicionaContatoServlet</servlet-class>  
  </servlet> 

biancuzzi obrigado por ter me ajudado! Só que agora esta apresentando um outro erro:

[code]
HTTP Status 500 - Servlet execution threw an exception


type Exception report

message Servlet execution threw an exception

description The server encountered an internal error that prevented it from fulfilling this request.

exception

javax.servlet.ServletException: Servlet execution threw an exception

root cause

java.lang.NoClassDefFoundError: br/com/caelum/jdbc/modelo/Contato
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:43)
javax.servlet.http.HttpServlet.service(HttpServlet.java:717)

note The full stack trace of the root cause is available in the Apache Tomcat/6.0.36 logs.


Apache Tomcat/6.0.36[/code]

Então é isso, seu servlet está chamando essa classe Contato e, como ela não existe, seu servlet nem está compilando. Ae não vai aparecer mesmo.

Ola Gustavo Marques

esse classe Contato ela existe só q esta no projeto JDBC essa e a classe

[code]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;
public Long getId() {
	return id;
}
public void setId(Long id) {
	this.id = id;
}
public String getNome() {
	return nome;
}
public void setNome(String nome) {
	this.nome = nome;
}
public String getEmail() {
	return email;
}
public void setEmail(String email) {
	this.email = email;
}
public String getEndereco() {
	return endereco;
}
public void setEndereco(String endereco) {
	this.endereco = endereco;
}
public Calendar getDataNascimento() {
	return dataNascimento;
}
public void setDataNascimento(Calendar dataNascimento) {
	this.dataNascimento = dataNascimento;
}

}
[/code]

no Servlet estou importando ela mais acho q o erro esta no import pois não esta localizando essa classe. será q se eu colocar a classe dentro do mesmo projeto aonde esta o meu servlet funciona?

e obrigado pela atenção