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

[Bug] Erro no envio da requisição

Quando mando a requisição para abrir a tela de login, não está abrindo.

O erro:

ago. 24, 2023 9:20:02 AM org.apache.catalina.core.StandardWrapperValve invoke
GRAVE: Servlet.service() for servlet [br.com.livrosOnline.servlet.EntradaServlet] in context with path [/livrosOnline] threw exception [Servlet execution threw an exception] with root cause
java.lang.ClassNotFoundException: br.com.livrosOnline.model.interfaces.Acao
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1951)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1795)
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1013)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:150)
    at org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:3264)
    at org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:1416)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1920)
    at org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1795)
    at java.base/java.lang.Class.forName0(Native Method)
    at java.base/java.lang.Class.forName(Class.java:391)
    at java.base/java.lang.Class.forName(Class.java:382)
    at br.com.livrosOnline.servlet.EntradaServlet.service(EntradaServlet.java:43)
    at javax.servlet.http.HttpServlet.service(HttpServlet.java:728)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:303)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:52)
    at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:241)
    at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:208)
    at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:219)
    at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:110)
    at org.apache.catalina.authenticator.AuthenticatorBase.invoke(AuthenticatorBase.java:492)
    at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:165)
    at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:104)
    at org.apache.catalina.valves.AccessLogValve.invoke(AccessLogValve.java:1025)
    at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:116)
    at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:451)
    at org.apache.coyote.http11.AbstractHttp11Processor.process(AbstractHttp11Processor.java:1201)
    at org.apache.coyote.AbstractProtocol$AbstractConnectionHandler.process(AbstractProtocol.java:654)
    at org.apache.tomcat.util.net.JIoEndpoint$SocketProcessor.run(JIoEndpoint.java:317)
    at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1144)
    at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:642)
    at org.apache.tomcat.util.threads.TaskThread$WrappingRunnable.run(TaskThread.java:61)
    at java.base/java.lang.Thread.run(Thread.java:1623)

4 respostas

O código:

package br.com.livrosOnline.model.acoes;

import java.io.IOException;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import br.com.livrosOnline.model.interfaces.Acao;

public class LoginForm implements Acao {

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

}
import java.io.IOException;
import javax.servlet.RequestDispatcher;
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 javax.servlet.http.HttpSession;

import br.com.livrosOnline.model.interfaces.Acao;

@WebServlet(urlPatterns = "/entrada")
public class EntradaServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void service(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {

        String paramAcao = req.getParameter("acao");
        
        System.out.println(paramAcao);
        
        HttpSession session = req.getSession();
        Boolean usuarioNaoLogado = (session.getAttribute("usuarioLogado") == null);
        Boolean acaoProtegida = !(paramAcao.equals("Login") || paramAcao.equals("LoginForm") );
        
        if (acaoProtegida && usuarioNaoLogado) {
            resp.sendRedirect("entrada?acao=LoginForm");
            return;
        }

        String nomeDaClasse = "br.com.livrosOnline.model.acoes." + paramAcao;
        
        System.out.println(1);

        String nome;

        try {
            System.out.println(2);
            Class<?> classe = Class.forName(nomeDaClasse);
            System.out.println(3);
            @SuppressWarnings("deprecation")
            Acao acao = (Acao) classe.newInstance();
            System.out.println(4);
            nome = acao.executa(req, resp);
            System.out.println(5);
        } catch (ClassNotFoundException | InstantiationException | IllegalAccessException e) {
            throw new ServletException(e);
        }
        
        System.out.println(6);

        String[] tipoEndereco = nome.split(":");

        if (tipoEndereco[0].equals("forward")) {
            RequestDispatcher dispatcher = req.getRequestDispatcher("WEB_INF/view/" + tipoEndereco[1]);
        } else {
            resp.sendRedirect(tipoEndereco[1]);
        }
    }
}

JSP:

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
    pageEncoding="ISO-8859-1"%>
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c"%>
<c:url value="/entrada" var="linkServlet" />
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
    <style>
body {
    font-family: Arial, sans-serif;
    background-color: #f2f2f2;
    margin: 0;
    display: flex;
    justify-content: center;
    align-items: center;
    min-height: 100vh;
}

.login-container {
    background-color: #ffffff;
    border-radius: 8px;
    padding: 20px;
    box-shadow: 0 2px 4px rgba(0, 0, 0, 0.1);
    text-align: center;
    width: 300px;
}

.login-container h1 {
    font-size: 24px;
    margin-bottom: 20px;
}

.input-group {
    margin-bottom: 15px;
}

.input-group label {
    display: block;
    font-size: 14px;
    margin-bottom: 5px;
    text-align: left;
}

.input-group input {
    width: 100%;
    padding: 8px;
    border: 1px solid #ccc;
    border-radius: 4px;
}

.input-group .btn {
    background-color: #007bff;
    color: #ffffff;
    border: none;
    border-radius: 4px;
    padding: 10px 20px;
    cursor: pointer;
}

.signup-link {
    font-size: 14px;
    margin-top: 10px;
}
</style>
</head>
<body>
    <div class="login-container">
    <h1>Livros Online</h1>
    <form>
      <div class="input-group">
        <label for="username">Usuário:</label>
        <input type="text" id="username" name="nome" required>
      </div>
      <div class="input-group">
        <label for="password">Senha:</label>
        <input type="password" id="password" name="senha" required>
      </div>
      <div>
          <input type="hidden" value="Login" name="acao">
      </div>
      <button type="submit" class="btn">Entrar</button>
    </form>
    <p class="signup-link">Ainda não tem cadastro? <a href="#">Cadastre-se</a>
        </p>
  </div>
</body>


</html>

Como está as pastas:

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

solução!

Olá, Bruno!

Pelo que parece, o seu código está tentando carregar uma classe chamada "Acao" que está no pacote "br.com.livrosOnline.model.interfaces", mas essa classe não está sendo encontrada. Isso é o que indica a exceção "java.lang.ClassNotFoundException".

Existem algumas possíveis causas para esse problema:

  1. A classe "Acao" não existe no pacote "br.com.livrosOnline.model.interfaces". Verifique se a classe está realmente nesse pacote e se o nome está correto, respeitando maiúsculas e minúsculas.

  2. A classe "Acao" existe, mas não está no classpath do projeto. O classpath é o conjunto de diretórios e/ou arquivos .jar que o Java utiliza para procurar classes. Verifique se o diretório ou o .jar que contém a classe "Acao" está no classpath do seu projeto.

  3. A classe "Acao" existe e está no classpath, mas o servidor de aplicação (no seu caso, o Tomcat) não está conseguindo carregá-la. Isso pode acontecer se a classe "Acao" depende de outras classes que não estão disponíveis, por exemplo. Nesse caso, você precisaria verificar as dependências da classe "Acao".

Espero que essas sugestões possam te ajudar a identificar o problema. Lembre-se que a depuração é uma parte importante do desenvolvimento de software e, às vezes, pode ser um pouco complicada, mas é uma ótima oportunidade de aprendizado.

Espero ter ajudado e bons estudos!