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

Erro no deploy do Tomcat - Não sobe o Filter

Boa tarde,

Estou reproduzindo o projeto do estudo utilizando as seguintes configurações:

IDE: IntelliJ Java 8 Tomcat 8

Anotei o meu Filter como sugerido, utilizando @WebFilter(urlPatterns = "/entrada"), porém, gerou o log abaixo no tomcat ao tentar fazer o deploy da aplicação:

21-Jun-2022 15:10:45.996 GRAVE [RMI TCP Connection(3)-127.0.0.1] org.apache.catalina.core.StandardContext.filterStart Exception starting filter br.com.gerenciador.controller.filters.MonitoramentoFilter
 java.lang.AbstractMethodError
    at org.apache.catalina.core.ApplicationFilterConfig.initFilter(ApplicationFilterConfig.java:279)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:260)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:105)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4700)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5340)
...

Meu web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
         version="4.0">
    <welcome-file-list>
        <welcome-file>/views/login.jsp</welcome-file>
    </welcome-file-list>

    <session-config>
        <!-- O container remove a sessão após 10 minutos sem utilização da aplicação. -->
        <session-timeout>10</session-timeout>
    </session-config>
</web-app>

Servlet Version:

<dependency>
            <groupId>javax.servlet</groupId>
            <artifactId>javax.servlet-api</artifactId>
            <version>4.0.1</version>
            <scope>provided</scope>
</dependency>

E, por último, o meu Filter:

@WebFilter(urlPatterns = "/entrada")
public class MonitoramentoFilter implements Filter {

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain) throws IOException,
            ServletException {
        long antes = System.currentTimeMillis();
        String acao = request.getParameter("acao");
        // Continua com a execução. Se o recurso não for chamado, a execução é interrompida.
        chain.doFilter(request, response);
        long depois = System.currentTimeMillis();
        System.out.println(acao + " - Tempo de execução: " + (depois - antes));
    }
}

Alguma ideia do que pode estar acontecendo?

2 respostas
solução!

Resolvido.

Bom dia,

De alguma forma o Tomcat 8 não conseguiu subir o Filter. Fiz um teste com deploy no Tomcat 9, e então funcionou.

Não encontrei nenhum documento que pudesse explicar o porquê, então, deixo aí a questão para que alguém consiga nos auxiliar.

Oi Lucas, eu fiquei com a impressao que na versão mais antiga dos servlets / filtros o método init e destroy eram obrigatorios. Ou seja, ao usar o Tomcat novo essa obrigação "sumiu", ok?

abs

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