Os materiais didáticos aqui disponibilizados estão licenciados através de Creative Commons Atribuição-SemDerivações-SemDerivados CC BY-NC-ND. Você possui a permissão para visualizar e compartilhar, desde que atribua os créditos do autor. Não poderá alterá-los e nem utilizá-los para fins comerciais.
Atribuição-SemDerivações-SemDerivados
CC BY-NC-ND
Cursos / Informática para Internet / Desenvolvimento Web I / Aula
Até o momento, todos os Servlets que foram implementados redefiniram o método doGet() da classe HttpServlet. Para entendermos o porquê disso, precisamos estar cientes de que o HTTP (HyperTextTransferProtocol) é o protocolo mais utilizado na comunicação entre clientes e servidores web e ele pode ser utilizado de acordo com vários métodos (GET, POST, HEAD, PUT, etc.). Os métodos GET e POST são os mais utilizados e estão brevemente descritos no Quadro 1. Os detalhes sobre esses dois métodos não serão abordados neste curso.!
Quadro 1 - Métodos GET e POST do protocolo HTTPMétodo | Descrição |
---|---|
GET | Método de acesso ao servidor web utilizado ao se: digitar uma URL em um navegador web; clicar em uma URL de uma página; acionar um formulário que contenha o atributo method="get". No caso, utiliza a própria URL para envio desses dados. Por exemplo, a URL <http://www.meusite.com/arquivo?p1=10> é utilizada para acessar o recurso <http://www.meusite.com/arquivo> passando-se o parâmetro p1 com valor 10. |
POST | Método de acesso ao servidor web utilizado ao se acionar um formulário web que contenha o atributo method="post". No caso, os parâmetros e valores de acesso a um recurso web não aparecem na própria URL – eles são enviados pelo navegador ao servidor de forma separada. |
A implementação do método service() que é dada pela classe HttpServlet reconhece o tipo de método utilizado na requisição web e delega a execução a métodos específicos de acordo com o método utilizado. O termo “delega” quer dizer que o método executa outro método, ou seja, deixando para o segundo o trabalho de processamento da requisição. No caso dos métodos GET e POST, o método service() delega a tarefa de processar as requisições para os métodos doGet() e doPost(), respectivamente.
Para você entender melhor esse funcionamento, observe o exemplo da Figura 8, o qual possui uma página HTML com um link e com um botão que levam à execução do mesmo Servlet. No caso, o link usa o método GET e o botão usa o método POST (observe os atributos action e method do marcador form no código da Listagem 4).
O código da página HTML vista na Figura 8 é mostrado a seguir.
<html>
<head>
<title>ServletGetPost</title>
</head>
<body>
<a href="ServletGetPost">GET</a><br>
<form action="ServletGetPost" method="post">
<input type="submit" value="POST">
</form>
</body>
</html>
Já a implementação da classe ServletGetPost para atender às requisições acionadas pelo link ou botão dessa página é vista a seguir. Esse Servlet redefine tanto o método doGet() como o método doPost() de HttpServlet, apresentando essa informação na mensagem de resposta (veja a Figura 9).
package aula02;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/ServletGetPost")
public class ServletGetPost extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
PrintWriter saida = response.getWriter();
saida.write("<HTML><BODY>Olá! ");
saida.write("Mesma resposta para o método GET.");
saida.write("</BODY></HTML>");
saida.close();
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
PrintWriter saida = response.getWriter();
saida.write("<HTML><BODY>Olá! ");
saida.write("Resposta para o método POST.");
saida.write("</BODY></HTML>");
saida.close();
}
}
Se na hora de implementar um Servlet, você notar que não faz diferença entre os métodos GET e POST (esse é o caso mais comum!), então você pode implementar apenas um dos métodos (digamos, o GET) e fazer com que o outro chame o primeiro. Isso pode ser observado no código do ServletTantoFaz apresentado a seguir.
package aula02;
import java.io.IOException;
import java.io.PrintWriter;
import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
@WebServlet("/ServletTantoFaz")
public class ServletTantoFaz extends HttpServlet {
private static final long serialVersionUID = 1L;
protected void doGet(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
doPost(request, response);
}
protected void doPost(HttpServletRequest request,
HttpServletResponse response)
throws ServletException, IOException {
PrintWriter saida = response.getWriter();
saida.write("<HTML><BODY>Olá! ");
saida.write("Mesma resposta para o GET ou POST.");
saida.write("</BODY></HTML>");
saida.close();
}
}
Caso você não redefina os métodos doGet() ou doPost(), a sua implementação padrão é mostrar uma mensagem de erro padrão indicando que o método HTTP utilizado não é suportado.
Versão 5.3 - Todos os Direitos reservados