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

Renomeando classes que estendem HttpServlet.

Olá Pessoal!

Primeira oportunidade de participar desse forum. Encontrei um comportamento estranho no Eclipse, durante a prática do exercício descrito no seguinte capítulo:

Servlet Parte 1: Fundamentos da programação web Java. Trabalhando com POST e GET.

No caso, havia criado uma classe de nome 'tabuada' com 't' minúsculo. O programa funcionou perfeitamente, mas para seguir boas práticas com convenções de nome. Resolvi alterar a classe para 'Tabuada', com 'T' maiúsculo, conforme segue:

@WebServlet(description = "Servlet para gerar tabuada baseado em número informado.", urlPatterns = { "/tabuada" })
public class Tabuada extends HttpServlet {

...

}

Quando faço isso, a classe não é recompilada, gerando um erro no Tomcat.

javax.servlet.ServletException: Error instantiating servlet class [br.com.alura.gerenciador.servlet.Tabuada]

Alguém poderia me dizer o que poderia fazer para atualizar as definições para que o Eclipse e o Tomcat reconheçam a classe nova, por favor???

OBS: Através do Eclipse, também renomeei o arquivo correspondente para " Tabuada.java ".

A classe tabuada é baseada no exercício original, não é a mesma classe do exercício. Segue código abaixo:

package br.com.alura.gerenciador.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;

/**
 * Servlet implementation class Tabuada
 */
@WebServlet(description = "Servlet para gerar tabuada baseado em número informado.", urlPatterns = { "/tabuada" })
public class Tabuada extends HttpServlet {
    private static final long serialVersionUID = 1L;

    /**
     * @see HttpServlet#service(HttpServletRequest request, HttpServletResponse
     *      response)
     */
    protected void service(HttpServletRequest request, HttpServletResponse response)
            throws ServletException, IOException {

        int numeroReferencia = 0;
        java.io.PrintWriter out = response.getWriter();
        try {
            numeroReferencia = Integer.parseInt(request.getParameter("numero"));
        } catch (Exception e) {

            out.print("<div style='color:#ff0000'>" + e.toString() + "</div>");

        }
        out.print("<html><body>");
        if (numeroReferencia > 0) {

            for (int i = 0; i <= 10; i++) {

                out.print(numeroReferencia + " X " + i + " = " + (numeroReferencia * i) + "<br/>");

            }

        } else {

            out.print("Numero informado inválido");

        }
        out.print("</body></html>");

    }

}

Valeu Pessoal! Abraço

3 respostas

Olá Eric!

Tenta fazer esses pequenos passos:

  • Clica com o botão direito no seu projeto e clica no refresh

  • Na aba dos servidores (lá em baixo) clique com o botão direito no seu servidor e clica em "Clean Tomcat Work Directory"

  • Faça o mesmo caminho que o tópico 2 mas agora clique em "Clean"

  • Na aba do menu clica em Project e logo em seguida clica em "Clean"

Acredito que isso irá resolver seu problema!

Aguardo seu retorno! ^^

solução!

Oi Guilherme, boa tarde!

Segui os passos que você indicou, mas o problema persistiu. Porém, com base no que você comentou, acabei encontrando uma maneira de resolver que foi a seguinte:

Alterei a perspectiva do Eclipse de Java EE para Java. Lá, consegui visualizar as classes geradas para o projeto. E lá estava o arquivo 'tabuada.class', com o 't' minúsculo. (No diretório build/classes/br/com/alura/gerenciador/servlet). Lá, então, eu apaguei manualmente o arquivo, depois fui em Project >> Clean. Após isso, ele não só limpou, como também gerou o arquivo 'Tabuada.class'. Além disso, percebi que o Tomcat foi automaticamente reiniciado. Daí, a página carregou normalmente.

OBS: Curioso, é que isso eu não consegui achar pela perspectiva 'Java EE'...

Muito obrigado pela dica.

Abraço

Opa Eric, que bom que conseguiu!

Peço que feche o tópico marcando uma solução por favor!

Isso ajuda os outros alunos a acharem a resposta mais facilmente caso tenham o mesmo problema ^^

Agradeço desde já!

Bons estudos pra ti!

Qualquer coisa, só nos chamar!

Abs :D