HTTP Status 500

Oi galera, estou desenvolvendo o sistema do capítulo 5.9 da fj21 da caelum, e estou deparando com o seguinte erro:

  • Ao preencher o cadastro do usuário, quando eu clico para gravar no banco, me retorna isso:
exception
java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Incorrect database name 'fj21/'
	br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:18)
	br.com.caelum.dao.ContatoDAO.<init>(ContatoDAO.java:20)
	br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:45)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)

root cause
com.mysql.jdbc.exceptions.jdbc4.MySQLSyntaxErrorException: Incorrect database name 'fj21/'
	sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	java.lang.reflect.Constructor.newInstance(Unknown Source)
	com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
	com.mysql.jdbc.Util.getInstance(Util.java:384)
	com.mysql.jdbc.SQLError.createSQLException(SQLError.java:1054)
	com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3566)
	com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:3498)
	com.mysql.jdbc.MysqlIO.checkErrorPacket(MysqlIO.java:919)
	com.mysql.jdbc.MysqlIO.secureAuth411(MysqlIO.java:4004)
	com.mysql.jdbc.MysqlIO.doHandshake(MysqlIO.java:1284)
	com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2312)
	com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2122)
	com.mysql.jdbc.ConnectionImpl.<init>(ConnectionImpl.java:774)
	com.mysql.jdbc.JDBC4Connection.<init>(JDBC4Connection.java:49)
	sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
	sun.reflect.NativeConstructorAccessorImpl.newInstance(Unknown Source)
	sun.reflect.DelegatingConstructorAccessorImpl.newInstance(Unknown Source)
	java.lang.reflect.Constructor.newInstance(Unknown Source)
	com.mysql.jdbc.Util.handleNewInstance(Util.java:409)
	com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:375)
	com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:289)
	java.sql.DriverManager.getConnection(Unknown Source)
	java.sql.DriverManager.getConnection(Unknown Source)
	br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:14)
	br.com.caelum.dao.ContatoDAO.<init>(ContatoDAO.java:20)
	br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:45)
	javax.servlet.http.HttpServlet.service(HttpServlet.java:722)[/code]

Essas são minhas classes java:

ConnectionFactory.java
[code]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", "");
		} 
		
		catch(SQLException e) {
			throw new RuntimeException(e);
		}
		
	}
	
}

AdicionaContatoServlet.java

[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.dao.ContatoDAO;
import br.com.caelum.modelo.Contato;

public class AdicionaContatoServlet extends HttpServlet {

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

	PrintWriter out = response.getWriter();

	String nome = request.getParameter("nome");
	String endereco = request.getParameter("endereco");
	String email = request.getParameter("email");
	String dataEmTexto = request.getParameter("dataNascimento");
	Calendar dataNascimento = null;

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

	Contato contato = new Contato();
	contato.setNome(nome);
	contato.setEndereco(endereco);
	contato.setEmail(email);
	contato.setDataNascimento(dataNascimento);

	ContatoDAO dao = new ContatoDAO();
	dao.adiciona(contato);

	out.println("<html>");
	out.println("<body>");
	out.println("Contato " + contato.getNome() + " adicionado com sucesso");
	out.println("</body>");
	out.println("</html>");
}

}[/code]

ContatoDAO.java

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

import java.sql.Connection;
import java.sql.Date;
import java.sql.PreparedStatement;
import java.sql.ResultSet;
import java.sql.SQLException;
import java.util.ArrayList;
import java.util.Calendar;
import java.util.List;

import br.com.caelum.jdbc.ConnectionFactory;
import br.com.caelum.modelo.Contato;

public class ContatoDAO extends DAOException {

private Connection connection;

public ContatoDAO() {
	this.connection = new ConnectionFactory().getConnection();
}

public void adiciona(Contato contato) {
	
	String sql = "insert into contatos (nome,email,endereco,dataNascimento) values (?,?,?,?)";
	
	try {
	
		PreparedStatement stmt = connection.prepareStatement(sql);

		stmt.setString(1,contato.getNome());
		stmt.setString(2,contato.getEmail());
		stmt.setString(3,contato.getEndereco());
		stmt.setDate(4, new Date( contato.getDataNascimento().getTimeInMillis() ));
		
		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()) {
			Contato contato = new Contato();
			contato.setId(rs.getLong("id"));
			contato.setNome(rs.getString("nome"));
			contato.setEmail(rs.getString("email"));
			contato.setEndereco(rs.getString("endereco"));
			
			Calendar data = Calendar.getInstance();
			data.setTime(rs.getDate("dataNascimento"));
			contato.setDataNascimento(data);
			
			contatos.add(contato);
		}
		
		rs.close();
		stmt.close();
		return contatos;
	} 
	
	catch (SQLException e) {
		throw new RuntimeException(e);
	}

}

}[/code]

E essas meus html e xml:

adiciona-contato.html

[code]


Nome:

E-mail:

Endereço:

Data Nascimento:



[/code]

web.xml

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

<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>primeiraServlet</servlet-name>
	<servlet-class>br.com.caelum.servlet.OiMundo</servlet-class>
</servlet>

<servlet-mapping>
	<servlet-name>primeiraServlet</servlet-name>
	<url-pattern>/oi</url-pattern>
</servlet-mapping>

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

<servlet-mapping>
	<servlet-name>AdicionaContato</servlet-name>
	<url-pattern>/adicionaContato</url-pattern>
</servlet-mapping>

[/code]

Valeu aí gente

Já descobri o que era!
Era o seguinte:

classe ConnectionFactory

return DriverManager.getConnection(“jdbc:mysql://localhost/fj21”, “root”, “”);
ao inves de:
return DriverManager.getConnection(“jdbc:mysql://localhost/fj21/”, “root”, “”);

Aquela barra fez a diferença rs
valeu