Olá pessoal, tudo bem, estou utilizando a apostila da caelum e desenvolvendo um projeto java para web, e estou tendo o seguinte problema, eu fiz um scriplet em jsp que deveria aparecer uma lista de contatos de uma agenda, só que quando executo no navegador do eclipse luna ou no google chrome, aparece o seguinte erro:
<%@pagelanguage="java"contentType="text/html; charset=ISO-8859-1"pageEncoding="ISO-8859-1"%><%@pageimport=java.util.*,br.com.caelum.agenda.dao.*,br.com.caelum.agenda.modelo.*%><!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd"><html><head><metahttp-equiv="Content-Type"content="text/html; charset=ISO-8859-1"><title>Insert title here</title></head><body><table><%ContatoDAOdao=newContatoDAO();List<Contato>contatos=dao.getLista();for(Contatocontato:contatos){%><tr><td><%=contato.getNome()%></td><td><%=contato.getEmail()%></td><td><%=contato.getEndereco()%></td><td><%=contato.getDataNascimento().getTime()%></td></tr><%}%></table></body></html>
note The full stack trace of the root cause is available in the Apache Tomcat/8.0.20 logs.
Apache Tomcat/8.0.20
R
Rodrigos_Bragas
Tenho certeza que o problema não é com o seu jsp. O problema mesmo é com o seu servlet-container, digo o Tomcat-8. Sempre que eu tentei usar essa versão 8 do Tomcat, eu tinha esses problemas. Limpa seu ambiente de trabalho, removendo todas as configurações ou qualquer projeto baseado no Tomcat-8 e coloca o Tomcat-7, depois só volta aqui pra dizer que o problema foi resolvido.
C
Carla1
Como eu removo as configuraões no tomcat8?
C
Carla1
Baixei o tomcat 7, porém não consigo adicionar o projeto já existente quando estou configurando o que eu faço?
R
Rodrigos_Bragas
Essas são as configurações que eu disse que você tem que remover.
R
Rodrigos_Bragas
Não da para mim te explicar porque eu não lembro de cabeça onde é, pois eu não uso mais o Java e não tenho nenhuma IDE instalada aqui. Mas faz o seguinte, apenas apaga a pasta do Tomcat-8 e crie um novo workspace para todo o seu ambiente.
Não referencie nenhum projeto antigo que você fez com o Tomcat-8, apenas crie um novo com base somente no Tomcat-7. Você vai poder reaproveitar só as suas classes e arquivos html.
C
Carla1
troquie o tomcat 8 pelo tomcat 7, mas o erro ainda persiste
A
aix
Parace erro de comunicação com o banco de dados, veja pelos logs:
root cause
java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
root cause
java.net.ConnectException: Connection refused: connect
Da uma verificada se o banco esta de pé, vefifica se a variável dao.getLista(); tem dados nesta lista.
R
Rodrigos_Bragas
Continue usando o tomcat 7, que é mais garantia que vai funcionar. Quando não estiver dando nenhum tipo de erro mais, experimente voltar para o Tomcat-8. Se funcionar, OK!, senão… Quem sabe a versão 9 né!
T
TEC.ER
Esta usando jsp puro amigo ? ou mapeando via servelet ?
T
TEC.ER
o erro esta na conexao com o banco verifique a linha 16 mostrada abaixo:
pode ser na pasta WEB-INF/lib ou ate mesmo direto na pasta lib do seu tomcat.
pois olhei a apostila , e momento algum ele fala sobre aonde colocar o jar do banco no projeto, pode ser isso que esteja faltando.
Q
quebrado
Olha o erro > The driver has not received any packets from the server.
Manda o código deste dao > ContatoDAO dao = new ContatoDAO();
E por Deus, não use scriplet.
publicclassContatoDAO{//a conexão com banco de dadosprivateConnectionconnection;publicContatoDAO()throwsClassNotFoundException{this.connection=newConnectionFactory().getConnection();}publicvoidadiciona(Contatocontato){Stringsql="insert into contatos "+"(nome,email,endereco,dataNascimento)"+" values (?,?,?,?)";try{//prepared statement para a inserçãoPreparedStatementstmt=connection.prepareStatement(sql);//seta os valoresstmt.setString(1,contato.getNome());stmt.setString(2,contato.getEmail());stmt.setString(3,contato.getEndereco());stmt.setDate(4,newDate(contato.getDataNascimento().getTimeInMillis()));//executastmt.execute();stmt.close();}catch(SQLExceptione){thrownewRuntimeException(e);}}publicList<Contato>getLista(){try{List<Contato>contatos=newArrayList<Contato>();PreparedStatementstmt=this.connection.prepareStatement("select * from contatos");ResultSetrs=stmt.executeQuery();while(rs.next()){//criando o objeto contatoContatocontato=newContato();contato.setId(rs.getLong("id"));contato.setNome(rs.getString("nome"));contato.setEmail(rs.getString("email"));contato.setEndereco(rs.getString("endereco"));//montando a data através do CalendarCalendardata=Calendar.getInstance();data.setTime(rs.getDate("dataNascimento"));contato.setDataNascimento(data);//adicionando o objeto à listacontatos.add(contato);}rs.close();stmt.close();returncontatos;}catch(SQLExceptione){thrownewRuntimeException(e);}}}
C
Carla1
vou mandar de novo
packagebr.com.caelum.agenda.dao;importjava.sql.Connection;importjava.sql.Date;importjava.sql.PreparedStatement;importjava.sql.ResultSet;importjava.sql.SQLException;importjava.util.ArrayList;importjava.util.Calendar;importjava.util.List;importbr.com.caelum.agenda.ConnectionFactory;importbr.com.caelum.agenda.modelo.Contato;publicclassContatoDAO{//a conexão com banco de dadosprivateConnectionconnection;publicContatoDAO()throwsClassNotFoundException{this.connection=newConnectionFactory().getConnection();}publicvoidadiciona(Contatocontato){Stringsql="insert into contatos "+"(nome,email,endereco,dataNascimento)"+" values (?,?,?,?)";try{//prepared statement para a inserçãoPreparedStatementstmt=connection.prepareStatement(sql);//seta os valoresstmt.setString(1,contato.getNome());stmt.setString(2,contato.getEmail());stmt.setString(3,contato.getEndereco());stmt.setDate(4,newDate(contato.getDataNascimento().getTimeInMillis()));//executastmt.execute();stmt.close();}catch(SQLExceptione){thrownewRuntimeException(e);}}publicList<Contato>getLista(){try{List<Contato>contatos=newArrayList<Contato>();PreparedStatementstmt=this.connection.prepareStatement("select * from contatos");ResultSetrs=stmt.executeQuery();while(rs.next()){//criando o objeto contatoContatocontato=newContato();contato.setId(rs.getLong("id"));contato.setNome(rs.getString("nome"));contato.setEmail(rs.getString("email"));contato.setEndereco(rs.getString("endereco"));//montando a data através do CalendarCalendardata=Calendar.getInstance();data.setTime(rs.getDate("dataNascimento"));contato.setDataNascimento(data);//adicionando o objeto à listacontatos.add(contato);}rs.close();stmt.close();returncontatos;}catch(SQLExceptione){thrownewRuntimeException(e);}}}
C
Carla1
Também tô usando uma classe servlet, chamada AdicionaContatoServlet
T
TEC.ER
Voce esta usando a urlPatterns com a / ? muitas vezes a falta da barra da alguns erros.
C
Carla1
Sim, estou usando: vou postar o código
packagebr.com.caelum.servlet;importjava.io.IOException;importjava.io.PrintWriter;importjava.text.ParseException;importjava.text.SimpleDateFormat;importjava.util.Calendar;importjava.util.Date;importjavax.servlet.ServletException;importjavax.servlet.annotation.WebServlet;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;importbr.com.caelum.agenda.dao.ContatoDAO;importbr.com.caelum.agenda.modelo.Contato;@WebServlet(urlPatterns="/adicionaContato")publicclassAdicionaContatoServletextendsHttpServlet{@Overrideprotectedvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{//busca o writerPrintWriterout=response.getWriter();//buscando os parâmetros no requestStringnome=request.getParameter("nome");Stringendereco=request.getParameter("endereco");Stringemail=request.getParameter("email");StringdataEmTexto=request.getParameter("dataNascimento");CalendardataNascimento=null;//fazendo a conversão da datatry{Datedate=newSimpleDateFormat("dd/MM/yyyy").parse(dataEmTexto);dataNascimento=Calendar.getInstance();dataNascimento.setTime(date);}catch(ParseExceptione){out.println("Erro de conversão de data");return;//para a execução do método}//monta um objeto em contatoContatocontato=newContato();contato.setNome(nome);contato.setEndereco(endereco);contato.setEmail(email);contato.setDataNascimento(dataNascimento);//salva o contatoContatoDAOdao=null;try{dao=newContatoDAO();}catch(ClassNotFoundExceptione){e.printStackTrace();}dao.adiciona(contato);//imprime o nome do contato que foi adicionadoout.println("<html>");out.println("<body>");out.println("Contato "+contato.getNome()+" adicionado com sucesso");out.println("</body>");out.println("</html>");}}
C
Carla1
Fui testar o projeto neste tomcat 7, o que estava funcionando no tomcat 8, agora não está funcionando, deu pau no tomcat 7, o seguinte erro aparece:Server Tomcat v7.0 Server at localhost failed to start.
T
TEC.ER
voce nao startou o servico…
T
TEC.ER
Manda a classe de conexão …
C
Carla1
Classe de conexão
packagebr.com.caelum.agenda;importjava.sql.Connection;importjava.sql.DriverManager;importjava.sql.SQLException;publicclassConnectionFactory{publicConnectiongetConnection()throwsClassNotFoundException{try{//Class.forName("com.mysql.jdbc.Driver");DriverManager.registerDriver(newcom.mysql.jdbc.Driver());//Essa linha foi a diferençareturnDriverManager.getConnection("jdbc:mysql://localhost/fj21","root","admin");}catch(SQLExceptione){e.printStackTrace();thrownewRuntimeException(e);}}}
J
jozadaquebatista
Pequena sugestão:
Tenta isso, no caso o stack trace informa que não houve nenhum pacote enviado de volta do servidor de BD, ou seja, ele tenta conectar na bagaça, mas não recebe resposta, talvez por não estar alcançando o servidor. Verifica se o usuário e a senha estão corretos, e o nome do Banco informado na string de conexao, verifique também se há algum problema no servidor de BD, tenta logar nele pelo prompt/terminal, veja se ele responde aos comandos SQL, no demais, não creio que seja problema no tomcat, já que você trocou e não adiiantou nada.
C
Carla1
A falha permanece, eu reinstalei o mysql server pois o servidor realmente não respondia, o mysql server agora funciona, mas a lista que eu queria não gera e a falha no tomcat ainda continua.
J
jozadaquebatista
sim, mas criou o banco e as tabelas denovo? Ele gera o mesmo stack trace? Se não, posta ele aqui.
C
Carla1
Não, não criei o banco de novo, removi o projeto, reiniciei o tomcat 7 e digitei o link http://localhost:8080 e abriu o site do tomcat, não sei se gera o mesmo stacktrace, como vejo isso?