Dúvida servlet - método service() ou doGet() / doPost() [RESOLVIDO]

5 respostas
diego2005

Olá pessoal, sou novo em desenvolvimento Web, e estou com essa dúvida.

Na apostila da Caelum, os exemplos são utilizando o método service() do HttpServlet, já no livro Use a Cabeça, os autores falam que não se deve “anular” o método service(), e sim os métodos doGet() e doPost().

E agora, qual método devemos utilizar?? E por que??

Grato,

Diego.

5 Respostas

Dragon_Tatto

Ola Diego

não sei se vou ajudar, mas eu programo em Web, mas tbm naum a muito tempo,
eu sempre uso os dois métodos
o servlet para criar os relatorios pelo IREPORT
e o get, na classe java pojo
criando um pojo vc poderá manipular suas SQL´s,( se vc tiver q usar alguma)

naum sei se isso ajuda mas eh oq eu faço

abrass

eltonads

Cara…

Eu sempre uso doPost e doGet mesmo… Mas porque aprendi assim e sempre uso assim.
Vai ver o service serve pros dois, e dentro dele deve ter alguma lógica… Possivelmente pra discernir entre o post e o get pelo request.getMethod talvez… sei lá, só lendo documentação pra saber agora…

Ah… nesse livro aí a tradução “anular um método” está errada. Se referencia ao termo “override” no inglês, que para nós seria algo como “subscrever/sobrescrever um método”

É isso aí, boa sorte!

T

Sobrepor o método “service” acaba sobrepondo mais coisas que se deve.

Leia a última resposta deste post: http://www.coderanch.com/t/359048/Servlets/java/Why-doPost-doGet-not-everything

rodrigo.ferreira

Bom dia.

Você nunca deve anular o método service() (A não ser que seja necessário, por motivos muito especiais...).

Quando algum usuário faz uma requisição para um Servlet, o WebContainer faz a chamada primeiramente no método service() dele, o método service() faz várias verificações, e finalmente, decide se encaminha a chamada para o método doGet() ou doPost().

Devemos considerar o seguinte: O método service() é um método de callback e não deve ser sobrescrito. O desenvolvedor deve preocupar-se com os métodos doGet() ou doPost(). Caso o tipo do método da requisição HTTP não seja importante, faça um "funil" e crie outro método auxiliar. Por exemplo:

doGet(HttpServletRequest request, HttpServletResponse response) {
       this.processRequest(request, response);
    }
   
    doPost(HttpServletRequest request, HttpServletResponse response) {
       this.processRequest(request, response);
    }

    // este método deve ser criado para receber tanto as requisições get quanto post...
    processRequest(HttpServletRequest request, HttpServletResponse response) {
       // aqui vai toda a lógica do servlet... 
       // qualquer requisição, seja ela por Get ou Post "cairá" aqui.
    }

O mais importante a saber é que o método service() quem chama é o WebContainer, ele faz os procedimentos internos dele, e depois encaminha para os métodos do desenvolvedor.

Recomendo a leitura do livro "Use a Cabeça! Servlets & JSP - Basham, Sierra e Bates".

Abraço,

Visite o Blog do Perereca: http://www.blogdoperereca.blogspot.com

diego2005

Obrigado pelas respostas pessoal.

O link que o thigol passou é interessante, apesar do meu inglês ser bem básico, consegui compreender o que foi dito. A última resposta diz o seguinte:

Remember, service() is a method defined in Servlet, not HttpServlet. A servlet is meant to be protocol independent. While most people do use it with HTTP, that is not a requirement. When you write your own HttpServlet you are making your life easier by not having to do a switch type of statment for each of the HTTP actions. But if you had, say, an SMTPServlet, it might have methods something like doAutn() and doData(). Or an FTPServlet might have doPut() and doLS(). In those cases it would be protocol specific.

I’m not sure if that answered your question or not. For HttpServlets it is simply not having to reinvent something that already exists.

Criado 14 de maio de 2009
Ultima resposta 14 de mai. de 2009
Respostas 5
Participantes 5