Solucionado (ver solução)

Importante

Você está vendo a versão anterior da nova experiência da Alura que estamos preparando para você. Em breve, ela ganha uma identidade visual novinha totalmente pensada em potencializar seus estudos!

Solucionado
(ver solução)
12
respostas

The requested resource [/gerenciador/entrada] is not available

Oi!

Tentei migrar o projeto do módulo anterior da formação Spring Framework para o Maven e aparentemente tinha dado tudo certo, inclusive o TomCat sincronizou com o projeto.

Mas ao tentar acessar pelo navegador ele aponta esse erro: The requested resource [/gerenciador/entrada] is not available

12 respostas

Segue o que aparece no console:

jan. 28, 2022 3:38:48 PM org.apache.catalina.core.StandardContext filterStart
GRAVE: Exception starting filter [AF]
java.lang.ClassNotFoundException: br.com.guido.gerenciador.servlet.AutorizacaoFilter
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1407)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1215)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:534)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:515)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:149)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:251)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:102)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4613)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5256)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:919)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:835)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:919)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:263)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:432)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:927)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:772)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)

pt2:

jan. 28, 2022 3:38:48 PM org.apache.catalina.core.StandardContext filterStart
GRAVE: Exception starting filter [MF]
java.lang.ClassNotFoundException: br.com.guido.gerenciador.servlet.MonitoramentoFilter
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1407)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1215)
    at org.apache.catalina.core.DefaultInstanceManager.loadClass(DefaultInstanceManager.java:534)
    at org.apache.catalina.core.DefaultInstanceManager.loadClassMaybePrivileged(DefaultInstanceManager.java:515)
    at org.apache.catalina.core.DefaultInstanceManager.newInstance(DefaultInstanceManager.java:149)
    at org.apache.catalina.core.ApplicationFilterConfig.getFilter(ApplicationFilterConfig.java:251)
    at org.apache.catalina.core.ApplicationFilterConfig.<init>(ApplicationFilterConfig.java:102)
    at org.apache.catalina.core.StandardContext.filterStart(StandardContext.java:4613)
    at org.apache.catalina.core.StandardContext.startInternal(StandardContext.java:5256)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:919)
    at org.apache.catalina.core.StandardHost.startInternal(StandardHost.java:835)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1396)
    at org.apache.catalina.core.ContainerBase$StartChild.call(ContainerBase.java:1386)
    at java.base/java.util.concurrent.FutureTask.run(FutureTask.java:264)
    at org.apache.tomcat.util.threads.InlineExecutorService.execute(InlineExecutorService.java:75)
    at java.base/java.util.concurrent.AbstractExecutorService.submit(AbstractExecutorService.java:145)
    at org.apache.catalina.core.ContainerBase.startInternal(ContainerBase.java:919)
    at org.apache.catalina.core.StandardEngine.startInternal(StandardEngine.java:263)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardService.startInternal(StandardService.java:432)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.core.StandardServer.startInternal(StandardServer.java:927)
    at org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java:183)
    at org.apache.catalina.startup.Catalina.start(Catalina.java:772)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:77)
    at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
    at java.base/java.lang.reflect.Method.invoke(Method.java:568)
    at org.apache.catalina.startup.Bootstrap.start(Bootstrap.java:345)
    at org.apache.catalina.startup.Bootstrap.main(Bootstrap.java:476)

jan. 28, 2022 3:38:48 PM org.apache.catalina.core.StandardContext startInternal
GRAVE: One or more Filters failed to start. Full details will be found in the appropriate container log file
jan. 28, 2022 3:38:48 PM org.apache.catalina.core.StandardContext startInternal
GRAVE: Context [/gerenciador] startup failed due to previous errors
jan. 28, 2022 3:38:48 PM org.apache.coyote.AbstractProtocol start
INFORMAÇÕES: Starting ProtocolHandler ["http-nio-8080"]
jan. 28, 2022 3:38:48 PM org.apache.catalina.startup.Catalina start
INFORMAÇÕES: Server startup in [469] milliseconds

Segue meu arquivo web.xml:

<?xml version="1.0" encoding="UTF-8"?>
<web-app xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
    xmlns="http://xmlns.jcp.org/xml/ns/javaee"
    xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
    id="WebApp_ID" version="4.0">
    <display-name>gerenciador</display-name>
    <filter>
        <filter-name>MF</filter-name>
        <filter-class>br.com.guido.gerenciador.servlet.MonitoramentoFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>MF</filter-name>
        <url-pattern>/entrada</url-pattern>
    </filter-mapping>
    <filter>
        <filter-name>AF</filter-name>
        <filter-class>br.com.guido.gerenciador.servlet.AutorizacaoFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>AF</filter-name>
        <url-pattern>/entrada</url-pattern>
    </filter-mapping>
    <filter>
        <filter-name>CF</filter-name>
        <filter-class>br.com.guido.gerenciador.servlet.ControladorFilter</filter-class>
    </filter>
    <filter-mapping>
        <filter-name>CF</filter-name>
        <url-pattern>/entrada</url-pattern>
    </filter-mapping>
</web-app>

Oi José,

Posta aqui o código das suas classes Filter.

package br.com.guido.gerenciador.servlet;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
//@WebFilter("/entrada")
public class AutorizacaoFilter implements Filter {
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}
    @Override
    public void destroy() {}


    public void doFilter(ServletRequest requestServlet, ServletResponse responseServlet, FilterChain chain) throws IOException, ServletException {


        System.out.println("AutorizacaoFilter");    
        HttpServletRequest request = (HttpServletRequest) requestServlet;//DANDO CASTING PARA GERAR OBJETO DO TIPO 'HttpServletRequest'
        HttpServletResponse response = (HttpServletResponse) responseServlet; //DANDO CASTING PARA GERAR OBJETO DO TIPO 'HttpServletResponse'
        HttpSession sessao = request.getSession();
        boolean usuarioNaoLogado = (sessao.getAttribute("usuarioLogado")==null);
        String paramAcao = request.getParameter("acao");
        boolean ehUmaAcaoProtegida = !(paramAcao.equals("Login") || paramAcao.equals("LoginForm"));
        if(usuarioNaoLogado && ehUmaAcaoProtegida) {
            response.sendRedirect("entrada?acao=LoginForm");
            return;
        }
        chain.doFilter(request, response);
    }

}
package br.com.guido.gerenciador.servlet;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.FilterConfig;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.annotation.WebServlet;

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

    //IMPLEMENTANDO MÉTODOS 'init E 'destroy' PARA QUE POSSAM RODAR EM VERSÕES JAVA <7
    @Override
    public void init(FilterConfig filterConfig) throws ServletException {}
    @Override
    public void destroy() {}

    @Override
    public void doFilter(ServletRequest request, ServletResponse response, FilterChain chain)
            throws IOException, ServletException {
        System.out.println("MonitoramentoFilter");
//    MEDINDO TEMPO DE EXECUÇÃO DE UMA REQUISIÇÃO
        long antes = System.currentTimeMillis();
//        USANDO O CHAIN PARA EXECUTAR A REQUISIÇÃO
        chain.doFilter(request, response);
//        APÓS EXECUTAR A AÇÃO IRÁ MEDIR O TEMPO NOVAMENTE
        long depois = System.currentTimeMillis();

        String acao = request.getParameter("acao");
        System.out.println("Tempo de Execução: " + acao + " -> " +(depois-antes));
    }

}
package br.com.guido.gerenciador.servlet;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.RequestDispatcher;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;
import javax.servlet.annotation.WebFilter;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import br.com.guido.gerenciador.acao.Acao;
//@WebFilter("/entrada")
public class ControladorFilter implements Filter {
    public void doFilter(ServletRequest requestServlet, ServletResponse responseServlet, FilterChain chain) throws IOException, ServletException {
        System.out.println("ControladorFilter");    
        HttpServletRequest request = (HttpServletRequest) requestServlet;//DANDO CASTING PARA GERAR OBJETO DO TIPO 'HttpServletRequest'
        HttpServletResponse response = (HttpServletResponse) responseServlet; //DANDO CASTING PARA GERAR OBJETO DO TIPO 'HttpServletResponse'

        String paramAcao = request.getParameter("acao");
        String nome;
        String nomeDaClasse = "br.com.guido.gerenciador.acao." + paramAcao;

//        CÓDIGO NOVO UTILIZANDO A API 'Class' PARA INSTANCIAR O MÉTODO DE CADA CLASSE        
        try {
            Class classe = Class.forName(nomeDaClasse);
            Acao acao = (Acao) classe.newInstance();//DANDO NEW NA CLASSE DE AÇÃO UTILIZANDO UMA REFERÊNCIA DO TIPO INTERFACE 'Acao' E DANDO CASTING
            nome = acao.executa(request, response);//INVOCANDO MÉTODO 'executa()' através da referência 'acao' e atribuindo seu resultado à referência 'nome'
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
            throw new ServletException(e);
        }



        String tipoEndereco[] = nome.split(":");
        if(tipoEndereco[0].equals("forward")) {
            RequestDispatcher rd = request.getRequestDispatcher("/WEB-INF/view/" + tipoEndereco[1]);
            rd.forward(request, response);
        }else{
            response.sendRedirect(tipoEndereco[1]);
        }
    }

}

Segue também como ficou a organização do meu diretório, caso seja necessário.

Insira aqui a descrição dessa imagem para ajudar na acessibilidadeInsira aqui a descrição dessa imagem para ajudar na acessibilidade

Oi José,

O código aparentemente está certinho.

Mas reparei no seu print que o projeto está com erro(icone de exclamação vermelho). Deve ser algum problema ao referenciar o servidor ou com a versão do Java no projeto.

Clica com o botão direito no projeto e vai em: Build Path -> Configure Build Path e manda um print da aba superior Libraries

Aqui está! Insira aqui a descrição dessa imagem para ajudar na acessibilidade

Seu projeto está com o Java 10. Acho que você pode fazer um teste de trocar para o Java 8, para ver se não é problema de incompatibilidade com a versão 10.

Dá uma olhadinha também na aba problems do Eclipse quais erros aparecem.

solução!

Problema resolvido professor!

Não estava criando a dependência do Tomcat no meu pom.xml. Coloquei e rodou normalmente!

Muito obrigado!

        <dependency>
            <groupId>org.apache.tomcat</groupId>
            <artifactId>tomcat-servlet-api</artifactId>
            <version>9.0.56</version>
            <scope>provided</scope>
        </dependency>