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

Problema para rodar uma servlet no tomcat

Olá, estou utilizando o livro Use a cabeça Servlets e Jsp e estou tendo problemas no primeiro exemplo do capítulo 3.

Já tentei rodar a aplicação tanto no tomcat 6(recomendado pelo livro) e no tomcat 9 e sempre recebo HTTP Status 404 - /SelectBeer.do quando a página que contém o formulário me redireciona para a página que deveria conter a servlet.

Obs: A página que contém o formulário funciona corretamente.

Desde já agradeço.

Minha estrutura de diretórios é a seguinte: apache-tomcat-9.0.0.M10\webapps\Beer-V1\WEB-INF\classes\com\example\web (local onde a servlet está)

Fiz a compilação da classe através do seguinte código: javac -classpath C:\Users\PC\desktop\apache-tomcat-9.0.0.M10\lib\servlet-api.jar; BeerSelect.java

Meu código web.xml está da seguinte forma e no diretório apache-tomcat-9.0.0.M10\webapps\Beer-V1\WEB-INF:

<web-app xmlns="http://xmlns.jcp.org/xml/ns/javaee"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://xmlns.jcp.org/xml/ns/javaee
                      http://xmlns.jcp.org/xml/ns/javaee/web-app_4_0.xsd"
  version="4.0">

<servlet>
    <servlet-name>Ch3 Beer</servlet-name>
    <servlet-class>com.example.web.BeerSelect </servlet-class>
</servlet>

<servlet-maping>
    <servlet-name>Ch3 Beer</servlet-name>
    <url-pattern>/SelectBeer.do</url-pattern>
</servlet-maping>

</web-app>

O código do BeerSelect.java está assim:

package com.example.web;

import javax.servlet.*;
import javax.servlet.http.*;
import java.io.*;

public class BeerSelect extends HttpServlet{

    public void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        resp.setContentType("text/html");
        PrintWriter out = resp.getWriter();
        out.println("<html>");
        out.println("<body>");
        out.println("Beer Selection Advice <br>");
        String c = req.getParameter("color");
        out.println("<br> Got beer color" + c);
        out.println("</body>");
        out.println("</html>");
    }
}

O html está assim (diretório: \apache-tomcat-9.0.0.M10\webapps\Beer-V1) :

<html>
<head>
</head>
<body>
    <form method="post"
          action="/SelectBeer.do">
    <p>Select beer characteristics</p>
    <p>Color:</p> 
        <select name="color" size="1">
            <option value="light">light</option>
            <option value="amber">amber</option>
            <option value="brown">brown</option>
            <option value="dark">dark</option>
        </select>
        <br>
        <br>
        <center>
            <input type="submit">
        </center>
    </form>    

</body>
</html>
3 respostas

Oi Lucas, não sabemos como são os exemplos do use a cabeça, o que ele recomenda e tal.. fica complicado da gente conseguir te ajudar.. Nesse caso específico, meu chute é que vc esqueceu de colocar o contexto na action do form.. troque para

<form method="post"
          action="/Beer-V1/SelectBeer.do">

Minha sugestão é que faça nosso curso de servlets.. vai ser bem mais fácil conseguir ajuda.

Eu coloquei o contexto e mesmo assim não funcionou. Eu já fiz o curso de servlets, mas estou tentando a abordagem do livro pra ter uma perspectiva mais geral de tudo. Obrigado.

solução!

Outra coisa que percebi é que seu comando de compilação manual está equivocado => ```javac -classpath C:\Users\PC\desktop\apache-tomcat-9.0.0.M10\lib\servlet-api.jar; BeerSelect.java````

Tem que passar o caminho do seu arquivo .java a partir da pasta classes... De todo jeito, acho meio contraprodutivo vc ficar compilando coisas na mão nessa altura do campeonato.

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