Lista com scriplet usando jsp

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.

vou mostrar o código em jsp

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ page import=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>
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<table>
		<%
		ContatoDAO dao = new ContatoDAO();
		List<Contato> contatos = dao.getLista();
		
		for(Contato contato : contatos){
		%>
			<tr>
				<td><%= contato.getNome()%></td>
				<td><%= contato.getEmail()%></td>
				<td><%= contato.getEndereco()%></td>
				<td><%= contato.getDataNascimento().getTime() %></td>
			</tr>
		<%
		}
		%>
	</table>
</body>
</html>

Por favor me ajudem

esqueceu as aspas.

fiz o que você falou coloquei as aspas, porém apareceu novos erros, que não consegui identificar vou mostrar:

HTTP Status 500 - An exception occurred processing JSP page /lista-contatos-scriplet.jsp at line 13

type Exception report

message An exception occurred processing JSP page /lista-contatos-scriplet.jsp at line 13

description The server encountered an internal error that prevented it from fulfilling this request.

exception
org.apache.jasper.JasperException: An exception occurred processing JSP page /lista-contatos-scriplet.jsp at line 13

10:
11:


12: <%
13: ContatoDAO dao = new ContatoDAO();
14: List contatos = dao.getLista();
15:
16: for(Contato contato : contatos){

Stacktrace:
org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:567)
org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:469)
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
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)

root cause
java.net.ConnectException: Connection refused: connect
java.net.DualStackPlainSocketImpl.connect0(Native Method)
java.net.DualStackPlainSocketImpl.socketConnect(DualStackPlainSocketImpl.java:79)
java.net.AbstractPlainSocketImpl.doConnect(AbstractPlainSocketImpl.java:339)
java.net.AbstractPlainSocketImpl.connectToAddress(AbstractPlainSocketImpl.java:200)
java.net.AbstractPlainSocketImpl.connect(AbstractPlainSocketImpl.java:182)
java.net.PlainSocketImpl.connect(PlainSocketImpl.java:172)
java.net.SocksSocketImpl.connect(SocksSocketImpl.java:392)
java.net.Socket.connect(Socket.java:579)
java.net.Socket.connect(Socket.java:528)
java.net.Socket.(Socket.java:425)
java.net.Socket.(Socket.java:241)
com.mysql.jdbc.StandardSocketFactory.connect(StandardSocketFactory.java:257)
com.mysql.jdbc.MysqlIO.(MysqlIO.java:298)
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)

note The full stack trace of the root cause is available in the Apache Tomcat/8.0.20 logs.

Apache Tomcat/8.0.20

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.

Como eu removo as configuraões no tomcat8?

Baixei o tomcat 7, porém não consigo adicionar o projeto já existente quando estou configurando o que eu faço?

Essas são as configurações que eu disse que você tem que remover.

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.

troquie o tomcat 8 pelo tomcat 7, mas o erro ainda persiste

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.

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é!

Esta usando jsp puro amigo ? ou mapeando via servelet ?

o erro esta na conexao com o banco verifique a linha 16 mostrada abaixo:

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(lista002dcontatos_002dscriplet_jsp.java:107)

Você adicionou o JAR do MySql no seu projeto ?

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.

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.

Eu adicionei o jar

Classe ContatoDAO

package br.com.caelum.agenda.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.agenda.ConnectionFactory;
import br.com.caelum.agenda.modelo.Contato;

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

vou mandar de novo

package br.com.caelum.agenda.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.agenda.ConnectionFactory;
import br.com.caelum.agenda.modelo.Contato;

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

Também tô usando uma classe servlet, chamada AdicionaContatoServlet

Voce esta usando a urlPatterns com a / ? muitas vezes a falta da barra da alguns erros.