Lógica e a servlet

Olá, guys alguém pode me corrigir em dizer o que esta errado com este codigo? A página não é acessada com tento => http://localhost:8080/fj21-agenda/mvc?logica=PrimeiraLogica

package br.com.caelum.mvc.logica;

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


public interface Logica {
	String executa(HttpServletRequest request, HttpServletResponse response) 
			throws Exception;
}


package br.com.caelum.mvc.logica;

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

public class PrimeiraLogica implements Logica {

	@Override
	public String executa(HttpServletRequest request,
			HttpServletResponse response) throws Exception {
		System.out.println("Executando a primeira logica...");
		System.out.println("Retornando o nome da p�gina JSP...");
		return "primeira-logica.jsp";
	}

}

<%@ page language="java" contentType="text/html; charset=ISO-8859-1"
	pageEncoding="ISO-8859-1"%>
<!DOCTYPE html>
<html>
<head>
<meta charset="ISO-8859-1">
<title>Insert title here</title>
</head>
<body>
	<h1>Página da nossa primeira lógica</h1>
</body>
</html>

package br.com.caelum.mvc.servlet;

import java.io.IOException;

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 br.com.caelum.mvc.logica.Logica;

@WebServlet("/mvc")
public class ControllerServlet extends HttpServlet {
	protected void service(HttpServletRequest request, HttpServletResponse response)
			throws ServletException, IOException {

		String parametro = request.getParameter("logica");
		String nomeDaClasse = "br.com.cealum.mvc.logica." + parametro;
		
		try {
			Class classe = Class.forName(nomeDaClasse);
			Logica logica = (Logica)classe.newInstance();
			String pagina = logica.executa(request, response);
			request.getRequestDispatcher(pagina).forward(request,response);
		} catch (Exception e) {
			throw new ServletException("A lógica de negócio causou uma exceção", e);
		}

	}
}

Dá algum erro?
Está printando aquelas mensagens “Executanto a primeira lógica”, etc?

Esta me retornado a página que fiz “página não encontrada” do erro 404.jsp

Você escreveu um código pra mandar pro 404?
Posta ele tbm.

sim, aquela configuração que faz no web.xml

<error-page>
	<error-code>404</error-code>
	<location>/404.html</location>
</error-page>

Quando deleto esta configuração, aparece no navegador isto:

# HTTP Status 404 – Not Found

Type Status Report

Message The requested resource [/fj21-agenda/mvc] 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/9.0.43

Será que o problema tem a ver com o método classe.newInstance(); ele aparece riscado no Eclipse. Ele foi descontinuado?

Ele está depreciado. A nova forma é classe.getConstructor().newInstance().
Mas isso não influencia.
Parece que seu servlet não é chamado…

Tenta seguir esses passos: https://stackoverflow.com/a/26247021/5937189
Pode ser alguma incompatibilidade com o Tomcat.

Eu não entendi muito bem o que eu posso fazer utilizabdo a solução dada por la. Meu sistema não tem o método main… Aonde eu vou colocar este código?

String contextPath = "/";
  String webappDirLocation = "src/main/webapp/";
  String baseDirectory = new File(webappDirLocation).getAbsolutePath();

  Tomcat tomcat = new Tomcat();
  tomcat.setPort(8080);
  StandardContext context = (StandardContext) tomcat.addWebapp(contextPath, baseDirectory);

  // Additions to make @WebServlet work
  String buildPath = "target/classes";
  String webAppMount = "/WEB-INF/classes";

  File additionalWebInfClasses = new File(buildPath);
  WebResourceRoot resources = new StandardRoot(context);
  resources.addPreResources(new DirResourceSet(resources, webAppMount, additionalWebInfClasses.getAbsolutePath(), contextPath));
  context.setResources(resources);
  // End of additions

  tomcat.start();
  tomcat.getServer().await();

Tentei o tomcat 7, mas támbem continuou o mesmo problema de página não encontrada.

Crie uma classe, coloque esse método main e execute a classe pelo IDE.

Também tem o server GlassFish. Poderia testar com ele.

É uma pena, eu fiz este curso na Caelum a 5 anos e tudo funcionva direito…

O problema pode está no Eclipse também? Eu estou usando o Eclipse IDE for Enterprise Java Developers - 2020-12 e percebi que nele não tem a opção de instalar o GlassFish

Acho que não.

Tenta fazer o esquema do método main.

Estudei um material mais recente e descobri algumas mudanças. Agora está funcionando.

Pode dizer qual mudança em específico?

Eu deletei tudo que eu tinha e comecei do zero. Baixai .jars atuais. Como eu não consertei o código antigo eu não saberia exatamente o que foi.

1 curtida