Ajuda com ArrayList na sessão do usuário

Bom dia pessoal, tenho que fazer um cadastro de candidatos para emprego, para cada ?cadastrar? esse candidato tem que ser adicionado no arrayLista, após isso, uma outra pagina tem que recuperar a lista e imprimir todos os nomes na tela, de forma concorrente.
Alguém pode ver meu código e o que estou fazendo de errado na hora de salvar na sessão?
Procurei no fórum e achei algo quase igual o meu, mas não consegui resolver com a solução de lá.
Muito obrigado pela atenção de todos.

Para gravar na sessão estou fazendo assim:

<%@page import="java.util.ArrayList"%>
<%@page contentType="text/html" language="Java" pageEncoding="UTF-8"%>
<%@page import="codigosJava.Candidato"%>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"
    "http://www.w3.org/TR/html4/loose.dtd">
<%  String nome;
    String cargo;
    String telefone;
    Candidato candidato;
    ArrayList <Candidato> candidatos = new ArrayList();
    candidato = null;
    
    nome = request.getParameter("nome");
    if (nome == null) {
        nome = "";
    }
    cargo = request.getParameter("cargo");
    if (cargo == null) {
        cargo = "";
    }
    telefone = request.getParameter("telefone");
    if (telefone == null) {
        telefone = "";
    }

    if(nome != null || cargo != null || telefone != null){
        candidato = new Candidato(nome, cargo, telefone);
    }
    
    if(candidato != null){
        candidatos.add(candidato);
        request.getSession().setAttribute("listaEnviada", candidatos);
    }
         
        
%>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>Cadastro de Candidatos</title>
    </head>
    <body>
        <H1 style ="color:red">Formulário para Cadastro de Candidados</h1>
        <FORM method="GET">
            Nome Candidato: <INPUT type="text" name="nome" value='<%=nome%>' size="100" maxlength="80"/><br>           
            Cargo Pretendido <INPUT type="text" name="cargo" size="50" value='<%=cargo%>'maxlength="45"/><BR>
            Telefone Contado <input type="text" name="telefone" size="13" value='<%=telefone%>'maxlenght="10"/><BR>
            <INPUT type="submit" value="Cadastrar"/>
        </FORM>
    </body>
  
</html>

E para recuperar:

<%-- 
    Document   : cadastramentoLista
    Created on : 21/04/2013, 01:24:51
    Author     : diego
--%>
<%@page import="java.util.ArrayList"%>
<%@page import="codigosJava.Candidato"%>
<%@page contentType="text/html" pageEncoding="UTF-8"%>
<!DOCTYPE html>
<%
    ArrayList <Candidato> listaRecebida = new ArrayList();
    String nome;
    String cargo;
    String telefone;
    
    listaRecebida = (ArrayList) request.getSession().getAttribute("listaEnviada");
    
    for(int i = 0; i < listaRecebida.size(); i++){
       nome = listaRecebida.get(i).getNome();
       cargo = listaRecebida.get(i).getCargoDesejado();
       telefone = listaRecebida.get(i).getTelefone();
       out.println(nome+ "<br>");
       out.println(cargo+ "<br>");
       out.println(telefone+ "<br>");
    }
    %>
<html>
    <head>
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
        <title>JSP Page</title>
    </head>
    <body>
        <h1>Hello World!</h1>
    </body>
</html>

Este código fiz só para teste.