Java

Olá, sou inciante em java web e estou com uma dificuldade de não estou conseguindo resolver. Agradeço se alguém puder ajudar.

O primeiro problema é que aparentemente parece que os objetos/dados não estão compartilhando a mesma sessão/thread (acho que é isso) do servlet.

Por exemplo, toda vez eu coloco o seguinte codigo: ${sessionScope.questionario}
e deveria printar varios objetos pertencentes aquela mesma sessão.

Deveria aparecer como esse exemplo cada vez que eu abro uma aba no navegador e envio o formulario: {respostas=[Resposta{questao1=2, questao2=2}, Resposta{questao1=1, questao2=1}]}

Mas no meu projeto aparece apenas uma vez mesmo seguindo os mesmos passos (enviar o formulario): com.mycompany.questionario.Questionario@1b7889e

O meu código foi baseado em um outro de exemplo, porém já tentei identificar onde está o erro e não consigo

protected void doPost(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        
        boolean legal = Boolean.parseBoolean(request.getParameter("legal"));
        boolean informativo = Boolean.parseBoolean(request.getParameter("informativo"));
        int nota = Integer.parseInt(request.getParameter("nota"));
        
        HttpSession sessao = request.getSession(true);
        Questionario questionario = (Questionario) sessao.getAttribute("questionario");
        
        
        Resultado resultado = new Resultado();
        resultado.setInformativo(informativo);
        resultado.setLegal(legal);
        resultado.setNota(nota);
        
        if(questionario == null){
            questionario = new Questionario();
            sessao.setAttribute("questionario", questionario);
        }
        
        questionario.getLista().add(resultado);
        RequestDispatcher redirecionar = request.getRequestDispatcher("/resultado.jsp");
        redirecionar.forward(request, response);
    }

Outro problema é que toda vez que utilizo o seguinte código na minha view para mostrar o resultado da erro exatamente na linha deste código:

<li>Informativo: ${sessionScope.questionario.mediaInformativo}</li>

Esse código também foi baseado em um projeto, sendo que no projeto que segui funciona perfeitamente.

Cara, quando você removeu o outro tópico, eu já tinha feito metade da minha resposta e tive que jogá-la fora.
Basicamente:

Isso não vai acontecer. A sessão é criada quando um agente, geralmente um browser, se conecta a tua aplicação. O servlet container gera uma session id única e que, além de outros atributos, possui um timeout.

Isso acontecer por que você não sobrescreveu o método toString na classe Questionario e, provavelmente, nem na classe Resposta.

Qual erro?

org.apache.jasper.JasperException: An exception occurred processing JSP page /resultado.jsp at line 18

Eu estou começando a desconfiar que talvez eu tenha que importar o JSTL mas não tenho certeza, apenas de no exemplo que eu tenho aqui não ter nenhuma importação dele. O problema que o link do JSTL que tenho me disseram que é antigo e procurei outros, mas sempre da errado quando importo o JSTL antes mesmo de chegar na linha 18

Tua desconfiança está correta. O jstl é fundamental para que isso funcione.
Além do que, você precisa sobrescrever o toString das classes que deseja apresentar.

Sim, eu sobreescrevi o toString e realmente ficou igual ao exemplo. O problema ta sendo agora o JSTL. Meu professor me disse que o caminho do JSTL mudou, mas todo link que eu coloco que falha.

Como assim, mudou?
Você está importando o jar ou está usando maven/gradle?

Quando eu mostrei para meu professor um determinado caminho do JSTL e o erro, ele disse sem entrar muito em detalhes que o caminho que eu estava usando provavelmente tinha sido atualizado, porém eu procurei e não achei nada a respeito disso. Seguindo a ideia dele, todo site que aparecia com um determinado caminho eu testava e falhava.

Estou utilizando o maven no meu projeto