Solucionado (ver solução)
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>