4
respostas

Empresas cadastradas anteriormente

Olá! No final da Aula 4, curso "Servlets...", o servlet "ListaEmpresasServlet" cria um novo "Banco", que com o método ".getEmpresas" alimenta uma lista nova de empresas:

Banco banco = new Banco();
        List<Empresa> lista = banco.getEmpresas();

        request.setAttribute("empresas", lista);

A minha dúvida é a seguinte: é criado um banco novo, mas tem aquele método estático que já alimenta uma lista de empresas. Porém, sempre que cadastro uma empresa nova através do formulário HTML, ela aparece na lista. Não deveria aparecer na lista somente a última empresa listada + as empresas criadas estaticamente pelo "banco"? Onde ficam guardadas essas empresas na lista a cada nova inserção?

4 respostas

Oie Giuli, tudo bem contigo?

Essas empresas que são adicionadas em cada inserção ficam salvas na memória, porém, quando o servidor for desligado elas serão perdidas. Como não estamos usando banco de dados todas as inserções inclusive aquelas feitas a partir do "static" ficaram salvas na memória, por isso quando o servidor é reiniciado elas serão perdidas.

Espero que eu tenha ajudado, qualquer outra dúvida fico a disposição :)

Bons estudos!

Ok, entendi mais ou menos. Esse "guarda na memória", por exemplo, seria na "request"?

Ou seja, cada nova inserção o método request.setAttribute("empresas", lista); concatena a lista criada no "banco.getEmpresas()" + as empresas que estão "penduradas" na request?

É que estou tentando entender onde estão ficando as empresas a cada chamada do servlet "NovaEmpresaServlet"... Obrigado pela atenção ;)

Esse "guarda na memória" seria a lista estática "List < Empresa > lista" que foi criada dentro da classe "Banco". Quando um atributo é "static" ele vale para todos os objetos daquela classe, então mesmo quando uma nova instancia de "Banco" é criada tudo o que estiver salvo dentro da lista "lista" também irá valer para esse objeto. Essa mesma lógica se repete para os usuários, a chave sequencial e para todas informações criadas dentro do bloco "static".

Quando inserimos uma nova empresa a partir da "formNovaEmpresa.jsp" e do "NovaEmpresaServlet.java", estamos adicionando um novo objeto do tipo "Empresa" dentro de uma lista "static" presente no objeto do tipo "Banco". As informações salvas dentro dessa lista "static" ficam salvas na memória e ao chamarmos a "ListaEmpresasServlet.java", ela chama os objetos que estão dentro dessa lista "static" e manda para a "listaEmpresas.jsp", que irá mostrar as empresas que foram adicionadas e suas informações.

Classe Banco:

public class Banco {

    private static List<Empresa> lista = new ArrayList<>();
    private static List<Usuario> listaUsuarios = new ArrayList<>();  // todos os objetos do tipo empresa ficam salvos aqui, tando os que foram adicionados a partir do bloco "static" quanto os foram adicionados pelo navegador
    private static Integer chaveSequencial = 1;

    ...

Espero que agora tenha fico mais claro, se ainda estiver com dúvida fico a disposição :)

Nossa, perfeito! MUITO obrigado mesmo! Sou chato mesmo, gosto de entender tudo antes de prosseguir, valeu!