Galera, a minha conexão com o banco de dados não completa, eu já tentei resolver o erro de todas as formas que conheço, mas não consigo.
Eu criei a seguinte página HTML (add-contact.html):
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Adicionar Contato</title>
</head>
<body>
<form action = "addContact">
Name: <input type="text" name="nome" /><br />
E-mail: <input type="text" name="email" /><br />
Adress: <input type="text" name="endereco"><br />
Birth date: <input type="text" name="dataNascimento" /><br />
<input type="submit" value="Gravar"/> <input type="reset" value="Limpar">
</form>
</body>
</html>
Esse é o código da Servlet que vai tratar da requisição:
@WebServlet("/addContact")
public class AdicionaContatoServlet extends HttpServlet {
@Override
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
Calendar dataNascimento = null;
PrintWriter out = response.getWriter();
String parametroNome = request.getParameter("nome");
String paramentroEmail = request.getParameter("email");
String parametroEndereco = request.getParameter("endereco");
//String paramentroDataNascimento = request.getParameter("dataNascimento");
String dataEmTexto = request.getParameter("dataNascimento");
try {
Date date = new SimpleDateFormat("dd/MM/yyyy").parse(dataEmTexto);
dataNascimento = Calendar.getInstance();
dataNascimento.setTime(date);
} catch (ParseException e) {
out.println("Erro durante conversão");
return; // finalizar execução do método
}
Contato contato = new Contato();
contato.setNome(parametroNome);
contato.setEmail(paramentroEmail);
contato.setEndereco(parametroEndereco);
contato.setDataNascimento(dataNascimento);
ContatoDAO contatoDAO = new ContatoDAO();
contatoDAO.insert(contato);
out.println("<html>");
out.println("<body>");
out.println("Contato " + contato.getNome() + " adicionado com sucesso.");
out.println("</body>");
out.println("</html>");
}
}
Dentro do construtor de ContatoDAO tem o seguinte código:
public ContatoDAO() {
conn = new ConnectionFactory().getConnection();
}
E esse é a classe ConnectionFactory:
[code]public class ConnectionFactory {
private String usuario = “root”;
private String senha = “barros1996”;
private String url = “jdbc:mysql://localhost/fj21”;
private Connection connection;
public Connection getConnection() {
try {
System.out.println("Connecting...");
connection = DriverManager.getConnection(url, usuario, senha);
System.out.println("Connected.");
return connection;
} catch (SQLException e) {
JOptionPane.showMessageDialog(null, "Um erro ocorreu.");
throw new RuntimeException(e.getMessage());
}
}
}[/code]
Quando eu entro na página add-contact.html, eu preencho todos os dados do form, mas quando eu envio os dados a conexão não completa, a página só fica carregando e no console do Eclipse aparece só ‘Connecting…’ (do método getConnection()), ou seja, ele não passo desse trecho do método getConnection():
connection = DriverManager.getConnection(url, usuario, senha);
Na seguinte classe, sem rodar pelo servidor, roda perfeitamente:
public class Main {
public static void main(String[] args) {
Calendar calendar = Calendar.getInstance();
calendar.set(1996, 01, 07);
Contato contato = new Contato();
contato.setNome("Diego");
contato.setEmail("diego@gmail.com");
contato.setEndereco("Não definido");
contato.setDataNascimento(Calendar.getInstance());
ContatoDAO contatoDAO = new ContatoDAO();
contatoDAO.insert(contato);
}
}
Alguém tem ideia do que seja?
@EDIT
Descobri o problema, era o Class.forName() que eu omiti no metódo getConnection().
Minha omissão foi proposital, eu havia lido na apostila de Caelum que o Class.forName() não era mais necessário, mas não li a parte(ou esqueci) em que eles haviam dito que em alguns servidores, como o Tomcat(meu caso), o Class.forName() é necessário, por isso a conexão só não acontecia quando eu tentava executar no servidor.