Erro Tomcat e Glassfish

Tenho um sistema feito com auxilio da apostila fj21
ele funcionava perfeitamente com tomcat
quando instalei o glasfish para alterar as servlets ele não funcionou de maneira nenhum
então alterei ele de novo pra voltar a rodar com tomcat
mas agora não funciona mais com nenhum dos dois

alias, quando adiciono ou altero algum dado no banco vai tudo bem

erro:

GRAVE: Servlet.service() for servlet jsp threw exception
org.apache.el.parser.ParseException: Encountered " "}" "} "" at line 1, column 3.
Was expecting one of:
    <INTEGER_LITERAL> ...
    <FLOATING_POINT_LITERAL> ...
    <STRING_LITERAL> ...
    "true" ...
    "false" ...
    "null" ...
    "(" ...
    "!" ...
    "not" ...
    "empty" ...
    "-" ...
    <IDENTIFIER> ...
    
	at org.apache.el.parser.ELParser.generateParseException(ELParser.java:2142)
	at org.apache.el.parser.ELParser.jj_consume_token(ELParser.java:2024)
	at org.apache.el.parser.ELParser.Unary(ELParser.java:951)
	at org.apache.el.parser.ELParser.Multiplication(ELParser.java:711)
	at org.apache.el.parser.ELParser.Math(ELParser.java:631)
	at org.apache.el.parser.ELParser.Compare(ELParser.java:443)
	at org.apache.el.parser.ELParser.Equality(ELParser.java:337)
	at org.apache.el.parser.ELParser.And(ELParser.java:281)
	at org.apache.el.parser.ELParser.Or(ELParser.java:225)
	at org.apache.el.parser.ELParser.Choice(ELParser.java:182)
	at org.apache.el.parser.ELParser.Expression(ELParser.java:174)
	at org.apache.el.parser.ELParser.DynamicExpression(ELParser.java:146)
	at org.apache.el.parser.ELParser.CompositeExpression(ELParser.java:43)
	at org.apache.el.lang.ExpressionBuilder.createNodeInternal(ExpressionBuilder.java:114)
	at org.apache.el.lang.ExpressionBuilder.build(ExpressionBuilder.java:172)
	at org.apache.el.lang.ExpressionBuilder.createValueExpression(ExpressionBuilder.java:216)
	at org.apache.el.ExpressionFactoryImpl.createValueExpression(ExpressionFactoryImpl.java:68)
	at org.apache.jasper.runtime.PageContextImpl.proprietaryEvaluate(PageContextImpl.java:937)
	at org.apache.jsp.lista_002dcontatos_002delegante_jsp._jspx_meth_c_005fforEach_005f0(lista_002dcontatos_002delegante_jsp.java:191)
	at org.apache.jsp.lista_002dcontatos_002delegante_jsp._jspService(lista_002dcontatos_002delegante_jsp.java:110)
	at org.apache.jasper.runtime.HttpJspBase.service(HttpJspBase.java:70)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:388)
	at org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:313)
	at org.apache.jasper.servlet.JspServlet.service(JspServlet.java:260)
	at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
	at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
	at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
	at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
	at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
	at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
	at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
	at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
	at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:293)
	at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:859)
	at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:602)
	at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
	at java.lang.Thread.run(Unknown Source)

pagina jsp que não roda:

<!-- importando as taglibs do jstl -->
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt"%>
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN" "http://www.w3.org/TR/html4/loose.dtd">
<html>
<title>Lista de contatos</title>
<body>
	<!-- importando o cabeçalho através do jstl -->
	<c:import url="cabecalho.jsp" />
	
	<!--criando o DAO-->
	<jsp:useBean id="dao"
		class="br.com.anderson.agenda.jdbc.dao.ContatoDAO" />

	<table border=2>
		<tr>
			<th>Id</th>
			<th>Nome</th>
			<th>E-mail</th>
			<th>Endereço</th>
			<th>Data Nascimento</th>
		</tr>
		<!-- percorre contatos montando as linhas da tabela -->
		<!-- jstl core: foreach-var:define o nome da variavel para cada iteração do laço
								items:o método a ser executado do objeto para fazer a iteração
								varStatus:inteiro para fazer a contagem das iterações -->
		<c:forEach var="contato" items="${dao.lista}" varStatus="id">
		
			<!-- usando o inteiro para pintar as linhas da tabela -->
			<tr bgcolor="#${id.count %2==0 ? 'aaee88' : 'ffffff' }">
			
				<!-- usanto EL para puxar os registros de cada iteração do laço
				${} é a EL padrão -->
				<td>${contato.id }</td>
				<td>${contato.nome }</td>
				<!-- core choose: alternativa ao if - parecido com switch case utiliza when para cada caso e otherwise como default -->
				<!-- o teste é feito através de EL -->
				<td><c:choose>						
						<c:when test="${not empty contato.email }">
							<a href="mailto:${contato.email }">${contato.email }</a>
						</c:when>
						<c:otherwise>E-mail não informado</c:otherwise>
					</c:choose></td>
				<td>${contato.endereco }</td>
				<td>
					<!-- fmt - taglib jstl para formatação --> 
					<!-- formatDate - usado para formatar datas - value:valor a ser formatado
																pattern: padrão para visualização --> 
					<fmt:formatDate	value="${contato.dataNascimento.time }" pattern="dd/MM/yyyy" />
				</td>
			</tr>
		</c:forEach>
	</table>
	<a href="adiciona-contato.jsp">Novo</a>
	<a href="altera-contato.jsp">Alterar</a>
	<a href="remove-contato.jsp">Remover</a>
	<!-- importando o rodapé através do jstl -->
	<c:import url="rodape.jsp" />
</body>
</html>