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

"HTTP method GET is not supported by this URL", mas estou usando POST

Galera, me ajudem aí.

Tentei seguir a risca as instruções, mas aparentemente deixei passar algo e não estou conseguindo encontrar. Quando tento acessar o http://localhost:8080/gerenciador/login, tenho o erro descrito no assunto do tópico.

Segue os códigos:

index.html

<html>
<body>
    Bem vindo ao nosso gerenciador de empresas!
    <br />
    <form action="novaEmpresa" method="post">
        Nome da Empresa: <input type="text" name="nome" /> <input
            type="submit" value="Enviar" />
    </form>
    <form action="login" method="post">
        Email: <input type="text" name="email" /> Senha: <input
            type="password" name="senha" /> <input type="submit"
            value="Login" />
    </form>
</body>
</html>

Login.java

package br.com.alura.gerenciador.web;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import br.com.alura.gerenciador.Usuario;
import br.com.alura.gerenciador.dao.UsuarioDAO;

@WebServlet( urlPatterns = "/login" )
public class Login extends HttpServlet
{
  @Override
  protected void doPost( HttpServletRequest req, HttpServletResponse resp ) throws ServletException, IOException
  {
    PrintWriter writer = resp.getWriter();
    String email = req.getParameter( "email" );
    String senha = req.getParameter( "senha" );

    Usuario usuario = new UsuarioDAO().buscaPorEmailESenha( email, senha );
    if( usuario == null )
    {
      writer.println( "<html><body>" );
      writer.println( "Usuario ou senha inválida" );
      writer.println( "</body></html>" );
    }
    else
    {
      Cookie cookie = new Cookie( "usuario.logado", usuario.getEmail() );
      resp.addCookie( cookie );
      writer.println( "<html><body>" );
      writer.println( "Usuario " + usuario.getEmail() + " logado!" );
      writer.println( "</body></html>" );
    }
    writer.close();
  }
}

Não estou conseguindo enxergar o porquê estou recebendo a reclamação sobre o GET, sendo que estou usando doPost() na classe Login e instrui na index.html que o método utilizado é o post. Podem me dar uma mão?

2 respostas
solução!

Oi Vinicius!

Sempre que digitamos algo na barra de endereço do navegador, como http://localhost:8080/gerenciador/login, ele vai tentar fazer uma requisição do tipo GET. Então vai chegar na Servlet Login e vai perceber que o método GET não é suportado.

Neste caso, é necessário primeiro acessar o formulário, como por exemplo: http://localhost:8080/gerenciador/index.html, e aí depois de preencher os dados, submeter o form.

Tenta e avisa no que deu? Abraço!

Poxa, agora entendi. O código tá rodando normal, então. Eu consigo o funcionamento esperado quando preencho email e senha e faço a submissão dos dados (seja com email/senha inválido ou válido). Muito obrigado pela explicação, não sabia que havia esse comportamento por padrão. Agora tudo faz sentido! xD