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

HTTP Status 405 Method "post" (metodo GET not Allowed)

Galera, estou testando os códigos do curso de Servlet 1 de java e sempre que envio um doPost o navegador retorna "HTTP method GET is not supported by this URL"

o doPost é tanto pelo servlet quanto no method do form.

Estou tentando com o doPost porque sempre que crio um servlet que utiliza o response.sendRedirect no lugar de um request.foward a pagina acaba fazendo o direcionamento antes de qualquer informação ser inserida e entes de pressionar o submit.

package br.com.alura.gerenciador.servlet;

import java.io.IOException;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;

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 NovaEmpresaServlet
 */
@WebServlet("/novaEmpresa")
public class NovaEmpresaServlet extends HttpServlet {

    private static final long serialVersionUID = 1L;

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response) 
            throws ServletException, IOException {
        System.out.println("Cadastrando nova empresa");

        String nomeEmpresa = request.getParameter("nome");
        String paramDataEmpresa = request.getParameter("data");

        Date dataAbertura = null;
        try {
            SimpleDateFormat sdf = new SimpleDateFormat("dd/MM/yyyy");
            dataAbertura = sdf.parse(paramDataEmpresa);
        } catch (ParseException e) {
            throw new ServletException(e);
        }

        Empresa empresa = new Empresa();
        empresa.setNome(nomeEmpresa);
        empresa.setDataAbertura(dataAbertura);

        Banco banco = new Banco();
        banco.adiciona(empresa);

        request.setAttribute("empresa", empresa.getNome());

        response.sendRedirect("listaEmpresas");

//        //chamar o JSP ou Servlet
//        RequestDispatcher rd = request.getRequestDispatcher("/listaEmpresas");
//        request.setAttribute("empresa", empresa.getNome());
//        rd.forward(request, response);
    }

}
<%@ taglib uri="http://java.sun.com/jsp/jstl/core" prefix="c" %>
<c:url value="/novaEmpresa" var="linkServletNovaEmpresa"/>

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

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

        Nome: <input type="text" name="nome"  />
        Data Abertura: <input type="text" name="data"  />

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

</body>
</html>
5 respostas
solução!

Você não vai conseguir testar um doPost chamando pelo navegador, pois ele sempre faz um GET.

Se você quiser testar pelo browser, altere o método para um doGet ou, utilize uma ferramente como o postman: https://www.getpostman.com/

Nela você vai conseguir chamar todos os verbos HTTP =)

Obrigado. Uma outra forma de resolver isso foi adotando o padrão MVC na aplicação só que só fui ver isso no curso de Servlet II. Vou dar uma olhada nesse getposman.

Tem algumas extensions que podem ser usadas no browser se preferir também, no chrome: https://chrome.google.com/webstore/detail/advanced-rest-client/hgmloofddffdnphfgcellkdfbfbjeloo

Não serve, porque supondo que essa fosse uma aplicação comercial eu não controlaria se meu cliente possui ou não essas extensões.

Se quiser uma outra opção tem o insomnia também: https://insomnia.rest/

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