Boa noite colegas.
Estou fazendo alguns exercícios de conexão ao banco de dados através de servlets seguindo a orientação da apostila fj21 da caelum. Só que quando clico em gravar dá erro 500.
Fiz o seguinte:
1-Estou usando netbeans e copiei o driver mysql-connector 5.1.25 para uma pasta lib, no projeto adicionei o jar a biblioteca.
2-Na guia de serviços do projeto configurei conforme o tutorial http://www.youtube.com/watch?v=ItklwiIo0GI só que para mysql.
Quando uso uma classe de teste com método main funciona normalmente só que quando preencho as informações para o formulário e mando para a servlet acontece o erro mencionado.
Minha servlet é uma classe que extende httpservlet:
[code]/*
- To change this template, choose Tools | Templates
- and open the template in the editor.
*/
package br.com.caelum.agenda.servlet;
import br.com.caelum.jdbc.dao.ContatoDAO;
import br.com.caelum.jdbc.modelo.Contato;
import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.util.Date;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
/**
*
-
@author 18122012
*/
public class AdicionaContatoServlet extends HttpServlet {/**
*-
@param request
-
@param response
-
@throws ServletException
-
@throws IOException
*/
@Override
protected void service(HttpServletRequest request, HttpServletResponse response)
throws ServletException, IOException {
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”);
}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]
Está representa a fábrica de conexões:
-
[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 {
System.out.println("Banco conectado");
// jdbc:mysql://ip/nome_do_banco, nome_do_usu�rio, senha_do_usu�rio
return DriverManager.getConnection("jdbc:mysql://localhost/fj21", "root", "root");
} catch (SQLException e) {
throw new RuntimeException(e);
}
}
}[/code]
Minha página com os formulários
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html>
<head>
<title></title>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
</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>
E as configurações do web.xml:
[code]<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://java.sun.com/xml/ns/javaee"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_3_0.xsd"
version=“3.0”>
<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>
</web-app>
[/code]
O web.xml está idêntico ao exercício inclusive todos os diretórios
O erro é o seguinte
[code]HTTP Status 500 - java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
type Exception report
message java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
description The server encountered an internal error that prevented it from fulfilling this request.
exception
java.lang.RuntimeException: java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:16)
br.com.caelum.jdbc.dao.ContatoDAO.<init>(ContatoDAO.java:20)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:57)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
root cause
java.sql.SQLException: No suitable driver found for jdbc:mysql://localhost/fj21
java.sql.DriverManager.getConnection(DriverManager.java:596)
java.sql.DriverManager.getConnection(DriverManager.java:215)
br.com.caelum.jdbc.ConnectionFactory.getConnection(ConnectionFactory.java:14)
br.com.caelum.jdbc.dao.ContatoDAO.<init>(ContatoDAO.java:20)
br.com.caelum.agenda.servlet.AdicionaContatoServlet.service(AdicionaContatoServlet.java:57)
javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
note The full stack trace of the root cause is available in the Apache Tomcat/7.0.34 logs.
Apache Tomcat/7.0.34[/code]
OBS: o banco jf21 está ativo no netbeans.
Não sei o que tentar afinal o erro foi do formulario que não chamou a servlet correta, a configuração do xml, a servlet que não pode ficar dentro de um diretório ou driver não encontrado o que não têm lógica se funciona com testes isolados.
Agradeço quem puder ajudar não sei mais o que fazer.