Cursos / Informática para Internet / Desenvolvimento Web I / Aula

arrow_back Aula 02 - Introdução aos Servlets

Métodos de execução dos Servlets

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 HTTP
Mé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).

Figura 08 - Tela com link para acesso via método GET e botão para acesso via método POST
 Tela com link para acesso via método GET e botão para acesso via método POST

O código da página HTML vista na Figura 8 é mostrado a seguir.

AخA
1
<html>
2
        <head>
3
        <title>ServletGetPost</title>
4
        </head>
5
        <body>
6
        <a href="ServletGetPost">GET</a><br>
7
        <form action="ServletGetPost" method="post">
8
        <input type="submit" value="POST">
9
        </form>
10
        </body>
11
    </html>
Listagem 4 - Código da página HTML com link e botão

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).

x
1
package aula02;
2
3
        import java.io.IOException;
4
        import java.io.PrintWriter;
5
6
        import javax.servlet.ServletException;
7
        import javax.servlet.annotation.WebServlet;
8
        import javax.servlet.http.HttpServlet;
9
        import javax.servlet.http.HttpServletRequest;
10
        import javax.servlet.http.HttpServletResponse;
11
12
        @WebServlet("/ServletGetPost")
13
        public class ServletGetPost extends HttpServlet {
14
        private static final long serialVersionUID = 1L;
15
16
        protected void doGet(HttpServletRequest request,
17
        HttpServletResponse response)
18
        throws ServletException, IOException {
19
        PrintWriter saida = response.getWriter();
20
        saida.write("<HTML><BODY>Olá! ");
21
        saida.write("Mesma resposta para o método GET.");
22
        saida.write("</BODY></HTML>");
23
        saida.close();
24
    }
25
26
    protected void doPost(HttpServletRequest request,
27
    HttpServletResponse response)
28
    throws ServletException, IOException {
29
    PrintWriter saida = response.getWriter();
30
    saida.write("<HTML><BODY>Olá! ");
31
    saida.write("Resposta para o método POST.");
32
    saida.write("</BODY></HTML>");
33
    saida.close();
34
}
35
}
Listagem 5 - Código do ServletGetPost
Figura 09 - Telas geradas pelo ServletGetPost ao usarmos requisição via método POST e GET, respectivamente
 Telas geradas pelo ServletGetPost ao usarmos requisição via método POST e GET, respectivamente

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.

33
1
package aula02;
2
3
    import java.io.IOException;
4
    import java.io.PrintWriter;
5
6
    import javax.servlet.ServletException;
7
    import javax.servlet.annotation.WebServlet;
8
    import javax.servlet.http.HttpServlet;
9
    import javax.servlet.http.HttpServletRequest;
10
    import javax.servlet.http.HttpServletResponse;
11
12
    @WebServlet("/ServletTantoFaz")
13
    public class ServletTantoFaz extends HttpServlet {
14
15
    private static final long serialVersionUID = 1L;
16
17
    protected void doGet(HttpServletRequest request,
18
    HttpServletResponse response)
19
    throws ServletException, IOException {
20
    doPost(request, response);
21
}
22
23
protected void doPost(HttpServletRequest request,
24
HttpServletResponse response)
25
throws ServletException, IOException {
26
PrintWriter saida = response.getWriter();
27
saida.write("<HTML><BODY>Olá! ");
28
saida.write("Mesma resposta para o GET ou POST.");
29
saida.write("</BODY></HTML>");
30
saida.close();
31
}
32
33
}
Listagem 6 - Código do ServletTantoFaz

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