HTTP Status 404 - Servlet AdicionaContato is not available

10 respostas
R

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.

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
Essa e minha servlet: ==================================================
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>");
	}
}
Meu codigo adiciona-contato.html
<html>
	<head>
		<title>Insert title here</title>
	</head>
		<body>
			<form action="adicionaContato">
				Nome: <input type="text" name="nome"/><br/>
				E-Mail:<input type="text" name="email"/><br/>
				Endereço:<input type="text" name="endereco"/><br>
				Data Nascimento:<input type="text" name="dataNascimento"/><br/>
			
				<input type="submit" value="Gravar"/>
			</form>
		</body>
</html>
meu WEB.XML
<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:web="http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd" id="WebApp_ID" version="2.5">
  <display-name>fj21-agenda</display-name>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>servletOiMundo</servlet-name>
    <servlet-class>br.com.caelum.servlet.OiMundo</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>servletOiMundo</servlet-name>
    <url-pattern>/oi</url-pattern>
  </servlet-mapping>
  
  <servlet>
    <servlet-name>AdicionaContato</servlet-name>
    <servlet-class>br.com.caelum.servlet.AdicionaContatoServlet</servlet-class>
  </servlet>
  
  <servlet-mapping>
    <servlet-name>AdicionaContato</servlet-name>
    <url-pattern>/adicionaContato</url-pattern>
  </servlet-mapping>
</web-app>

10 Respostas

N

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

R

Bom dia norbAns

a URL q apresenta e a seguinte:

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

N

Rafael Kleber:
Bom dia norbAns

a URL q apresenta e a seguinte:

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

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

A servlet servletOiMundo funciona normalmente?

R

Sim o exemplo servletOiMundo esta funcionando normalmente :frowning:

N

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

R

agora apresento um outro erro

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
B

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>
R

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

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
G

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.

R

Ola Gustavo Marques

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

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;
	}

}

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

Criado 29 de novembro de 2012
Ultima resposta 29 de nov. de 2012
Respostas 10
Participantes 4