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

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.

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

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!

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

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:

[code]

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

[/code]

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

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:

[quote]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. [/quote]