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)
10
respostas

Não rodou o /entrada

No inicio do video quando ele terminou de fazer os ifs eu fui rodar no navegador(edge) e apareceu o erro seguinte:

Obs: estou usando o eclipse Java EE com o JDK 11.0.11

HTTP Status 500 – Internal Server Error Type Exception Report

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

Exception

java.lang.NullPointerException br.com.alura.gerenciador.servlet.UnicaEntradaServlet.service(UnicaEntradaServlet.java:21) jakarta.servlet.http.HttpServlet.service(HttpServlet.java:770) org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53) Note A pilha de erros completa da causa principal está disponível nos logs do servidor.

Apache Tomcat/10.0.5

10 respostas

Oi Diogo

Sobre o nullpointer abaixo

java.lang.NullPointerException
    br.com.alura.gerenciador.servlet.UnicaEntradaServlet.service(UnicaEntradaServlet.java:21)

envia sua classe UnicaEntradaServlet, por favor

package br.com.alura.gerenciador.servlet;

import java.io.IOException;

import br.com.alura.gerenciador.acao.AlteraEmpresa;
import br.com.alura.gerenciador.acao.ListaEmpresas;
import br.com.alura.gerenciador.acao.MostraEmpresa;
import br.com.alura.gerenciador.acao.NovaEmpresa;
import br.com.alura.gerenciador.acao.NovaEmpresaForm;
import br.com.alura.gerenciador.acao.RemoveEmpresa;
import jakarta.servlet.RequestDispatcher;
import jakarta.servlet.ServletException;
import jakarta.servlet.annotation.WebServlet;
import jakarta.servlet.http.HttpServlet;
import jakarta.servlet.http.HttpServletRequest;
import jakarta.servlet.http.HttpServletResponse;
/**
 * Servlet implementation class UnicaEntradaServlet
 */
@WebServlet("/entrada")
public class UnicaEntradaServlet extends HttpServlet {
    private static final long serialVersionUID = 1L;

    protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {

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

        String nome = null;
        if(paramAcao.equals("ListaEmpresas")) {
            ListaEmpresas acao = new ListaEmpresas();
            nome = acao.executa(request, response);

        } else if (paramAcao.equals("RemoveEmpresa")) {
            RemoveEmpresa acao = new RemoveEmpresa();
            nome = acao.executa(request, response);


        } else if (paramAcao.equals("MostraEmpresa")) {
            MostraEmpresa acao = new MostraEmpresa();
            nome = acao.executa(request, response);


        } else if (paramAcao.equals("AlteraEmpresa")) {
            AlteraEmpresa acao = new AlteraEmpresa();
            nome = acao.executa(request, response);


        } else if (paramAcao.equals("NovaEmpresa")) {
            NovaEmpresa acao = new NovaEmpresa();
            nome = acao.executa(request, response);


        }  else if (paramAcao.equals("NovaEmpresaForm")) {
            NovaEmpresaForm acao = new NovaEmpresaForm();
            nome = acao.executa(request, response);
        }


        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]);
        }
    }
}

Eu coloquei agora no navegador: http://localhost:8080/gerenciador/entrada?acao=ListaEmpresas dai me apareceu esse novo erro

HTTP Status 404 – Não Encontrado Type Status Report

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

Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

Apache Tomcat/10.0.5

fiz algumas atualizações e resolvi o erro de cima, porém chegou um terceiro novo erro rs, me desculpa, apareceu o seguinte:

HTTP Status 404 – Não Encontrado Type Status Report

Message JSP file [/WEB-INF/viewlistaEmpresas.jsp] not found

Description The origin server did not find a current representation for the target resource or is not willing to disclose that one exists.

Apache Tomcat/10.0.5


listaEmpresas.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<%@ taglib uri="http://java.sun.com/jsp/jstl/fmt" prefix="fmt" %>


<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Java Standart Taglib</title>
<body>

    <c:if test="${not empty empresa}">
        Empresa ${empresa} cadastrada com sucesso
    </c:if>


    <ul>
        <c:forEach items="${empresas}" var="empresa">
            <li>
                ${empresa.nome} <fmt:formatDate value="${empresa.dataAbertura }" pattern="dd/MM/yyyy"/>
                <a href="/gerenciador/entrada?acao=MostraEmpresaid=${empresa.id}">editar</a>
                <a href="/gerenciador/entrada?acao=RemoveEmpresaid=${empresa.id}">remover</a>
            </li>
        </c:forEach>
    </ul>
</body>
</html>
Message JSP file [/WEB-INF/viewlistaEmpresas.jsp] not found

Por essa mensagem de erro acima o seu servlet deve estar mandando para viewlistaEmpresas.jsp, mas o correto é ter uma barra no meio: view/listaEmpresas.jsp

Confirma se o seu arquivo na pasta /gerenciador/WebContent/WEB-INF/view/ está com o nome listaEmpresas.jsp também

Eu vi que faltava uma / no código ao lado de view RequestDispatcher rd = request.getRequestDispatcher("WEB-INF/view/" + tipoEEndereco[1]);

porém apareceu um novo erro

HTTP Status 500 – Internal Server Error
Type Exception Report

Message java.lang.ClassNotFoundException: br.com.alura.gerenciador.acaoListaEmpresas

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

Exception

jakarta.servlet.ServletException: java.lang.ClassNotFoundException: br.com.alura.gerenciador.acaoListaEmpresas
    br.com.alura.gerenciador.servlet.UnicaEntradaServlet.service(UnicaEntradaServlet.java:33)
    jakarta.servlet.http.HttpServlet.service(HttpServlet.java:770)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause

java.lang.ClassNotFoundException: br.com.alura.gerenciador.acaoListaEmpresas
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1401)
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1224)
    java.base/java.lang.Class.forName0(Native Method)
    java.base/java.lang.Class.forName(Class.java:315)
    br.com.alura.gerenciador.servlet.UnicaEntradaServlet.service(UnicaEntradaServlet.java:28)
    jakarta.servlet.http.HttpServlet.service(HttpServlet.java:770)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Note A pilha de erros completa da causa principal está disponível nos logs do servidor.

Apache Tomcat/10.0.5
java.lang.ClassNotFoundException: br.com.alura.gerenciador.acaoListaEmpresas

Diogo, tudo bem?

Me parece que faltou um . no trecho

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

o correto seria

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

como visto nessa aula!

Faça essa correção e veja se as coisas funcionam como esperado!

Resolvi os erros que me pediu, porém apareceu um novo erro 500

HTTP Status 500 – Internal Server Error
Type Exception Report

Message java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagLibraryValidator

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

Exception

jakarta.servlet.ServletException: java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagLibraryValidator
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:332)
    jakarta.servlet.http.HttpServlet.service(HttpServlet.java:770)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    br.com.alura.gerenciador.servlet.UnicaEntradaServlet.service(UnicaEntradaServlet.java:41)
    jakarta.servlet.http.HttpServlet.service(HttpServlet.java:770)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
Root Cause

java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagLibraryValidator
    java.base/java.lang.ClassLoader.defineClass1(Native Method)
    java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
    java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
    org.apache.catalina.loader.WebappClassLoaderBase.findClassInternal(WebappClassLoaderBase.java:2470)
    org.apache.catalina.loader.WebappClassLoaderBase.findClass(WebappClassLoaderBase.java:866)
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1370)
    org.apache.catalina.loader.WebappClassLoaderBase.loadClass(WebappClassLoaderBase.java:1224)
    java.base/java.lang.ClassLoader.defineClass1(Native Method)
    java.base/java.lang.ClassLoader.defineCl...........................
solução!

Oi Diogo

Sobre o erro:

java.lang.NoClassDefFoundError: javax/servlet/jsp/tagext/TagLibraryValidator

Dentro da pasta /gerenciador/WebContent/WEB-INF/lib/ adicione a lib do jakarta.servlet.jsp.jstl, você pode baixar ela pelo link https://mvnrepository.com/artifact/jakarta.servlet.jsp.jstl/jakarta.servlet.jsp.jstl-api/2.0.0 clicando em "Files jar (44 KB)"

Eu baixei como solicitou e coloquei na pasta lib, dai veio um novo erro no formLogin.jsp

<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>


<c:url value="/entrada" var="linkEntradaServlet"/>

<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>

    <c:import url="logout-parcial.jsp" />

  <form action="${linkEntradaServlet}" method="post">

        Login: <input type="text" name="login" />
         Senha: <input type="password" name="senha" />

         <input type="hidden" name="acao" value="login"/>

        <input type="submit" />
    </form>

</body>
</html>

O erro esta na linha <%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>

HTTP Status 500 – Internal Server Error
Type Exception Report

Message org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.view.formLogin_jsp

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

Exception

org.apache.jasper.JasperException: org.apache.jasper.JasperException: java.lang.ClassNotFoundException: org.apache.jsp.WEB_002dINF.view.formLogin_jsp
    org.apache.jasper.servlet.JspServletWrapper.handleJspException(JspServletWrapper.java:590)
    org.apache.jasper.servlet.JspServletWrapper.service(JspServletWrapper.java:426)
    org.apache.jasper.servlet.JspServlet.serviceJspFile(JspServlet.java:379)
    org.apache.jasper.servlet.JspServlet.service(JspServlet.java:327)
    jakarta.servlet.http.HttpServlet.service(HttpServlet.java:770)
    org.apache.tomcat.websocket.server.WsFilter.doFilter(WsFilter.java:53)
    br.com.alura.gerenciador.servlet.ControladorFilter.doFilter(ControladorFilter.java:46)
    br.com.alura.gerenciador.servlet.AutorizacaoFilter.doFilter(AutorizacaoFilter.java:36)
    br.com.alura.gerenciador.servlet.MonitoramentoFilter.doFilter(MonitoramentoFilter.java:25)