Criar conexão em Filter para passar para as response

Olá, em meu curso aprendi diretamente com o professor, que eu deveria criar e instanciar minha conexão em um FILTER que passa para todas as páginas acessadas em um web project.

[code]java.sql.Connection c = new Conexao().GO();
request.setAttribute(“connection”, c);
if(c != null){
chain.doFilter(request, response);

    } else {
        System.out.println("falha na conexao - sem acesso ao banco de dados");
    }
    
    try {
        c.close();

    } catch (SQLException e) {
        System.out.println("erro metodo doFilter - classe Conecta (filter)");
    }

[/code]

Assim está meu filter por enquanto. O problema é que a conexão não está fechando. Só fecha após o projeto ser finalizado. Isso pode causar inumeros problemas (mesmo com a conexão ficando em sleep no bd).

A questão é, devo realmente criar a conexão no meu filter, e tentar resolver a questão dela não estar fechando, ou seria mais correto criar a conexão em minhas classes DAO apenas nos métodos que eu utilizo a conexão, e nele já fechar a conexão? (Creio que neste segundo caso ela fecharia corretamente).

Pode ser que o professor só tenha ensinado a montar a conexão via FILTER para ensinar a turma a usar um filter… Ou será que é realmente “mais correto” deixar a conexão no próprio filter?

(obs: cada vez que eu abro uma página, este filter é chamado várias vezes, não sei porque. Deveria estar sendo chamado apenas 1x pela lógica. E se eu não dou o c.close, fica várias conexões abertas. Com o c.close fica apenas 1 conexão aberta por aba acessada)