Init e destroy

Ola galera^^
Hoje comecei meus estudos em jsp e servlets pela apostila da caelum fj-21
Mas infelizmente ja me deparei com uma duvida que acho muito importante ser retirada.
Comecei a ler sobre init e destroy e quando fui fazer o teste não obti o resultado que gostaria , conforme explicava na apostila.

Deixe me ver se entendi.
O init e o destroy faz a sua servlet(classe java) ser carregada uma vez e ser usada atravez de threads por diversos clientes que acessam o servidor , evitando assim que determinadas variaveis da servlet sejam utilizadas por varios clientes evitando conflito de dados

Acontece que eu fiz o teste com um contador e conforme era acessado por 2 clientes diferentes ele continuava de onde parou e não contava a de cada cliente como era para ser feito…

Eu estou correto na definição de Init e destroy, e entendi bem sua funcionalidade??

Qual poderia ser meu erro?

Agradeço muito a ajuda de todos.
E desculpe se a pergunta foi muito idiota :?

Sem ver sua classe de Servlet fica dificil ver o erro que está descrevendo, mas acho que isso te ajuda:

Quando o container é iniciado é intanciada a classe de Servlet, mas ainda é apenas um objeto, após rodar o método init o objeto é considerado um Servlet(está pronto para servir)

Tanto o método init e destroy são chamados apenas uma vez.
Existe apenas uma instancia dp Servlet com N threads acessando ele.

Quanto ao seu contador ser seguro em relação a threads seu servlet pode incrementer SingleThreadModel(não recomendado) ou vc sincroniza o objeto session e dentro do bloco sincronizado vc incrementa sua variavel.

Bons estudos!

Obrigado pela resposta
quanto a classe me desculpe…
aqui esta:

[code]package br.com.caelum.agenda.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.ServletConfig;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;

import org.apache.naming.java.javaURLContextFactory;

import br.com.caelum.agenda.acessobd.ContatoDAO;
import br.com.caelum.agenda.contato.Contato;

public class AdicionaContatoServlet extends HttpServlet{
int contador = 0;
public void init(ServletConfig config) throws ServletException{
super.init();

}
public void destroy(){
	super.destroy();

}
protected void service(HttpServletRequest request, HttpServletResponse response) throws IOException, ServletException{
//Busca o writer 
	PrintWriter out = response.getWriter();

//buscando os parâmetros no request
String nome = request.getParameter(“nome”);
String endereco = request.getParameter(“endereco”);
String email = request.getParameter(“email”);
String dataEmTexto = request.getParameter(“dataNascimento”);
Calendar dataNascimento = null;
//fazendo conversao da data
contador++;
try {
Date date = new SimpleDateFormat(“dd/MM/yyyy”).parse(dataEmTexto);
dataNascimento = Calendar.getInstance();
dataNascimento.setTime(date);
} catch (ParseException e) {
out.println(“Erro de conversão da data”);
return;
}
//Monta um objeto de contato
Contato contato = new Contato();
contato.setNome(nome);
contato.setEndereco(endereco);
contato.setEmail(email);
contato.setDataNascimento(dataNascimento);
//salva o contato
ContatoDAO dao = new ContatoDAO();
dao.adicionaContato(contato);

//Imprime o nome do contato que foi adicionado

out.println("");
out.println("");
out.println(“Contato " + contato.getNome() + " adicionado com sucesso!”);
out.println(“Contador: “+ contador);
out.println(””);
out.println("");

}

}
[/code]

Bom dia.
Minha primeira postagem e aproveitando o gancho…

Também tive a mesma dúvida, da mesma apostila. O que gilmaslima explicou, entendi, mas ainda assim, restou uma dúvida básica.
Já que o Init será iniciada para o uso de servlet, então este nunca terá que ser destruído já que seu uso é frequente para diversos usuários em tempos indeterminados, isso mesmo ? Ou será usado o destroy para usuários diferentes tornando o servlet uma espécie de sessão ?

Neste código mostrado a cima pelo tioola, a ideia então seria que o contador fosse constante para cada usuário independente até o momento que o servlet se mantivesse em uso ?

Grato.

Bom, parei nessa mesma dúvida, o init gera uma nova instancia do objeto e o destroy a destroi?

Então cada thread gera uma instancia do objeto, sendo assim são várias instancias?

Sobre não funcionar o init e destroy, tambem tive o mesmo problema, dai chamei os dois a partir do meu metodo service e deu sinal de vida.

Alguem saberia responder essa dúvida?