Quais as diferenças de se usar service() ou doPost() ?!?!?
11 respostas
J
javaman00
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.
packagetest;importjava.io.IOException;importjava.io.PrintWriter;importjavax.servlet.ServletException;importjavax.servlet.http.HttpServlet;importjavax.servlet.http.HttpServletRequest;importjavax.servlet.http.HttpServletResponse;publicclassTestaParametrosextendsHttpServlet{protectedvoidservice(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{// AQUI PRINTA!//PrintWriter out = response.getWriter();//out.println(request.getParameter("nome"));}protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletException,IOException{// AQUI NÃO PRINTA!PrintWriterout=response.getWriter();out.println(request.getParameter("nome"));}}
J
javaman00
alguem tem conhecimentos??
T
thingol
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.
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.
J
javaman00
Olá thingol,
Inclusive esse trecho é recente, e eu tirei-os da apostila do caelum:
Alguêm com mais conhecimentos para opinar/contribuir sobre?
obrigado por qualquer ajuda…
T
thingol
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.
J
javaman00
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 + -”
kuchma
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
kuchma
javaman00:
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:
Isso eh um indicio de que voce pode usar o service(). :D
Marcio Kuchma
J
javaman00
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.
kuchma
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.
Marcio Kuchma
J
javaman00
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…