Problemas com os metodos doGet e doPost, Servlets

6 respostas
D

Pessoal,

Estou lendo a apostila FJ-21 da Caelum, porem esbarrei em um problema e a apostila não aprofunda no assunto.

Basicamente fiz um servlet, cujo pega uma serie de variaveis via POST (definido no arquivo HTML) e da um insert num banco mySQL.

O problema é o seguinte:

A apostila fala em um momento que o metodo service, cujo qual reescrevemos ao extender a classe HttpRequest aceita tanto POST quanto GET.

Dai a apostila fala que para se obrigar a usar um, ou outro, devemos implementar o metodo doGet, ou doPost, porem o eclipse apresenta uma seriei de errors ao adicionar o metodo e não compila.

Segue o código:

package br.com.caelum.servlet;

import java.io.IOException;
import java.io.PrintWriter;
import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Calendar;
import java.util.Date;


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

import br.com.caelum.jdbc.dao.CadastraContatoDAO;
import br.com.caelum.modelo.Contato;


public class CadastroContato extends HttpServlet{
	
    void doPost(HttpServletRequest req, HttpServletResponse res);
	
	protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
		
		/*
		 * PrintWriter out = response.getWriter();
		 
		
		 // escreve o texto
		 out.println("<html>");
		 out.println("<body>");
		 out.println("Primeira servlet");
		 out.println("</body>");
		 out.println("</html>");
		
		*/
		PrintWriter out = response.getWriter();
		
		// pegando os parâmetros do request
		String nome = request.getParameter("nome");
		String email = request.getParameter("email");
		String endereco = request.getParameter("endereco");
		String dataNascimentoString = request.getParameter("dataNascimento");
		Calendar dataNascimento = null;
		
		// fazendo a conversão da data de String para Calendar(se acordo com o modelo)
		try {
			
			Date date = new SimpleDateFormat("dd/MM/yyyy").parse(dataNascimentoString);
		    dataNascimento = Calendar.getInstance();
		    dataNascimento.setTime(date);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			out.println("Erro de conversão de data.");
			return;// para execução do metodo
		}
		
		// Cria intancia um objeto com os parametros da tela de entrada
		Contato contato = new Contato();
		contato.setNome(nome);
		contato.setEmail(email);
		contato.setEndereco(endereco);
		contato.setDataNascimento(dataNascimento);
		
		// salva o contato
		CadastraContatoDAO dao = new CadastraContatoDAO();
		dao.adiciona(contato);
		
		// imprime o nome do contato que foi adicionado
		out.println("<html>");
		out.println("<head>");
		out.println("<title>Usuário: " + contato.getNome() + " cadastrado</title>");
		out.println("<head>");
		out.println("<body>");
		out.println("Contato: " + contato.getNome() + " adicionado com sucesso!!!");
		out.println("</body>");
		out.println("</html>");
				
	}	
	
}

Muito grato,

Daniel

6 Respostas

H

Apresenta erro por que você declarou o método errado uai:
void doPost(HttpServletRequest req, HttpServletResponse res);

Isso aí eh um método abstrato. O.o Ou apaga ou cria uma implementação aí.

P

e quais são os erros?

att,

H

e quais são os erros?

att,
Um dos erros é o método declarado sem implementação:

void doPost(HttpServletRequest req, HttpServletResponse res);

Nisso ele vai pode dar um monte de erro maluco.

P

e quais são os erros?

att,
Um dos erros é o método declarado sem implementação:

void doPost(HttpServletRequest req, HttpServletResponse res);

Nisso ele vai pode dar um monte de erro maluco.

ops, então, na vdd eu tinha planejado forçar nosso amigo ate encontrar isso. heheh.

valeu msm assim.

att,

D

desculpe pessoal.

Realmente isso é um simplorio abstract method, no caso ignorem o “;” e adicionem {}

olhem um trecho da apostila:

Podemos também definir o método para POST e, dessa forma, os dados são passados dentro do corpo do
protocolo HTTP, sem aparecer na URL que é mostrada no navegador.

Podemos, além de definir no formulário como os dados serão passados, também definir quais métodos
HTTP nossa servlet aceitará.

O método service aceita todos os métodos HTTP, portanto, tanto o método GET quanto o POST. Para
especificarmos como trataremos cada método, temos que escrever os métodos doGet e/ou doPost na nossa
servlet:

void doGet(HttpServletRequest req, HttpServletResponse res);
void doPost(HttpServletRequest req, HttpServletResponse res);

D

alguma sugestão?

Criado 17 de janeiro de 2012
Ultima resposta 17 de jan. de 2012
Respostas 6
Participantes 3