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

Erro 405 ao fazer logout - Método GET não suportado para URI de redirecionamento Servidor

Boa tarde,

Estou encontrando o erro 405 ao tentar acessar a página de logout no modo de redirecionamento servidor.

Entendi que o método GET não suporta este tipo de URI, mas estou utilizando o método post.

Abaixo segue o código do Logout:

@WebServlet(urlPatterns= "/logout")
public class Logout extends HttpServlet{
    public Logout() {
        // TODO Auto-generated constructor stub
        System.out.println("Instanciando uma servelet do tipo Logout  "+ this);
    }

    @Override
    public void init() throws ServletException {
        // TODO Auto-generated method stub
        super.init();
        System.out.println("Inicializando a Servelet "+this);
    }

    @Override
    public void destroy() {
        // TODO Auto-generated method stub
        super.destroy();
        System.out.println("Destruindo a Servelet "+this);
    }
    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        /*Cookie cookie = new Cookies(req.getCookies()).getUsuarioLogado();

        if (cookie != null) {
            cookie.setMaxAge(0);
            resp.addCookie(cookie);

        }*/
        HttpSession sessao = req.getSession();
        sessao.removeAttribute("usuario.logado");

        /*PrintWriter writer = resp.getWriter();
        writer.println("<html><body>Logout Efetuado</body></html>");*/
        //começando a usar mvc

        resp.sendRedirect("logout.html"); // redirecionamento no lado cliente, usado para acessar o logout, mas acessando a pagina logout.html

        RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/paginas/logout.html"); //redirecionamento no lado server
        dispatcher.forward(req, resp);


    }
}
3 respostas

Boa tarde Jeferson, no final do seu método doPost:

resp.sendRedirect("logout.html"); // redirecionamento no lado cliente, usado para acessar o logout, mas acessando a pagina logout.html

        RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/paginas/logout.html"); //redirecionamento no lado server
        dispatcher.forward(req, resp);

Não podemos ter dois redirecionamentos, apenas um ou outro... e quando fazemos um POST, o recomendado é fazermos um redirect, mas perceba que sua página de logout está escondida dentro de WEB-INF, então você precisa usar o caminho completo para acessa-la:

resp.sendRedirect("/WEB-INF/paginas/logout.html");

Entendi,

Na verdade o código agora já está comentado no primeiro redirecionamento, estou utilizando o RequesterDispatcher e está apresentando o mesmo erro, 405.

Segue o código novamente:

    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        // TODO Auto-generated method stub
        /*Cookie cookie = new Cookies(req.getCookies()).getUsuarioLogado();

        if (cookie != null) {
            cookie.setMaxAge(0);
            resp.addCookie(cookie);

        }*/
        HttpSession sessao = req.getSession();
        sessao.removeAttribute("usuario.logado");

        /*PrintWriter writer = resp.getWriter();
        writer.println("<html><body>Logout Efetuado</body></html>");*/
        //começando a usar mvc

        //resp.sendRedirect("/WEB-INF/paginas/logout.html"); // redirecionamento no lado cliente, usado para acessar o logout, mas acessando a pagina logout.html

        RequestDispatcher dispatcher = req.getRequestDispatcher("/WEB-INF/paginas/logout.html"); //redirecionamento no lado server
        dispatcher.forward(req, resp);


    }
solução!

Boa tarde Guilherme,

Alterei o de doPost() para doGet e funcionou.

Você sabe me dizer o por quê?