[RESOLVIDO]Servlet multiplicando objetos

6 respostas
gordogranudo

Bom pessoal, estou com um probleminha.
Estou fazendo uma atividade, que monta uma especie de página de compras
e tenho o seguinte problema:
cada produto é um objeto, eu crio o produto direto no codigo e adiciono-o num arraylist,
beleza funciona perfeitamente, mas na pagina rodando quando atualiza
o produto é duplicado, e quantas vezes vc atualizar mais um produto identico aparece
creio que seja pela criação dos objetos ser dentro do metodo service
mas tentei colocar fora do metodo não funcionada
aqui segue a parte do codigo vejam

public class Brasileiras extends HttpServlet{
	static List<Produto> produtos = new ArrayList<Produto>();
	//tentei por aqui nao funcionou
	public void service(HttpServletRequest req, HttpServletResponse resp)throws IOException{
		PrintWriter out =  resp.getWriter();
		String operacao="";
		int posicao=0, index=0;
		
		produtos.add(new Produto("condicionador", "higiene", "1.jpg", "8 dias", 9.99));
		produtos.add(new Produto("Shampoo", "limpeza", "2.jpg", "8 dias", 8.99));

6 Respostas

L

Tente sobscrever o método init() sem argumentos herdado de GenericServlet

public void init() throws ServletException {
    // atribua os produtos aqui
}

Não sobrescreva service, apenas sobrescreva doGet, doPost.

gordogranudo
lsouza13:
Tente sobscrever o método init() sem argumentos herdado de GenericServlet
public void init() throws ServletException {
    // atribua os produtos aqui
}
Não sobrescreva service, apenas sobrescreva doGet, doPost.

cara eu utilizei este método init()
funcionou para o que eu queria
muito obrigado meu problema foi solucionado
o codigo ficou assim

public class Brasileiras extends HttpServlet{
	static List<Produto> produtos = new ArrayList<Produto>();
	
	public void init() throws ServletException {  
		produtos.add(new Produto("condicionador", "higiene", "1.jpg", "8 dias", 9.99));
		produtos.add(new Produto("Shampoo", "limpeza", "2.jpg", "8 dias", 8.99));
	}
	
	public void service(HttpServletRequest req, HttpServletResponse resp)throws IOException{
		PrintWriter out =  resp.getWriter();
		int posicao=0, index=0;

como disse funcionou beleza
mas não sei exatamente o que este metodo faz não o conhecia
poderia me explicar?

L

Boa tarde gordogranudo

Vou tentar explicar.

Este é um assunto ligado ao ciclo de vida do servlet.

Primeiro, quando uma classe estende HttpServlet, e ela é “registrada” no DD (Deployment Descriptor), e quando vc start o tomcat (ou outro container) o seu .class é carregado.

Depois de carregado, seu construtor roda… até aí ela não pode ser chamada de servlet ainda. É apenas uma classe java.

Depois disso, o método init() é chamado. É um processo imediatamente anterior pra colocar a servlet pronta pra sua tarefa principal: a de responder pelas solicitações.

Imagine a servlet como um piloto de formula 1. A fase de vestir o macacão e ligar o carro é o método init.

Assim que tudo está “ligado”, a servlet tá pronta pro serviço dela… Repetindo, sua principal função é atender solicitações (requisições).

Assim, o próximo passo é execução do método service() que é chamado “automaticamente”, ou seja, pelo container. Ele é chamado assim que é feito a primeira solicitação da URL que corresponde ao servlet (vide servlet-mapping do DD). O método service não é aconselhável ser subscrito como falei. O ideal é que vc subscreva apenas doGet e doPost. Porque o próprio service() chamará esses métodos seus.

Caso tenha alguma dúvida ainda, vai postando que vamos aprendendo juntos.

Abs

gordogranudo

eu to sobrescrevendo o método service na minha classe pq foi assim que o professor ensinou .
Não sabia que havia outras possibilidades :?

deixa me ver se entendi o init() prepara o ambiente pro service “agir” é isso?

L

gordogranudo:
eu to sobrescrevendo o método service na minha classe pq foi assim que o professor ensinou .
Não sabia que havia outras possibilidades :?

deixa me ver se entendi o init() prepara o ambiente pro service “agir” é isso?

Isso mesmo.

Lembre-se que init() executa apenas 1 vez. E que ele pode acessar inclusive ServletConfig e ServletContext.

Valeu.

gordogranudo

lsouza13:
gordogranudo:
eu to sobrescrevendo o método service na minha classe pq foi assim que o professor ensinou .
Não sabia que havia outras possibilidades :?

deixa me ver se entendi o init() prepara o ambiente pro service “agir” é isso?

Isso mesmo.

Lembre-se que init() executa apenas 1 vez. E que ele pode acessar inclusive ServletConfig e ServletContext.

Valeu.

Muito obrigado pela atenção e pela paciência foi de grande valia suas informações

[]'s

Criado 17 de março de 2013
Ultima resposta 18 de mar. de 2013
Respostas 6
Participantes 2