Quais as diferenças de se usar service() ou doPost() ?!?!?

Olá pessoal bom dia,

Andei buscando na internet e em livros e não obtive exito.

Gostaria de saber quais as diferenças de se utilizar o método doPost() e o service() .

Usando o service() consigo pegar os dados sem problemas que vem do formulário .

Com o doPost() consigo também, alêm lógico creio eu ser um pouco mais dificil porque preciso declarar o doGet() e dentro dele chamar o doPost().

Concluido:

    • Todo artigo e livros indicam as boas práticas de programação com servlets diz que devemos
      implementar sempre o método service e não um dos métodos como doGet, doPost, doHeader etc.
    • Seguindo esse raciocinio… então deveriamos sempre usar o service() para “começar” a Action em questão e depois da ai trabalhar com os outros métodos…
      doPost(),doHeader() e doGet(). Então como trabalhariamos?, exemplos?!? rs.

Fiz um teste simples colocando “todos os htmls” no service() como formulários e etc… e gostaria que quando “submitasse” fosse para o
doPost() . Essa seria a forma correta?, se sim…, não funcionou com migo.

Abraços, e obrigado aos amigos por qualquer ajuda.

Exemplo como estou fazendo:

[code]
package test;

import java.io.IOException;
import java.io.PrintWriter;

import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

public class TestaParametros extends HttpServlet{

protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
        // AQUI PRINTA!
        //PrintWriter out = response.getWriter();
       //out.println(request.getParameter("nome"));

}
protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException{
                 // AQUI NÃO PRINTA!
                 PrintWriter out = response.getWriter();
                 out.println(request.getParameter("nome"));
}

}[/code]

alguem tem conhecimentos??

[quote=javaman00]1) - Todo artigo e livros indicam as boas práticas de programação com servlets diz que devemos
implementar sempre o método service e não um dos métodos como doGet, doPost, doHeader etc.
[/quote]

Hum, sempre achava que era ao contrário. É que a implementação default de service chama doGet, doPost etc. conforme o tipo do request http. Então se você vai implementar service, tem de fazer TUDO que ele fazia, senão não chama direito doHead etc.
Sempre achei que você tinha de implementar doPost e/ou doGet, e ambos chamarem uma terceira rotina, que é a que efetivamente processa seus dados.

Olá thingol,

Inclusive esse trecho é recente, e eu tirei-os da apostila do caelum:


http://www.caelum.com.br/caelum/apostila/caelum-java-web-fj21.pdf

Alguêm com mais conhecimentos para opinar/contribuir sobre?

obrigado por qualquer ajuda…

Basicamente é assim:

Se você der uma olhadinha no fonte de HttpServlet (olhar o fonte não dói - ou será que dói? ) você vai ver que a implementação default de service chama doPost, doGet etc. conforme o tipo de request HTTP.
Então se você sobrepor service, sem chamar doPost, doGet etc. como ele fazia, você vai ver que doPost, doGet etc. nunca vão ser chamadas.

Verdade… inclusive agora no horário do almoço eu andei procurando mais informações para sanar as minhas dúvidas.

Segue:

Brincadeiras a partes rsrsrs.(Doi ou não doi) alguem teria um exemplo prático demonstarando o uso?, a não ser o clássico:

...
doPost(...){

}
doGet( ... ){
   doPost( ... )
}
...

Abraços…

PS: thingol, se manja um esquema legal de ver o fonte da HttpServlet no Eclipse???. Fiz da seguinte forma crtl+(Click mouse esquerdo) ai ele abre o “HttpServlet.class” sendo que o mesmo nem consigo copiar… o próprio eclipse não deixa…

no “JDeveloper” eu consigo facilmente com “CRTL + -”

Precisa distinguir o metodo HTTP utilizado na requisicao (GET, POST, HEAD, etc)? Utilize doXXX().

Tanto faz? Utilize service().

Pra simplificar coloque isso num operador ternario. :mrgreen:

Marcio Kuchma

Se voce faz coisas como:

[code] protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
doPost(request, response);
}

protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    // ...
}[/code]

Isso eh um indicio de que voce pode usar o service(). :smiley:

Marcio Kuchma

Olá kuchma,

Entendi… então uso o service e boa?..

Oque a Sun recomenda?!, não encontrei nada referente…

De qualquer forma daqui pra frente só uso o service().

Lóooooogicamente se não tiver um MVC como o Struts ai eu desencano completamente rs.

Abraços cara.

Acho que nesse caso nao tem sentido uma “recomendacao oficial”… os metodos estao la, sobrescreva o que voce achar mais util. Em todo caso, pra nao ficar com a pulga atras da orelha, verifique o fonte (ou javadoc) da classe, como o thingol disse, pra ter certeza do codigo/funcionalidade que voce esta sobrescrevendo. Pode ser util, como no caso do init(ServletConfig config).

Neste caso especifico o javadoc diz que “nao ha razao” para sobrescrever o service, porque tem o doGet(), doPost(), etc. E eles estao corretos em certo sentido, pois o ideal eh voce colocar o codigo em metodos especificos e apenas fazer uma chamada a partir do “handler” (doGet, doPost, service, etc). Ou seja, no final tanto faz. :slight_smile:

Marcio Kuchma

Entendi… então é o seguinte…

quando estiver com preguinça eu uso o service() e quando estiver “XP”(EXtrem… Program…) eu mando um conjunto doPost() e doGet() ehehehe…

Abraços cara e obrigado.