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
[code]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");
}
}[/code]
Classe da Página Principal
[code]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>");
}
}[/code]
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 :]
1 curtida
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:
[code]@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);
}[/code]
[]´s
1 curtida
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:
[code]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);
}[/code]
1 curtida
Oi Diogo,
Vc pode passar o código do seu formulário e como seu Servle está mapeado no web.xml?
[]´s
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>
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 =)
1 curtida
[quote=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 =)[/quote]
Beleza Diogo 
[]´s