[RESOLVIDO] Problema com Servlet - HTTP method GET is not supported by this URL

6 respostas
D

Olá,

Estou com um problema:
Meu projeto da faculdade é uma rede social. Tenho uma servlet pra efetuar a lógica do login e redirecionar pra uma Servlet que contem a página principal da rede ou voltar pra página inicial de login.
Quando o usuário consegue se logar, eu redireciono o usuário usando resp.sendRedirect("main.do");. O problema está quando chega em main.do, ele lança o erro "HTTP Status 405 - HTTP method GET is not supported by this URL". Porém, eu tenho o método doGet() implementado em main.do. Não sei o que pode ser o problema. Alguém pode me ajudar?

Aqui estão os códigos das classes: Classe de Login
public class Login extends HttpServlet {

    @Override
    protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
        String login = (String) req.getParameter("login");
        String senha = (String) req.getParameter("senha");
        Usuario us = new Usuario(login,senha);
        LoginDAO ld = new LoginDAO();
        if(ld.logar(us)) {
            HttpSession session = req.getSession();
            UsuarioDAO ud = new UsuarioDAO();
            us = ud.recuperar(login);
            session.setAttribute("usuario", us);
            resp.sendRedirect("main.do");
        } else resp.sendRedirect("index.jsp");

    }



}
Classe da Página Principal
public class Main extends HttpServlet {

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        HttpSession ss = request.getSession();
        Usuario us = (Usuario) ss.getAttribute("usuario");
        PrintWriter out = response.getWriter();
        StringBuffer sb = new StringBuffer();

        sb.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
        sb.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
        sb.append("<head>");
        sb.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />");
        sb.append("<title>Dood - Perfil de ").append(us.getNick()).append("</title>");
        sb.append("<link href=\"STYLES/main.css\" rel=\"stylesheet\" type=\"text/css\" media=\"screen\"/>");
        sb.append("</head>");
        sb.append("<body>");
        out.print(sb.toString());
        request.getRequestDispatcher("navbar.sw").include(request, response);
        out.println("</body></html>");
    }



}

Lembrando que ainda to no primeiro módulo da disciplina, tecnologias mais avançadas eu ainda não sei usar.

Agradeço desde já pra quem ajudar :]

6 Respostas

D

Oi Diogo,

Vc sabe quanto tempo faz que não é recomendado fazer o que você está fazendo? Criar o código de páginas dentro de um Servlet?
Enfim, talvez seja a forma que o professor tenha ensinado, mas te aconselho a dar uma estudada melhor na tecnologia depois de terminar seu trabalho.

Quando ao doGet, doPost, etc, vc precisa configurar seu formulário para o método ser o mesmo que está implementado no servlet. O seu formulário que manda a requisição está com o método como get ou post? Provavelmente deve estar como post.

Outra dica. No servlet, crie sempre um método para tratar todos os tipos de requisições, ai vc chama ele a partir da implementação dos métodos http. Algo assim:
@Override  
private void processRequest(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    // aqui vem seu código...
}

// independente do métopdo http, o processRequest é chamado.
@Override  
protected void doPost(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    processRequest(req, resp);
}

@Override  
protected void doGet(HttpServletRequest req, HttpServletResponse resp) throws ServletException, IOException {
    processRequest(req, resp);
}
[]´s
D

Olá David,

Primeiramente, obrigado pelas dicas. Como você mesmo falou, o professor só ensinou dessa maneira até agora, posteriormente a gente deve fazer de outra forma. Quanto ao meu projeto: Até então no meu projeto só tenho um formulário que envia os dados para a classe Login por método POST, essa classe verifica se o usuário existe no banco e redireciona ou para a página inicial da rede ou de volta para o login. Quando ele está redirecionando para a página inicial, ele aponta o erro do método GET.

Tentei fazer do mesmo jeito que você postou ai e ele ainda continua a apontar que a classe Main não implementa GET.
Não tenho nem idéia do que fazer agora :(

Como ficou:

public class Main extends HttpServlet {
    
    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        response.setContentType("text/html;charset=UTF-8");
        HttpSession ss = request.getSession();
        Usuario us = (Usuario) ss.getAttribute("usuario");
        PrintWriter out = response.getWriter();
        StringBuffer sb = new StringBuffer();

        sb.append("<!DOCTYPE html PUBLIC \"-//W3C//DTD XHTML 1.0 Transitional//EN\" \"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd\">");
        sb.append("<html xmlns=\"http://www.w3.org/1999/xhtml\">");
        sb.append("<head>");
        sb.append("<meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\" />");
        sb.append("<title>Dood - Perfil de ").append(us.getNick()).append("</title>");
        sb.append("<link href=\"STYLES/main.css\" rel=\"stylesheet\" type=\"text/css\" media=\"screen\"/>");
        sb.append("</head>");
        sb.append("<body>");
        out.print(sb.toString());
        request.getRequestDispatcher("navbar.sw").include(request, response);
        out.println("</body></html>");
    } 

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    } 

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        processRequest(request, response);
    }
D

Oi Diogo,

Vc pode passar o código do seu formulário e como seu Servle está mapeado no web.xml?

[]´s

D

Formulário

<form id="form1" method="post" action="login.do"> <p> login: <input name="login" type="text" id="login" size="20" /> <br /> senha: <input name="senha" type="password" id="senha" size="20" /> <input type="submit" name="enviar" id="enviar" value="entrar" /> </p> </form>
Arquivo web.xml

<?xml version="1.0" encoding="UTF-8"?> <web-app version="2.5" xmlns="http://java.sun.com/xml/ns/javaee" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://java.sun.com/xml/ns/javaee http://java.sun.com/xml/ns/javaee/web-app_2_5.xsd"> <servlet> <servlet-name>Profile</servlet-name> <servlet-class>business.Profile</servlet-class> </servlet> <servlet> <servlet-name>Login</servlet-name> <servlet-class>business.Login</servlet-class> </servlet> <servlet> <servlet-name>NavBar</servlet-name> <servlet-class>business.NavBar</servlet-class> </servlet> <servlet> <servlet-name>Main</servlet-name> <servlet-class>business.Main</servlet-class> </servlet> <servlet-mapping> <servlet-name>Profile</servlet-name> <url-pattern>/profile.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Login</servlet-name> <url-pattern>/login.do</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>NavBar</servlet-name> <url-pattern>/navbar.sw</url-pattern> </servlet-mapping> <servlet-mapping> <servlet-name>Main</servlet-name> <url-pattern>/main.do</url-pattern> </servlet-mapping> <session-config> <session-timeout> 30 </session-timeout> </session-config> <welcome-file-list> <welcome-file>index.jsp</welcome-file> </welcome-file-list> </web-app>

D

Descobri o problema, ele acusava erro no “navbar.sw” que eu estava incluindo em Main. Ele não implementava doGet().
Erro besta de iniciante mesmo. De qualquer maneira, muito obrigado pela ajuda =)

D

diogozero:
Descobri o problema, ele acusava erro no “navbar.sw” que eu estava incluindo em Main. Ele não implementava doGet().
Erro besta de iniciante mesmo. De qualquer maneira, muito obrigado pela ajuda =)

Beleza Diogo :wink:

[]´s

Criado 3 de outubro de 2010
Ultima resposta 4 de out. de 2010
Respostas 6
Participantes 2