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

Filter

Quando configuro o web.xml o seguinte erro aparece. Type Exception Report

Message java.lang.ClassNotFoundException: br.com.alura.gerenciador.acao.LoginForm

Description The server encountered an unexpected condition that prevented it from fulfilling the request.

Exception

javax.servlet.ServletException: java.lang.ClassNotFoundException: br.com.alura.gerenciador.acao.LoginForm br.com.alura.gerenciador.servlet.ControladorFilter.doFilter(ControladorFilter.java:38) br.com.alura.gerenciador.servlet.AutorizacaoFilter.doFilter(AutorizacaoFilter.java:37) br.com.alura.gerenciador.servlet.MonitoramentoFilter.doFilter(MonitoramentoFilter.java:24) Root Cause

java.lang.ClassNotFoundException: br.com.alura.gerenciador.acao.LoginForm org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1365) org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1188) java.lang.Class.forName0(Native Method) java.lang.Class.forName(Unknown Source) br.com.alura.gerenciador.servlet.ControladorFilter.doFilter(ControladorFilter.java:34) br.com.alura.gerenciador.servlet.AutorizacaoFilter.doFilter(AutorizacaoFilter.java:37) br.com.alura.gerenciador.servlet.MonitoramentoFilter.doFilter(MonitoramentoFilter.java:24) Note A pilha de erros completa da causa principal está disponível nos logs do servidor.

<?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>
  <welcome-file-list>
    <welcome-file>index.html</welcome-file>
    <welcome-file>index.htm</welcome-file>
    <welcome-file>index.jsp</welcome-file>
    <welcome-file>default.html</welcome-file>
    <welcome-file>default.htm</welcome-file>
    <welcome-file>default.jsp</welcome-file>
  </welcome-file-list>

<filter>
    <filter-name>MF</filter-name>
    <filter-class>br.com.alura.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.alura.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.alura.gerenciador.servlet.ControladorFilter</filter-class>
</filter>

<filter-mapping>
    <filter-name>CF</filter-name>
    <url-pattern>/entrada</url-pattern>
</filter-mapping>


</web-app>
2 respostas
package br.com.alura.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.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.alura.gerenciado.acao.Acao;


//@WebFilter("/entrada")

public class ControladorFilter implements Filter {

    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {

        System.out.println("ControladorFilter");

        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;

        String paramAcao = request.getParameter("acao");

        String nomeDaClasse = "br.com.alura.gerenciador.acao." + paramAcao;

        String nome;
        try {
            Class classe = Class.forName(nomeDaClasse);//carrega a classe com o nome 
            Acao acao = (Acao) classe.newInstance(); 
            nome = acao.executa(request, response);
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
            throw new ServletException(e);
        }


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

        }

    }

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

import java.io.IOException;

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

/**
 * Servlet Filter implementation class AutorizacaoFilter
 */
//@WebFilter("/entrada")
public class AutorizacaoFilter implements Filter {


    public void doFilter(ServletRequest servletRequest, ServletResponse servletResponse, FilterChain chain) throws IOException, ServletException {

        HttpServletRequest request = (HttpServletRequest) servletRequest;
        HttpServletResponse response = (HttpServletResponse) servletResponse;

        String paramAcao = request.getParameter("acao");

        HttpSession sessao = request.getSession();
        boolean usuarioNaoEstaLogado = (sessao.getAttribute("usuarioLogado") == null);
        boolean ehUmaAcaoProtegida =  !(paramAcao.equals("Login") || paramAcao.equals("LoginForm")) ;

        if(ehUmaAcaoProtegida && usuarioNaoEstaLogado) {            
            response.sendRedirect("entrada?acao=LoginForm");    
            return;
        }

        chain.doFilter(request, response);
    }


}

package br.com.alura.gerenciador.servlet;

import java.io.IOException;

import javax.servlet.Filter;
import javax.servlet.FilterChain;
import javax.servlet.ServletException;
import javax.servlet.ServletRequest;
import javax.servlet.ServletResponse;


//@WebFilter("/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");

        //Executa a acao
        chain.doFilter(request, response);

        long depois = System.currentTimeMillis();
        System.out.println("Tempo de execução" + acao + (depois - antes));
    }

}
solução!

Fala, Kayque! Tudo bem contigo?

Desculpe a demora em dar um retorno

Pelo que apresenta, parece que não há nenhum erro nas Classes.

Como ele não está encontrando sua Classe LoginForm, dê uma olhada nessa Classe

package br.com.alura.gerenciador.acao;

import java.io.IOException;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class LoginForm implements Acao {

    @Override
    public String executa(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {
        return "forward:formLogin.jsp";
    }

}

Só por desencargo, compare com meu 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>
  <welcome-file-list>
    <welcome-file>bem-vindo.html</welcome-file>
  </welcome-file-list>
  <servlet>
    <servlet-name>OiMundoServlet</servlet-name>
    <servlet-class>br.com.alura.gerenciador.servlet.OiMundoServlet</servlet-class>
  </servlet>
  <servlet-mapping>
    <servlet-name>OiMundoServlet</servlet-name>
    <url-pattern>/ola</url-pattern>
  </servlet-mapping>
  <filter>
    <filter-name>MF</filter-name>
    <filter-class>br.com.alura.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.alura.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.alura.gerenciador.servlet.ControladorFilter</filter-class>
  </filter>
  <filter-mapping>
    <filter-name>CF</filter-name>
    <url-pattern>/entrada</url-pattern>
  </filter-mapping>
</web-app>

Antes dessa aula estava rodando normalmente?

Fico no aguardo, Kayque!!!

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