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:
HTTP Status 500 - /lista-contatos-scriplet.jsp (line: 3, column: 17) quote symbol expected
type Exception report
message /lista-contatos-scriplet.jsp (line: 3, column: 17) quote symbol expected
description The server encountered an internal error that prevented it from fulfilling this request.
exception
org.apache.jasper.JasperException: /lista-contatos-scriplet.jsp (line: 3, column: 17) quote symbol expected
org.apache.jasper.compiler.DefaultErrorHandler.jspError(DefaultErrorHandler.java:41)
org.apache.jasper.compiler.ErrorDispatcher.dispatch(ErrorDispatcher.java:275)
org.apache.jasper.compiler.ErrorDispatcher.jspError(ErrorDispatcher.java:91)
org.apache.jasper.compiler.Parser.parseAttribute(Parser.java:223)
org.apache.jasper.compiler.Parser.parseAttributes(Parser.java:163)
org.apache.jasper.compiler.Parser.parsePageDirective(Parser.java:334)
org.apache.jasper.compiler.Parser.parseDirective(Parser.java:458)
org.apache.jasper.compiler.Parser.parseFileDirectives(Parser.java:1782)
org.apache.jasper.compiler.Parser.parse(Parser.java:136)
org.apache.jasper.compiler.ParserController.doParse(ParserController.java:227)
org.apache.jasper.compiler.ParserController.parseDirectives(ParserController.java:117)
org.apache.jasper.compiler.Compiler.generateJava(Compiler.java:194)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:356)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:336)
org.apache.jasper.compiler.Compiler.compile(Compiler.java:323)
org.apache.jasper.JspCompilationContext.compile(JspCompilationContext.java:570)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:356)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
note The full stack trace of the root cause is available in the Apache Tomcat/8.0.20 logs.
root cause
java.lang.RuntimeException: com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
br.com.caelum.agenda.ConnectionFactory.getConnection(ConnectionFactory.java:16)
br.com.caelum.agenda.dao.ContatoDAO.(ContatoDAO.java:21)
org.apache.jsp.lista_002dcontatos_002dscriplet_jsp._jspService(lista_002dcontatos_002dscriplet_jsp.java:107)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:431)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
root cause
com.mysql.jdbc.exceptions.jdbc4.CommunicationsException: Communications link failure
The last packet sent successfully to the server was 0 milliseconds ago. The driver has not received any packets from the server.
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.lang.reflect.Constructor.newInstance(Constructor.java:526)
com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
com.mysql.jdbc.SQLError.createCommunicationsException(SQLError.java:1116)
com.mysql.jdbc.MysqlIO.(MysqlIO.java:348)
com.mysql.jdbc.ConnectionImpl.coreConnect(ConnectionImpl.java:2391)
com.mysql.jdbc.ConnectionImpl.connectOneTryOnly(ConnectionImpl.java:2428)
com.mysql.jdbc.ConnectionImpl.createNewIO(ConnectionImpl.java:2213)
com.mysql.jdbc.ConnectionImpl.(ConnectionImpl.java:797)
com.mysql.jdbc.JDBC4Connection.(JDBC4Connection.java:47)
sun.reflect.NativeConstructorAccessorImpl.newInstance0(Native Method)
sun.reflect.NativeConstructorAccessorImpl.newInstance(NativeConstructorAccessorImpl.java:57)
sun.reflect.DelegatingConstructorAccessorImpl.newInstance(DelegatingConstructorAccessorImpl.java:45)
java.lang.reflect.Constructor.newInstance(Constructor.java:526)
com.mysql.jdbc.Util.handleNewInstance(Util.java:411)
com.mysql.jdbc.ConnectionImpl.getInstance(ConnectionImpl.java:389)
com.mysql.jdbc.NonRegisteringDriver.connect(NonRegisteringDriver.java:305)
java.sql.DriverManager.getConnection(DriverManager.java:571)
java.sql.DriverManager.getConnection(DriverManager.java:215)
br.com.caelum.agenda.ConnectionFactory.getConnection(ConnectionFactory.java:12)
br.com.caelum.agenda.dao.ContatoDAO.(ContatoDAO.java:21)
org.apache.jsp.lista_002dcontatos_002dscriplet_jsp._jspService(lista_002dcontatos_002dscriplet_jsp.java:107)
org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:431)
org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:396)
org.apache.jasper.servlet.JspServlet.service(JspServlet.java:340)
javax.servlet.http.HttpServlet.service(HttpServlet.java:725)
org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
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.
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.
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é!
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.
public class ContatoDAO {
//a conexão com banco de dados
private Connection connection;
public ContatoDAO() throws ClassNotFoundException{
this.connection = new ConnectionFactory().getConnection();
}
public void adiciona(Contato contato){
String sql = "insert into contatos " +
"(nome,email,endereco,dataNascimento)" +
" values (?,?,?,?)";
try{
//prepared statement para a inserção
PreparedStatement stmt = connection.prepareStatement(sql);
//seta os valores
stmt.setString(1,contato.getNome());
stmt.setString(2,contato.getEmail());
stmt.setString(3,contato.getEndereco());
stmt.setDate(4,new Date(contato.getDataNascimento().getTimeInMillis()));
//executa
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()){
//criando o objeto contato
Contato contato = new Contato();
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 Calendar
Calendar data = Calendar.getInstance();
data.setTime(rs.getDate("dataNascimento"));
contato.setDataNascimento(data);
//adicionando o objeto à lista
contatos.add(contato);
}
rs.close();
stmt.close();
return contatos;
}catch(SQLException e){
throw new RuntimeException(e);
}
}
}