Solucionado (ver solução)
Solucionado
(ver solução)
2
respostas

Aula 08-Mais sobre servlets - Curso servlet-3-e-fundamentos-web

Srs, bom dia.

Tenho uma servlet com nome de buscaEmpresa, onde fiz á inclusão do método abaixo.

@Override
    public void destroy() {
        super.destroy();
        System.out.println("Destruindo a Servlet " + this);
    }

O meu objetivo é observar a chamado do método destroy no console quando executo a parada do servidor: porem observei que o método não está sendo invocado no logo do servidor.

LOG:

Jan 14, 2015 10:43:29 AM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler ["http-bio-8080"]
Jan 14, 2015 10:43:29 AM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler ["ajp-bio-8009"]
Jan 14, 2015 10:43:29 AM org.apache.catalina.startup.Catalina start
INFORMAÇÕES: Server startup in 1095 ms
Instanciando uma Servlet do tipo BuscaEmpresa br.com.alura.gerenciador.web.BuscaEmpresa@1b02985
Inicializando a Servlet br.com.alura.gerenciador.web.BuscaEmpresa@1b02985
Usuário<deslogado>acessado a URI:    /gerenciador/busca

Segue o código completo, se alguém puder ajudar agradeço.

import java.io.IOException;
import java.io.PrintWriter;
import java.util.Collection;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.alura.gerenciador.Empresa;
import br.com.alura.gerenciador.dao.EmpresaDAO;

@WebServlet(urlPatterns = "/busca")
public class BuscaEmpresa extends HttpServlet {

    public BuscaEmpresa() {
        System.out.println("Instanciando uma Servlet do tipo BuscaEmpresa "
                + this);
    }

    @Override
    public void init() throws ServletException {
        super.init();
        System.out.println("Inicializando a Servlet " + this);
    }

    @Override
    public void destroy() {
        super.destroy();
        System.out.println("Destruindo a Servlet " + this);
    }

    protected void doGet(HttpServletRequest req, HttpServletResponse resp)
            throws ServletException, IOException {

        write.println("<html><body>");

        write.println("Resultado da busca:<br/>"); // <br/> = pula uma linha

        String filtro = req.getParameter("filtro");

        Collection<Empresa> empresas = new EmpresaDAO()
                .buscaPorSimilaridade(filtro);

        write.println("<ul>");
        for (Empresa empresa : empresas) {

            write.println("<li>" + empresa.getId() + ":" + empresa.getNome()
                    + "</li>");

        }
        write.println("</ul>");

        write.println("</body></html>");

    }
}
2 respostas
solução!

Oi Leandro

O seu problema é que o método destroy só é chamado quando desligamos o servidor e não no fim da requisição web.

Na especificação de servlet, cada servlet é criada apenas uma vez pelo servidor e utilizada para atender todas as requisições para um determinado urlPattern e por isso o servidor só pode descartar essa única instância no final da aplicação.

Vitor, show de bola. Obrigado pelo esclarecimento.

Quer mergulhar em tecnologia e aprendizagem?

Receba a newsletter que o nosso CEO escreve pessoalmente, com insights do mercado de trabalho, ciência e desenvolvimento de software